From e988f5c31008dc136e3a09cf92daa0d46c8cee1e Mon Sep 17 00:00:00 2001 From: Michele Scandura Date: Tue, 17 Nov 2020 22:10:52 +0000 Subject: [PATCH] funziona --- .../Commands/GetMapSnapshotCommand.cs | 31 +++++----- .../Controllers/SessionController.cs | 2 +- Sledgemapper.Api/Data/MyDbContext.cs | 4 ++ Sledgemapper.Api/Hubs/SledgemapperHub.cs | 54 ++++++------------ Sledgemapper.Api/LocalDatabase.db | Bin 20480 -> 20480 bytes Sledgemapper.Api/Startup.cs | 2 +- Sledgemapper.Api/sledgemapper.db | Bin 45056 -> 188416 bytes .../Clients/ISledgemapperClient.cs | 1 + Sledgemapper/CommunicationManager.cs | 43 ++++++++------ Sledgemapper/IMapApi.cs | 1 - Sledgemapper/Sledgemapper.cs | 5 +- Sledgemapper/UI/MainWidget.Generated.cs | 51 ++++++++++++++++- Sledgemapper/UI/mainwidget.xml | 13 +++++ 13 files changed, 135 insertions(+), 72 deletions(-) diff --git a/Sledgemapper.Api/Commands/GetMapSnapshotCommand.cs b/Sledgemapper.Api/Commands/GetMapSnapshotCommand.cs index 8ffce12..221c582 100644 --- a/Sledgemapper.Api/Commands/GetMapSnapshotCommand.cs +++ b/Sledgemapper.Api/Commands/GetMapSnapshotCommand.cs @@ -34,10 +34,10 @@ namespace Sledgemapper.Api.Commands double timestamp; Sledgemapper.Shared.Entities.Session mapSession; var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName); - snapshot = _dbcontext.Snapshots.FirstOrDefault(m => m.SessionId == session.SessionId); + snapshot = _dbcontext.Snapshots.OrderByDescending(s => s.Timestamp).FirstOrDefault(m => m.SessionId == session.SessionId); if (snapshot is null) { - + timestamp = 0; mapSession = new Shared.Entities.Session(); } @@ -59,11 +59,11 @@ namespace Sledgemapper.Api.Commands mapSession.NewTile(tile, tile.ID); break; case "W": - var wall = JsonSerializer.Deserialize(mapUpdate.Object); + var wall = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.NewWall(wall, wall.ID); break; case "O": - var overlay = JsonSerializer.Deserialize(mapUpdate.Object); + var overlay = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.NewOverlay(overlay, overlay.ID); break; @@ -79,24 +79,29 @@ namespace Sledgemapper.Api.Commands mapSession.DeleteTile(tile); break; case "W": - var wall = JsonSerializer.Deserialize(mapUpdate.Object); + var wall = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.DeleteWall(wall); break; case "O": - var overlay = JsonSerializer.Deserialize(mapUpdate.Object); + var overlay = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.DeleteOverlay(overlay); break; } } } -var newSnapshot = new Snapshot{ - SessionId=session.SessionId, - Timestamp=mapUpdates.Max(mapSession=>mapSession.Timestamp), - Object = JsonSerializer.Serialize(mapSession) + if (mapUpdates.Any()) + { + var newSnapshot = new Snapshot + { + SessionId = session.SessionId, + Timestamp = mapUpdates.Max(mapSession => mapSession.Timestamp), + Object = JsonSerializer.Serialize(mapSession) + }; + await _dbcontext.Snapshots.AddAsync(newSnapshot); + await _dbcontext.SaveChangesAsync(); + } + -}; -await _dbcontext.Snapshots.AddAsync(newSnapshot); -await _dbcontext.SaveChangesAsync(); return mapSession; diff --git a/Sledgemapper.Api/Controllers/SessionController.cs b/Sledgemapper.Api/Controllers/SessionController.cs index 7da714c..8895974 100644 --- a/Sledgemapper.Api/Controllers/SessionController.cs +++ b/Sledgemapper.Api/Controllers/SessionController.cs @@ -38,7 +38,7 @@ namespace Sledgemapper.Api.Controllers { var userId = int.Parse(HttpContext.User.Identity.Name); await _mediator.Send(new SaveNewSnapshotCommand(sessionName, session, userId)); - } + } [HttpPost("tile")] public async Task Post(string sessionName, [FromBody] Tile tile) diff --git a/Sledgemapper.Api/Data/MyDbContext.cs b/Sledgemapper.Api/Data/MyDbContext.cs index ea909df..c2e5dce 100644 --- a/Sledgemapper.Api/Data/MyDbContext.cs +++ b/Sledgemapper.Api/Data/MyDbContext.cs @@ -60,12 +60,16 @@ namespace Sledgemapper.Api.Data modelBuilder.Entity(entity => { entity.HasKey(e => e.UserConnectionId); + entity.HasIndex(e => e.UserId); + }); modelBuilder.Entity().ToTable("SessionUser", "dbo"); modelBuilder.Entity(entity => { entity.HasKey(e => e.SessionUserId); + entity.HasIndex(e => e.SessionId); + }); modelBuilder.Entity().ToTable("Snapshot", "dbo"); diff --git a/Sledgemapper.Api/Hubs/SledgemapperHub.cs b/Sledgemapper.Api/Hubs/SledgemapperHub.cs index b918919..8677793 100644 --- a/Sledgemapper.Api/Hubs/SledgemapperHub.cs +++ b/Sledgemapper.Api/Hubs/SledgemapperHub.cs @@ -17,11 +17,10 @@ using Sledgemapper.Helpers; namespace SignalRChat.Hubs { - - [Authorize] public class SledgemapperHub : Hub { + private static readonly ConcurrentDictionary UserColors = new ConcurrentDictionary(); private readonly MyDbContext _dbContext; private readonly DataContext _datacontext; @@ -35,14 +34,14 @@ namespace SignalRChat.Hubs // #cca300, #20f200, #004011, #00e6d6, #005c73, #0057d9, #d900ca, #660029, #d9003a // private static Dictionary _sessions = new Dictionary(); public List Colors = new List{ - "#CC0000", - "#20f200", - "#FFCC00", - "#006666", - "#660029", - "#0000CC", - "#663399", - "#CC0099"}; + "#e6194B", + "#f58231", + "#3cb44b", + "#000075", + "#911eb4", + "#800000", + "#808000", + "#469990"}; public async Task NewTile(string sessionName, Tile tile) { @@ -147,37 +146,20 @@ namespace SignalRChat.Hubs if (session != null) { - // var newSession = new Session(); var userSession = new SessionUser { SessionId = session.SessionId, UserId = userId }; _dbContext.SessionUsers.Add(userSession); await _dbContext.SaveChangesAsync(); - - //var usersSession = _dbContext.SessionUsers.Where(m => m.SessionId == session.SessionId).Select(m => m.UserId).ToList(); - // var players = _datacontext. - // Users. - // Where(m => usersSession.Contains(m.Id)).ToList(). - // //Select((r, index) => new { Place = index, Name = r }) - // Select((p, index) => new Player - // { - // Initials = p.Initials, - // UserId = userId, - // Color = Colors[index], - // Position = new Tile { X = 0, Y = 0 } - // }).ToList(); - - //await _dbContext.SaveChangesAsync(); - await Groups.AddToGroupAsync(Context.ConnectionId, session.SessionName); var user = _datacontext.Users.First(u => u.Id == userId); - var SessionUsers = _dbContext.SessionUsers.Where(m => m.SessionId == session.SessionId).OrderBy(m => m.UserId).ToList(); - var u = SessionUsers.FirstOrDefault(m => m.UserId == userId); - var player = new Player { UserId = userId, Initials = user.Initials, Position = new Tile { X = 0, Y = 0 }, Color = Colors[SessionUsers.IndexOf(u)] }; - await Clients.Group(sessionName).NewPlayer(player); - + var player = new Player { UserId = userId, Initials = user.Initials, Position = new Tile { X = 0, Y = 0 }, Color = UserColors[userId] }; + + await Clients.Group(session.SessionName).NewPlayer(player); + await Clients.Group(session.SessionName).RefreshPlayers(); + var newSession = new Sledgemapper.Shared.Entities.Session { - SessionName = sessionName, + SessionName = session.SessionName, SessionId = session.SessionId }; @@ -202,7 +184,7 @@ namespace SignalRChat.Hubs // } } - public async Task UpdatePosition(string sessionName,int sessionId, Tile tile) + public async Task UpdatePosition(string sessionName, int sessionId, Tile tile) { var userId = int.Parse(Context.User.Identity.Name); //var session = _dbContext.Sessions.FirstOrDefault(m => m.SessionName == sessionName); @@ -235,6 +217,8 @@ namespace SignalRChat.Hubs var userConnection = new UserConnection { ConnectionId = Context.ConnectionId, UserId = userId }; _dbContext.UserConnections.Add(userConnection); await _dbContext.SaveChangesAsync(); + var availableColor = Colors.Where(m => !UserColors.Values.Contains(m)).First(); + UserColors.AddOrUpdate(userId, availableColor, (key, oldValue) => availableColor); await base.OnConnectedAsync(); } @@ -245,7 +229,7 @@ namespace SignalRChat.Hubs { _dbContext.UserConnections.Remove(userConnection); } - + var userSessions = _dbContext.SessionUsers.Where(m => m.UserId == userConnection.UserId).ToList(); { foreach (var userSession in userSessions) diff --git a/Sledgemapper.Api/LocalDatabase.db b/Sledgemapper.Api/LocalDatabase.db index 20954d8b899b0d853104aae0bbe6e3da3824f80d..89c527fa1c12f5726c95beca6d058ce5c5e25c07 100644 GIT binary patch delta 484 zcmVf3F zaA|OGZ*XaFaBomX%X_jSHp&6%RJ6{kjlRB}?q1QYBB~4~B=)fe{5GW+&Ve7I$jY+w zxhJa>UM!(QoMxm%3eUkEWWL2v(9(?Dx% z!Y4kEC54zm{n8#TY<#0pJW!y$xAXMOiJ8EKZ|=ly%z+T}`Vq=c@D9(y-F^k1YT$?L zelp>YpNxeo45$=GYuQspTM-lIh_V<&trxLXQh3#uwcmE%Aw37q6)~OAK__t&yz8|% z;X)C)_Lx&^q#3Fmd%Uw_)$<7T<$5*z%pI?RKuS}`!EQRZ0N56}21yWaRZA12NRz@1HTBL{$@b|Wxmb&b{7O0nE-UK2G;-p diff --git a/Sledgemapper.Api/Startup.cs b/Sledgemapper.Api/Startup.cs index d442c73..a86af33 100644 --- a/Sledgemapper.Api/Startup.cs +++ b/Sledgemapper.Api/Startup.cs @@ -49,7 +49,7 @@ namespace SignalRChat services.AddSignalR(); services.AddAutoMapper(AppDomain.CurrentDomain.GetAssemblies()); services.AddMediatR(typeof(Startup)); - services.AddDbContext(options => options.UseSqlite("Data Source=sledgemapper.db")); + services.AddDbContext(options => {options.UseSqlite("Data Source=sledgemapper.db"); options.UseQueryTrackingBehavior(QueryTrackingBehavior.NoTracking);}); // services.AddEntityFrameworkSqlite().AddDbContext(); // configure strongly typed settings objects diff --git a/Sledgemapper.Api/sledgemapper.db b/Sledgemapper.Api/sledgemapper.db index 94d51261b40656cbcd35dbbed85c4cdbe7ab2d9a..d2754f6ee3199049efcbff4f9da0d3671a624f12 100644 GIT binary patch literal 188416 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

4E6pWcWmI9~mzr1bnSCrI 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 AdjJ3c literal 45056 zcmeI53ve678Gvg5igaSjSWrk)lK!QWkDP$-GhM`R$bta`D^hKKvg-%PD0xi&V&!>x`yOr!s z)sks{W#W@hx^MUYc5ihj@1vu=X)xxquMS6o-k7~YbCE`?)hxE#H5!c`|F`1*^230i zi2LLRBR|Qo)oZS;wA=6-jFw(a?sK_oZ4cx;ZT+$32>ulwU;qq&0WbgtzyKHk1OH0~ zqDEt$qk!2oe=yYVTkr1a>+nURgW-_8ZSe+uiCv~fkE_1ZW$$Wnw|BYh?iQ!3$Ig=v z;q9$0c0O?+Z(k@s6>)s=rXhndueg}mQV{d54EVaDzDQ#@6!NW#;gnNvSQP$KKM~X>aLjYO*)BwsdrQ>hXR%-?pqzNow=Bo9jKj z_GPYKdwo}DtGflK-0W)UEIB6$5?Fpc8G-n&PFD|3H<7l@QoJe58uRAOW44q{h1?PH z4n+sTF?nl94O8Bo3{c)f%7HR8`Mtb-+Mp68M54-ZwXXEzf>A^yzt}k#^hIOd;1F-e zm7^&oVz1tqS6IkwF-s9k^-9#9NK|~vD&kJQ>73A$J4yLeMW1|ob_9s|Bqc1CYP-&u zS5Uxg9z8e4M0|Q;Y^u0O=rl3SJf5lZEVUBKMbz@{!Zl_;iuWdS-G)4EZ8nv8hUTQj8Ay(!6xOCliZ5bF|!t;wO)l`-J;2_uky4 zxs2_gEo{3o=dGOka+c+2tp}|kYmw!Il8uu7i8fP1h z7`7Vf*!S7T**^Ai{bBu9{dKz2x*zCn*5zrBXm8VA&wRk_X1vU7&1;%%>W?{8ZPJ)c z95=?cbdK>od|g>>3E#`tRhRH?Ctt_M1_Qp*O1^~mgkzGRy7Ce}*+$frjx)o@cm5%a zs;EI_1kl@0qDpE|DFO7`&rk&!RFyuo3Igai`KX*4L~``29#lpRA~`zQjY_FOBu6Kn zLSIyZYNm=mgCi2?jb-RsGAKhmB7u%CMAs-m7?HU`l1gpz2~P`LOrghtBI{zuUQ zY7i+$`#wTNWDsS|?mvYJm7vP$YBnK9JDOR6#~?;*v-NVLEuAA7B&kW08$ON;Ur>=G z-BiI%j=vNX>}g1Jc^cot2=i4W$rB~1FDP80BH^YYb7dlU8hz#a!n`yjI#28W^qeqP zCh6p|lk$XPO!t9H$W!#aUZEg6q<23N@>L|sIAxxG;uhv)hxF|8!fX}ke9A7m`T-#? zJEUuCh0A4C%MNM$xG;;JM5s@}TZ@HDvqKttQn*A#lFE+K zQ@ldBn4Uz6F1|##C_ALl4uPX5k!r!{FHkNfna{oUmZ}rJ1WVTx5J3Lzr;sf>pnWKZ z8br|T-}XAPW(Ra1vXDU;s*?IrXVSlIF*0WbblXW}q6U#lZOb-f%nm4w4AdY}scl|? z*zAB7AiWZFJ`I5XYdq3r1+?*1q@@Ot9F6}JG5;0_-+@~K_=maL#vRqL+-?o`9(Ry? zlY0q2g$Eb_17H9QfB`T72EYIq00UqE41fVJ@VObtVRiEuxd#qw)#?hEM3(}SMX#H~ zNF5b6;`~|6Q!j8jU7`FIv2((umoU0wMtqj+QFNKuH{Zm)sNw$3o#x)4 z>h&7V9A|an#>;BO%?Qhgn|0#-KOXci-v7VPy)OT|pu&U9fB`T72EYIq00UqE41fVJ z00zJS7ytum1Eq{voT{&wF^hxyd1+I?n8msKW{H#bnHYxE;;j+CB;NnCrdmzzY}-TD zHKqyt6dqsz41fVJ00zJS7$6#mvjz>bX${MciE}IQbz|ct{Bmy~5S5;`-r|b{yrYTV z+|h1tV6dOBTkQ=*eIJrtQ&R`wk+*cSE0pkMm3@`+;nPk!pd8tY53flcF3ns+ zF=xTl;b${XJ@E}byds(Uw6i!U2LVsTel~R}_6$>8V1CN1OH-+zJzPpX!{N%otoZQi zWWnLl)YJu6)mI@G98MP>j`NUi*t#Jx4{EPG&v!lE}-Y{BO?s9flU(;MU7<1LOtr{FD z;Pe^{^_F{TySlGwjiZWiWT=06xV?7ez?yuEcwk>=SKQIw5nodo6YE+@q5f4XmJT!y)&x37o2xtAP1Q?F z>+^93ezT*seAr#(X^b>ic2&6ge4bI%)lgfXk9+l-9lgsNSC%hzvtzMTH|6h%lghf>OFh zijH9Yzf?!cuCt;eSpP58k+S!g=m^&TQ!f9iwgl_{k(S9Nc!Kr+2+Ii*JVjysKlQT9 z>MMcCAguqV_C%;pL0JD!*@_ctlYcv`|2NG-=aYU||8Kf$rb+*1SpP4j9uZn3|9Gp| z|G!%EM5gi?v>4fQSlVCh!e8w0w78%|&++%PXH0%L3 z#4gbPT7SR3S+CdqNEgwSXisS$)vnOaVvaDkGYy)LaboBF5CVAF!>Ki=P4e2e(r65d z@pkxndLsC~ur>{eVpxbs@*i;eB~p}Sot@{7K*Tu{N1{o?7(L;bH#Qg!;Zcn0`@{)X zp>t40ks_m^yx<&2LrFw6lf0n0&NV8EG^R3Pc}A3t&ebYPN?FZ_;&=K~l$7zEGoiR1 zarUR7B!=P4gtA2AT&1E&5z$Zz(Mn7)ox9#{N8vG?)Q=td%z;WsG1R@(d6QM7^@M5;uOEkM20AX1Ti?>nf68bm6x z@9sg%$)F5PJjv06kD+dA5XsTb{iur?L~`^%2z63}NRGaJ59&~Yq!TTJBT|m;K8!p{ zP|E2+s*t1{?f4dISAwR^5ef8-4^W#DB%LA|K9@)Y*wmSv41R7@(7kK4T zj>_=cXF9GQx3!O4bwUu*kZ=SPq=(PEA|NG6s*+{2q!)xGX-IU@J^bpE$R&}+WKU(d z@NvmG=z?3cOmHf)lmJl*e<)aw8WmYe6kUc!iBJc2SyrG1GKj8v?=r1N^<)s;=k_kc zgJ`i5B-H>)kp6A-Wip5|G+hJwk`i=2O~5Xu7u`Sx(S^42%no$D5`<3=Tq7w#pB+Ni zkwJ8hc7A#_s#Ah+eWTCOpL3Ce45G}@yS1oR0V>1iE6x!m=$&d*Lk3aG{$rPT|9`3F z4h{DV7vT8ZH*$C6I&J^3J!M;Mo163VoZE96te;xJ+j51GG$ee>PVv3Z#MVv1Eh>_9lTAt5yha#KL!vAFiH&E3n2IEwB^gLK zyUITyOss!Xh|-e?-?UDQEEOX3B*NE-6SwGvb@U{{cSsYlQ^HUhQij%q6kW7L2-A~D d(M9G6A$k%ix}lGRpo%1YA(bIIQl7%!{1 + { + Connection?.SendAsync("UpdatePosition", SessionData.SessionName, SessionData.SessionId, SessionData.Players.First(p=>p.UserId==int.Parse(_authenticateResponse.Id))); + }); + Connection.On("NewWall", (tile) => { SessionData.Walls.Remove(tile.ToString(), out var _); SessionData.Walls.TryAdd(tile.ToString(), tile); }); - Connection.On("NewOverlay", (tile) => - { - SessionData.Overlays.Remove(tile.ToString(), out var _); - SessionData.Overlays.TryAdd(tile.ToString(), tile); - }); + Connection.On("NewOverlay", (tile) => + { + SessionData.Overlays.Remove(tile.ToString(), out var _); + SessionData.Overlays.TryAdd(tile.ToString(), tile); + }); Connection.On("NewPlayer", (player) => - { - var p = SessionData.Players.FirstOrDefault(m => m.UserId == player.UserId); - if (p is null) - { - SessionData.Players.Add(player); - } - else - { - p.Color = player.Color; - p.Position = player.Position; - } - }); + { + var p = SessionData.Players.FirstOrDefault(m => m.UserId == player.UserId); + if (p is null) + { + SessionData.Players.Add(player); + } + else + { + p.Color = player.Color; + p.Position = player.Position; + } + }); } private Task GetToken() { - return Task.FromResult(_authenticateResponse.Token); + return Task.FromResult(_authenticateResponse.Token); } public async Task Register(RegisterModel registerModel) @@ -186,7 +191,7 @@ namespace Sledgemapper if (getToken == null) throw new ArgumentNullException(nameof(getToken)); this.getToken = getToken; - //if (myConfigurationService.VerifySslCertificate == false) + //if (myConfigurationService.VerifySslCertificate == false) //{ ServerCertificateCustomValidationCallback = (message, certificate, chain, sslPolicyErrors) => true; diff --git a/Sledgemapper/IMapApi.cs b/Sledgemapper/IMapApi.cs index 1d90ce0..43d6365 100644 --- a/Sledgemapper/IMapApi.cs +++ b/Sledgemapper/IMapApi.cs @@ -21,7 +21,6 @@ namespace Sledgemapper [Post("/session/{sessionName}/snapshot")] Task SaveSnapshot([Body] Session session, string sessionName); - [Post("/session/{sessionName}/tile")] Task NewTile([Body] Tile tile, string sessionName); diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index 85aecc8..5bb8a9b 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -766,7 +766,10 @@ namespace Sledgemapper } using StreamReader file = File.OpenText(dialog.FilePath); JsonSerializer serializer = new JsonSerializer(); - _sessionData = (Session)serializer.Deserialize(file, typeof(Session)); + var loadData = (Session)serializer.Deserialize(file, typeof(Session)); + _sessionData.Map=loadData.Map; + _sessionData.Overlays=loadData.Overlays; + _sessionData.Walls=loadData.Walls; }; dialog.ShowModal(_desktop); diff --git a/Sledgemapper/UI/MainWidget.Generated.cs b/Sledgemapper/UI/MainWidget.Generated.cs index bb10ac2..b3bfba6 100644 --- a/Sledgemapper/UI/MainWidget.Generated.cs +++ b/Sledgemapper/UI/MainWidget.Generated.cs @@ -1,4 +1,4 @@ -/* Generated by MyraPad at 17/11/2020 15:10:52 */ +/* Generated by MyraPad at 17/11/2020 22:10:31 */ using Myra.Graphics2D; using Myra.Graphics2D.TextureAtlases; using Myra.Graphics2D.UI; @@ -174,6 +174,51 @@ namespace Sledgemapper.UI verticalSplitPane1.Widgets.Add(verticalStackPanel2); verticalSplitPane1.Widgets.Add(verticalStackPanel3); + var label1 = new Label(); + label1.Text = "Connection status:"; + + lblConnectionStatus = new Label(); + lblConnectionStatus.Text = "Disconnected"; + lblConnectionStatus.MinWidth = 100; + lblConnectionStatus.Id = "lblConnectionStatus"; + + var verticalSeparator1 = new VerticalSeparator(); + + var label2 = new Label(); + label2.Text = "Username:"; + + lblUsername = new Label(); + lblUsername.Text = "n/a"; + lblUsername.MinWidth = 100; + lblUsername.Id = "lblUsername"; + + var verticalSeparator2 = new VerticalSeparator(); + + var label3 = new Label(); + label3.Text = "Session name:"; + + lblSessionName = new Label(); + lblSessionName.Text = "n/a"; + lblSessionName.MinWidth = 100; + lblSessionName.Id = "lblSessionName"; + + var horizontalStackPanel1 = new HorizontalStackPanel(); + horizontalStackPanel1.Spacing = 10; + horizontalStackPanel1.Proportions.Add(new Proportion + { + Type = Myra.Graphics2D.UI.ProportionType.Auto, + }); + horizontalStackPanel1.Height = 25; + horizontalStackPanel1.Background = new SolidBrush("#333333FF"); + horizontalStackPanel1.Widgets.Add(label1); + horizontalStackPanel1.Widgets.Add(lblConnectionStatus); + horizontalStackPanel1.Widgets.Add(verticalSeparator1); + horizontalStackPanel1.Widgets.Add(label2); + horizontalStackPanel1.Widgets.Add(lblUsername); + horizontalStackPanel1.Widgets.Add(verticalSeparator2); + horizontalStackPanel1.Widgets.Add(label3); + horizontalStackPanel1.Widgets.Add(lblSessionName); + Proportions.Add(new Proportion { @@ -185,6 +230,7 @@ namespace Sledgemapper.UI }); Widgets.Add(_mainMenu); Widgets.Add(verticalSplitPane1); + Widgets.Add(horizontalStackPanel1); } @@ -202,5 +248,8 @@ namespace Sledgemapper.UI public Grid GridTiles; public Grid GridWalls; public Grid GridOverlays; + public Label lblConnectionStatus; + public Label lblUsername; + public Label lblSessionName; } } \ No newline at end of file diff --git a/Sledgemapper/UI/mainwidget.xml b/Sledgemapper/UI/mainwidget.xml index af587b5..2775366 100644 --- a/Sledgemapper/UI/mainwidget.xml +++ b/Sledgemapper/UI/mainwidget.xml @@ -59,5 +59,18 @@ + + + + + \ No newline at end of file