From 1759f7cd8e11b4c2caf9a97f9eeeffd3f0f09868 Mon Sep 17 00:00:00 2001 From: Michele Scandura Date: Tue, 8 Dec 2020 16:34:02 +0000 Subject: [PATCH] bug fixes --- .../Commands/DeleteNoteCommand.cs | 14 ++++ .../Controllers/SessionController.cs | 8 +- .../Handlers/DeleteNoteCommandHandler.cs | 43 +++++++++++ .../Handlers/GetMapSnapshotCommandHandler.cs | 8 ++ .../Handlers/SendDeleteNoteMessage.cs | 22 ++++++ Sledgemapper.Api/Hubs/SledgemapperHub.cs | 3 +- .../Notifications/DeleteNoteNotification.cs | 14 ++++ Sledgemapper.Api/sledgemapper.db | Bin 40960 -> 40960 bytes .../Clients/ISledgemapperClient.cs | 2 + Sledgemapper/CommunicationManager.cs | 14 ++++ Sledgemapper/Sledgemapper.cs | 70 +++++++----------- Sledgemapper/Utils.cs | 1 - 12 files changed, 151 insertions(+), 48 deletions(-) create mode 100644 Sledgemapper.Api/Commands/DeleteNoteCommand.cs create mode 100644 Sledgemapper.Api/Handlers/DeleteNoteCommandHandler.cs create mode 100644 Sledgemapper.Api/Handlers/SendDeleteNoteMessage.cs create mode 100644 Sledgemapper.Api/Notifications/DeleteNoteNotification.cs diff --git a/Sledgemapper.Api/Commands/DeleteNoteCommand.cs b/Sledgemapper.Api/Commands/DeleteNoteCommand.cs new file mode 100644 index 0000000..f1a0e9e --- /dev/null +++ b/Sledgemapper.Api/Commands/DeleteNoteCommand.cs @@ -0,0 +1,14 @@ +using Sledgemapper.Shared.Entities; + +namespace Sledgemapper.Api.Commands +{ + public class DeleteNoteCommand : BaseCommand + { + public Note Note { get; private set; } + + public DeleteNoteCommand(string sessionName, Note note, int userId) : base(sessionName, userId) + { + Note = note; + } + } +} diff --git a/Sledgemapper.Api/Controllers/SessionController.cs b/Sledgemapper.Api/Controllers/SessionController.cs index 9e4df30..0ab3e32 100644 --- a/Sledgemapper.Api/Controllers/SessionController.cs +++ b/Sledgemapper.Api/Controllers/SessionController.cs @@ -13,7 +13,7 @@ namespace Sledgemapper.Api.Controllers { private readonly IMediator _mediator; private int UserId => int.Parse(HttpContext.User.Identity.Name); - + public SessionController(IMediator mediator) => _mediator = mediator; [HttpPost] @@ -77,5 +77,11 @@ namespace Sledgemapper.Api.Controllers { await _mediator.Send(new DeleteWallCommand(sessionName, wall, UserId)); } + + [HttpDelete("note")] + public async Task Delete(string sessionName, [FromBody] Note note) + { + await _mediator.Send(new DeleteNoteCommand(sessionName, note, UserId)); + } } } \ No newline at end of file diff --git a/Sledgemapper.Api/Handlers/DeleteNoteCommandHandler.cs b/Sledgemapper.Api/Handlers/DeleteNoteCommandHandler.cs new file mode 100644 index 0000000..dc8223b --- /dev/null +++ b/Sledgemapper.Api/Handlers/DeleteNoteCommandHandler.cs @@ -0,0 +1,43 @@ +using MediatR; +using Sledgemapper.Api.Data; +using Sledgemapper.Api.Commands; +using Sledgemapper.Api.Notifications; +using Sledgemapper.Shared.Entities; +using System.Linq; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace Sledgemapper.Api.Handlers +{ + + public class DeleteNoteCommandHandler : IRequestHandler + { + private readonly MyDbContext _dbcontext; + + private readonly IMediator _mediator; + + public DeleteNoteCommandHandler(IMediator mediator, MyDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; } + + + public async Task Handle(DeleteNoteCommand notification, CancellationToken cancellationToken) + { + var jsonString = JsonSerializer.Serialize(notification.Note); + var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName); + + _dbcontext.MapLogs.Add(new Sledgemapper.Api.Models.MapLog + { + Operation = "D", + SessionId = session.SessionId, + Type = "N", + Timestamp = notification.Timestamp, + Object = jsonString, + UserId = notification.UserId + }); + await _dbcontext.SaveChangesAsync(); + await _mediator.Publish(new DeleteNoteNotification(session, notification.Note, notification.UserId)); + + return true; + } + } +} diff --git a/Sledgemapper.Api/Handlers/GetMapSnapshotCommandHandler.cs b/Sledgemapper.Api/Handlers/GetMapSnapshotCommandHandler.cs index 74a58c2..8d7c6ff 100644 --- a/Sledgemapper.Api/Handlers/GetMapSnapshotCommandHandler.cs +++ b/Sledgemapper.Api/Handlers/GetMapSnapshotCommandHandler.cs @@ -53,6 +53,10 @@ namespace Sledgemapper.Api.Commands var overlay = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.NewOverlay(overlay, overlay.ID); break; + case "N": + var note = JsonSerializer.Deserialize(mapUpdate.Object); + mapSession.NewNote(note); + break; } @@ -73,6 +77,10 @@ namespace Sledgemapper.Api.Commands var overlay = JsonSerializer.Deserialize(mapUpdate.Object); mapSession.DeleteOverlay(overlay); break; + case "N": + var note = JsonSerializer.Deserialize(mapUpdate.Object); + mapSession.DeleteNote(note); + break; } } } diff --git a/Sledgemapper.Api/Handlers/SendDeleteNoteMessage.cs b/Sledgemapper.Api/Handlers/SendDeleteNoteMessage.cs new file mode 100644 index 0000000..1f6a112 --- /dev/null +++ b/Sledgemapper.Api/Handlers/SendDeleteNoteMessage.cs @@ -0,0 +1,22 @@ +using MediatR; +using Microsoft.AspNetCore.SignalR; +using Sledgemapper.Clients; +using System.Threading; +using System.Threading.Tasks; +using Sledgemapper.Api.Hubs; +using Sledgemapper.Api.Notifications; + +namespace Sledgemapper.Api.Handlers +{ + public class SendDeleteNoteMessage : INotificationHandler + { + private readonly IHubContext _hub; + + public SendDeleteNoteMessage(IHubContext hub) => _hub = hub; + + public async Task Handle(DeleteNoteNotification notification, CancellationToken cancellationToken) + { + await _hub.Clients.Groups(notification.Session.SessionName).DeleteNote(notification.Note); + } + } +} diff --git a/Sledgemapper.Api/Hubs/SledgemapperHub.cs b/Sledgemapper.Api/Hubs/SledgemapperHub.cs index 5ccd453..5cb91cd 100644 --- a/Sledgemapper.Api/Hubs/SledgemapperHub.cs +++ b/Sledgemapper.Api/Hubs/SledgemapperHub.cs @@ -142,7 +142,8 @@ namespace Sledgemapper.Api.Hubs foreach (var userSession in userSessions) { var session = _dbContext.Sessions.FirstOrDefault(m => m.SessionId == userSession.SessionId); - await Clients.Group(session.SessionName).PlayerUpdate(null); //send remove player + + await Clients.Group(session.SessionName).RemovePlayer(new Player{UserId=userId}); //send remove player _dbContext.SessionUsers.Remove(userSession); } } diff --git a/Sledgemapper.Api/Notifications/DeleteNoteNotification.cs b/Sledgemapper.Api/Notifications/DeleteNoteNotification.cs new file mode 100644 index 0000000..1052f6e --- /dev/null +++ b/Sledgemapper.Api/Notifications/DeleteNoteNotification.cs @@ -0,0 +1,14 @@ +using Sledgemapper.Shared.Entities; + +namespace Sledgemapper.Api.Notifications +{ + public class DeleteNoteNotification : BaseNotification + { + public Note Note { get; private set; } + + public DeleteNoteNotification(Models.Session session, Note note, int userId) : base(session, userId) + { + Note = note; + } + } +} diff --git a/Sledgemapper.Api/sledgemapper.db b/Sledgemapper.Api/sledgemapper.db index 0ef8b39acdcb9f1f4db4b16553256b0902e091bb..376d51c1b5a6e98dcd80d907bc82c5b22cc67400 100644 GIT binary patch literal 40960 zcmeI*&u`mg7zc3M`BkS)UT7tvsuZlZLTa=WHC?B+k&xD=QI#%DnqQ^e#3HwGM<7kI zBx~1|9ooW$e}D@T7Y-Z%P1=Fe4rr6OA#vb}HgV#B5JG_1IPluB8z)UhQidkAUn@=Q z*Y@+i&*!yOxv}3SwI^816i zLRPsMUd^N{N;z086qJo>u2|3(!`a3{XD|_(O@*XzbUw5y(RMpgDHfGzfP>PRgajePAZiOt5e-0qtA!4rb6*py{47*J!Wvi?Yg7D5Rr8cRvhbR;4LW6@+PG0Vy&x_qgrYpJxH2rtbh)}%|JHEA}T ziiM-B=A}?Hew?UVr9!K$UcGLY)4N}^IXuI|{Gneo=6bhSIcX zX~?i?pr%p_uwM$@C**}?_bekF3F`x@mlR&Xox^-g>|CZawkH@p8xqY?&ORp zDP>vxh0yM#*exk-R-N=@Qm@T>`_?(~IawhV_m}R=ZoBKQE92_x`-&A~f&c^{009U< z00Izz00bb=g+Q`blqkA-^+^o_7t+LB|>Z7YP;Ggi(H5$0!qv3fPDBQ^B zeKb+5)-Hqs<33vdTR>p^HoqP8zjr_BtOt!glc3{2d=VE#_B|zQsms>7p;|jxgF0-d z_-QQBqqo!5F8OX_ULB1)j+)sz^=?B3KTO#5kfcrKtaG~QqPf3c5fZken5~=Hbxikb zN$bCLd$&QK-2XUkY2~@irrPm2t>y0TwA<$%-g}S|^pFEKQ|@vl%U-phlUmR*cIbC@ zFwH$weoF997p$jocB)J@SbBLcS+=x;VA5DFh$@0SG_<0uX=z1Rwwb z2tWV=|BFDc%`z++_u=&O7BAm;TT?%))#|ib2Km~J3%yRkG9>Ev9&jA7SVnl$Z88Ju z_y0WkontRd5P$##AOHafKmY;|fB*y_009V`CIOMRavrgiE0v1s^*?*)pCf;f-^kCW zDM{o40SG_<0uX=z1Rwwb2tWV=5IDO6eWIGXojvKoaSo9ewD14jpK$Dj2?7v+00bZa z0SG_<0uX=z1R(Id1P-q9c24}jZ`)Ic@S}mf+dlfHoX=Nkv$1WZoR@d?rD%~2D#2FJ z>5O0f&_|j$;gkG6I*}QhFvY2lSkc{s_C7k<80h5V0I=-Cl@&Rk%hJH6oUbT8y3F!d z$}H_GZ~17jm@gXh`d$9ofQ|a78ucLvwShF$Q5ufE|NoJE^SnA4^+Esw5P$##AOHaf zKmY;|fB*y_(5b-7;!JQpnOMBGFtxI|7@xcqPVY=khl8^$z%V}}_;1DhmoJP>PG$WY z*~OKGDdl`NwWI!nKc4)_u@@!?KmY;|fB*y_009U<00Izz00d5#K#xU#{$IWR*Pj1> zLjEAXo~|U34Fn(n0SG_<0uX=z1Rwwb2teR03pgDtd)t8e)_-*U|Cl^J%O=Pj0uX=z c1Rwwb2tWV=5P$##AaEK5Z0bJ>v("DeleteNote", (tile) => + { + SessionData.Notes.Remove(tile.ToString(), out var _); + }); + Connection.On("DeleteOverlay", (tile) => { SessionData.Overlays.Remove(tile.ToString(), out var _); @@ -98,6 +103,15 @@ namespace Sledgemapper } }); + Connection.On("RemovePlayer", (player) => + { + var p = SessionData.Players.FirstOrDefault(m => m.UserId == player.UserId); + if (p != null) + { + SessionData.Players.Remove(p); + } + }); + Connection.On("NewWall", (tile) => { SessionData.Walls.Remove(tile.ToString(), out var _); diff --git a/Sledgemapper/Sledgemapper.cs b/Sledgemapper/Sledgemapper.cs index 77d729c..c07bcde 100644 --- a/Sledgemapper/Sledgemapper.cs +++ b/Sledgemapper/Sledgemapper.cs @@ -436,7 +436,6 @@ namespace Sledgemapper DrawNotes(); DrawGrid(visibleTilesX, visibleTilesY); - if (string.IsNullOrWhiteSpace(_sessionData.SessionName)) { var isoffscreen = IsOffscreen(_state.SelectedTile); @@ -469,8 +468,6 @@ namespace Sledgemapper var uas = new List { ua1, ua2, ua3, ua4 }; if (uas.Any(u => u > 0 && u < 1)) { - - var ua = uas.Where(u => u > 0 && u < 1).Min(); var i = uas.IndexOf(ua); @@ -647,58 +644,38 @@ namespace Sledgemapper { posX = tile.X * _state.TileSize + _state.TileSize / 2f; posY = tile.Y * _state.TileSize + _state.TileSize / 2f; - - // _spriteBatch.Draw(content, new Vector2(posX, posY),null, _settings.OverlayTintColor, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0); - // _spriteBatch.Draw(content, new Vector2(posX, posY),null, _settings.OverlayTintColor, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0); } _spriteBatch.Draw(content, new Vector2(posX + _state.TileSize / 25, posY + _state.TileSize / 25), null, Color.Black * .2f, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0); _spriteBatch.Draw(content, new Vector2(posX, posY), null, _settings.OverlayTintColor, MathHelper.ToRadians(90 * tile.Rotation), new Vector2(content.Width / 2, content.Height / 2), ((float)_state.TileSize - 10) / content.Width, SpriteEffects.None, 0); - } } private void DrawPlayers() { - try + foreach (var player in _sessionData.Players.Copy()) { - foreach (var player in _sessionData.Players.Copy()) - { - - var color = player.Color.ToColor(); - _spriteBatch.DrawRectangle(new Rectangle(player.Position.X * _state.TileSize - 4, player.Position.Y * _state.TileSize - 4, _state.TileSize + 7, _state.TileSize + 7), color, 2); - - foreach (var font in _fonts.Keys) - { - System.Console.WriteLine(font); - } - - var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state.TileSize).Value ?? _fonts.Last().Value; - - var fscale = _state.TileSize / ((float)ffont.LineSpacing * 2); - _spriteBatch.DrawString(ffont, - player.Initials, - new Vector2(player.Position.X * _state.TileSize + 2, player.Position.Y * _state.TileSize + _state.TileSize - 2 - ffont.LineSpacing * fscale), - color, - 0, - Vector2.Zero, - fscale, - SpriteEffects.None, - 0); - } - - - foreach (var player in _sessionData.Players.Copy()) - { - var isOffscreen = IsOffscreen(player.Position); - if (isOffscreen) - { - DrawPlayerPointer(player); - } - } + var color = player.Color.ToColor(); + _spriteBatch.DrawRectangle(new Rectangle(player.Position.X * _state.TileSize - 4, player.Position.Y * _state.TileSize - 4, _state.TileSize + 7, _state.TileSize + 7), color, 2); + var ffont = _fonts.FirstOrDefault(m => int.Parse(m.Key.Replace("font", "")) > _state.TileSize).Value ?? _fonts.Last().Value; + var fscale = _state.TileSize / ((float)ffont.LineSpacing * 2); + _spriteBatch.DrawString(ffont, + player.Initials, + new Vector2(player.Position.X * _state.TileSize + 2, player.Position.Y * _state.TileSize + _state.TileSize - 2 - ffont.LineSpacing * fscale), + color, + 0, + Vector2.Zero, + fscale, + SpriteEffects.None, + 0); } - catch (Exception ex) + + foreach (var player in _sessionData.Players.Copy()) { - System.Console.WriteLine(ex.Message); + var isOffscreen = IsOffscreen(player.Position); + if (isOffscreen) + { + DrawPlayerPointer(player); + } } } @@ -1209,6 +1186,7 @@ namespace Sledgemapper window.Content = content; window.ShowModal(_desktop); + content.TxtSession.SetKeyboardFocus(); } private void OnMenuConnectLoginSelected(object sender, EventArgs e) @@ -1248,9 +1226,10 @@ namespace Sledgemapper content.BtnRegister.Click += OnButtonRegisterClick; content.BtnLogin.Click += OnButtonLoginClick; - + window.Content = content; window.ShowModal(_desktop); + content.TxtEmail.SetKeyboardFocus(); } private async void OnMenuConnectSyncSelected(object sender, EventArgs e) @@ -1294,6 +1273,7 @@ namespace Sledgemapper window.Content = content; window.ShowModal(_desktop); + content.TxtSession.SetKeyboardFocus(); } private void OnMenuFileSaveSelected(object sender, EventArgs e) diff --git a/Sledgemapper/Utils.cs b/Sledgemapper/Utils.cs index 089dc65..4fab48d 100644 --- a/Sledgemapper/Utils.cs +++ b/Sledgemapper/Utils.cs @@ -23,7 +23,6 @@ namespace Sledgemapper var color = new Color(int.Parse(hexs[0], System.Globalization.NumberStyles.HexNumber), int.Parse(hexs[1], System.Globalization.NumberStyles.HexNumber), int.Parse(hexs[2], System.Globalization.NumberStyles.HexNumber)); - System.Console.WriteLine(color); return color; } }