This commit is contained in:
parent
e18cbb157c
commit
155cb4ea9a
13 changed files with 99 additions and 58 deletions
21
Sledgemapper.Api/Commands/GetCampaignMapsCommand.cs
Normal file
21
Sledgemapper.Api/Commands/GetCampaignMapsCommand.cs
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using MediatR;
|
||||||
|
using Sledgemapper.Shared.Entities;
|
||||||
|
|
||||||
|
namespace Sledgemapper.Api.Commands
|
||||||
|
{
|
||||||
|
public class GetCampaignMapsCommand : IRequest<List<Session>>
|
||||||
|
{
|
||||||
|
public double Timestamp { get; private set; }
|
||||||
|
public string CampaignName { get; private set; }
|
||||||
|
public string UserId { get; private set; }
|
||||||
|
|
||||||
|
public GetCampaignMapsCommand(string campaingName, string userId)
|
||||||
|
{
|
||||||
|
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||||
|
CampaignName = campaingName;
|
||||||
|
UserId = userId;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -10,6 +10,7 @@ namespace Sledgemapper.Api.Commands
|
||||||
public double Timestamp { get; private set; }
|
public double Timestamp { get; private set; }
|
||||||
public string CampaignName { get; private set; }
|
public string CampaignName { get; private set; }
|
||||||
public string UserId { get; private set; }
|
public string UserId { get; private set; }
|
||||||
|
|
||||||
public GetCampaignPlayersCommand(string campaingName, string userId)
|
public GetCampaignPlayersCommand(string campaingName, string userId)
|
||||||
{
|
{
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
||||||
|
@ -17,18 +18,4 @@ namespace Sledgemapper.Api.Commands
|
||||||
UserId = userId;
|
UserId = userId;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class GetCampaignMapsCommand : IRequest<List<Session>>
|
|
||||||
{
|
|
||||||
public double Timestamp { get; private set; }
|
|
||||||
public string CampaignName { get; private set; }
|
|
||||||
public string UserId { get; private set; }
|
|
||||||
public GetCampaignMapsCommand(string campaingName, string userId)
|
|
||||||
{
|
|
||||||
Timestamp = DateTimeOffset.Now.ToUnixTimeMilliseconds();
|
|
||||||
CampaignName = campaingName;
|
|
||||||
UserId = userId;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -6,7 +6,7 @@ namespace Sledgemapper.Api.Commands
|
||||||
{
|
{
|
||||||
public Overlay Overlay { get; private set; }
|
public Overlay Overlay { get; private set; }
|
||||||
|
|
||||||
public NewOverlayCommand(string sessionName, Overlay overlay, string userId) : base(sessionName, userId)
|
public NewOverlayCommand(string campaignId, string mapId, Overlay overlay, string userId) : base(campaignId, mapId, userId)
|
||||||
{
|
{
|
||||||
Overlay = overlay;
|
Overlay = overlay;
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,7 +40,7 @@ namespace Sledgemapper.Api.Controllers
|
||||||
[HttpPost("overlay")]
|
[HttpPost("overlay")]
|
||||||
public async Task Post(string campaign, string mapName, [FromBody] Overlay overlay)
|
public async Task Post(string campaign, string mapName, [FromBody] Overlay overlay)
|
||||||
{
|
{
|
||||||
await _mediator.Send(new NewOverlayCommand(mapName, overlay, UserId));
|
await _mediator.Send(new NewOverlayCommand(campaign, mapName, overlay, UserId));
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("wall")]
|
[HttpPost("wall")]
|
||||||
|
|
43
Sledgemapper.Api/Handlers/GetCampaignMapsCommandHandler.cs
Normal file
43
Sledgemapper.Api/Handlers/GetCampaignMapsCommandHandler.cs
Normal file
|
@ -0,0 +1,43 @@
|
||||||
|
using MediatR;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
using Sledgemapper.Api.Commands;
|
||||||
|
using Sledgemapper.Api.Infrastructure.Data;
|
||||||
|
using Sledgemapper.Shared.Entities;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
using System.Threading;
|
||||||
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
namespace Sledgemapper.Api.Handlers
|
||||||
|
{
|
||||||
|
public class GetCampaignMapsCommandHandler : IRequestHandler<GetCampaignMapsCommand, List<Session>>
|
||||||
|
{
|
||||||
|
private readonly IMediator _mediator;
|
||||||
|
private readonly SledgemapperDbContext _dbcontext;
|
||||||
|
|
||||||
|
public GetCampaignMapsCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
|
||||||
|
{
|
||||||
|
_mediator = mediator;
|
||||||
|
_dbcontext = dbcontext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public async Task<List<Session>> Handle(GetCampaignMapsCommand command, CancellationToken cancellationToken)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
var user = await _dbcontext.Users.FindAsync(command.UserId);
|
||||||
|
_dbcontext.Attach(user);
|
||||||
|
|
||||||
|
var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignName == command.CampaignName && campaign.OwnerId == command.UserId).Include(campaign => campaign.Maps).FirstAsync();
|
||||||
|
|
||||||
|
var maps = campaign.Maps.Select(session => new Session { SessionName = session.SessionName, SessionId = session.SessionId }).ToList();
|
||||||
|
return maps;
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -40,36 +40,4 @@ namespace Sledgemapper.Api.Handlers
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public class GetCampaignMapsCommandHandler : IRequestHandler<GetCampaignMapsCommand, List<Session>>
|
|
||||||
{
|
|
||||||
private readonly IMediator _mediator;
|
|
||||||
private readonly SledgemapperDbContext _dbcontext;
|
|
||||||
|
|
||||||
public GetCampaignMapsCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext)
|
|
||||||
{
|
|
||||||
_mediator = mediator;
|
|
||||||
_dbcontext = dbcontext;
|
|
||||||
}
|
|
||||||
|
|
||||||
public async Task<List<Session>> Handle(GetCampaignMapsCommand command, CancellationToken cancellationToken)
|
|
||||||
{
|
|
||||||
try
|
|
||||||
{
|
|
||||||
var user = await _dbcontext.Users.FindAsync(command.UserId);
|
|
||||||
_dbcontext.Attach(user);
|
|
||||||
|
|
||||||
var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignName == command.CampaignName && campaign.OwnerId == command.UserId).Include(campaign => campaign.Maps).FirstAsync();
|
|
||||||
|
|
||||||
var maps = campaign.Maps.Select(session => new Session { SessionName = session.SessionName, SessionId = session.SessionId }).ToList();
|
|
||||||
return maps;
|
|
||||||
}
|
|
||||||
catch (Exception ex)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
return null;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
|
@ -7,6 +7,8 @@ using System.Linq;
|
||||||
using System.Text.Json;
|
using System.Text.Json;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
using System;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace Sledgemapper.Api.Handlers
|
namespace Sledgemapper.Api.Handlers
|
||||||
{
|
{
|
||||||
|
@ -18,21 +20,32 @@ namespace Sledgemapper.Api.Handlers
|
||||||
|
|
||||||
public NewOverlayCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
|
public NewOverlayCommandHandler(IMediator mediator, SledgemapperDbContext dbcontext) { _dbcontext = dbcontext; _mediator = mediator; }
|
||||||
|
|
||||||
public async Task<bool> Handle(NewOverlayCommand notification, CancellationToken cancellationToken)
|
public async Task<bool> Handle(NewOverlayCommand command, CancellationToken cancellationToken)
|
||||||
{
|
{
|
||||||
var jsonString = JsonSerializer.Serialize(notification.Overlay);
|
var user = await _dbcontext.Users.FindAsync(command.UserId);
|
||||||
var session = _dbcontext.Sessions.First(m => m.SessionName == notification.SessionName);
|
_dbcontext.Attach(user);
|
||||||
|
|
||||||
|
var campaign = await _dbcontext.Campaigns.Where(campaign => campaign.CampaignId == new Guid(command.Campaign) && campaign.OwnerId == command.UserId).Include(campaign => campaign.Maps).FirstAsync();
|
||||||
|
|
||||||
|
var maps = campaign.Maps.Any(s => s.SessionId == int.Parse(command.SessionName));
|
||||||
|
if (!maps)
|
||||||
|
{
|
||||||
|
throw new Exception("Unauthorized");
|
||||||
|
}
|
||||||
|
|
||||||
|
var jsonString = JsonSerializer.Serialize(command.Overlay);
|
||||||
|
var session = _dbcontext.Sessions.First(m => m.SessionId == int.Parse(command.SessionName));
|
||||||
_dbcontext.MapLogs.Add(new Models.MapLog
|
_dbcontext.MapLogs.Add(new Models.MapLog
|
||||||
{
|
{
|
||||||
Operation = "N",
|
Operation = "N",
|
||||||
SessionId = session.SessionId,
|
SessionId = session.SessionId,
|
||||||
Type = "O",
|
Type = "O",
|
||||||
Timestamp = notification.Timestamp,
|
Timestamp = command.Timestamp,
|
||||||
Object = jsonString,
|
Object = jsonString,
|
||||||
UserId = notification.UserId,
|
UserId = command.UserId,
|
||||||
});
|
});
|
||||||
await _dbcontext.SaveChangesAsync();
|
await _dbcontext.SaveChangesAsync();
|
||||||
await _mediator.Publish(new NewOverlayNotification(session, notification.Overlay, notification.UserId));
|
await _mediator.Publish(new NewOverlayNotification(session, command.Overlay, command.UserId));
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -199,7 +199,7 @@ namespace Sledgemapper
|
||||||
Queue.Enqueue(async () => await Execute(async () => await Api.NewTile(tile, SessionData.SessionName).ConfigureAwait(false)));
|
Queue.Enqueue(async () => await Execute(async () => await Api.NewTile(tile, SessionData.SessionName).ConfigureAwait(false)));
|
||||||
break;
|
break;
|
||||||
case Overlay overlay:
|
case Overlay overlay:
|
||||||
Queue.Enqueue(async () => await Execute(async () => await Api.NewOverlay(overlay, SessionData.SessionName).ConfigureAwait(false)));
|
Queue.Enqueue(async () => await Execute(async () => await Api.NewOverlay(overlay,State.Instance.CampaignId.ToString(), State.Instance.MapId.ToString()).ConfigureAwait(false)));
|
||||||
break;
|
break;
|
||||||
case Wall wall:
|
case Wall wall:
|
||||||
Queue.Enqueue(async () => await Execute(async () => await Api.NewWall(wall, SessionData.SessionName).ConfigureAwait(false)));
|
Queue.Enqueue(async () => await Execute(async () => await Api.NewWall(wall, SessionData.SessionName).ConfigureAwait(false)));
|
||||||
|
|
|
@ -20,8 +20,8 @@ namespace Sledgemapper
|
||||||
[Post("/session/{sessionName}/tile")]
|
[Post("/session/{sessionName}/tile")]
|
||||||
Task NewTile([Body] Tile tile, string sessionName);
|
Task NewTile([Body] Tile tile, string sessionName);
|
||||||
|
|
||||||
[Post("/session/{sessionName}/overlay")]
|
[Post("/map/{campaignId}/{mapId}/overlay")]
|
||||||
Task NewOverlay([Body] Overlay overlay, string sessionName);
|
Task NewOverlay([Body] Overlay overlay, string campaignId, string mapId);
|
||||||
|
|
||||||
[Post("/session/{sessionName}/note")]
|
[Post("/session/{sessionName}/note")]
|
||||||
Task NewNote([Body] Note note, string sessionName);
|
Task NewNote([Body] Note note, string sessionName);
|
||||||
|
|
|
@ -60,6 +60,8 @@ namespace Sledgemapper
|
||||||
public bool ShowCellNumbers { get; set; }
|
public bool ShowCellNumbers { get; set; }
|
||||||
public Vector3 ViewportCenter { get; set; }
|
public Vector3 ViewportCenter { get; set; }
|
||||||
public string MapName { get; internal set; }
|
public string MapName { get; internal set; }
|
||||||
|
public Guid CampaignId { get; internal set; }
|
||||||
|
public int MapId { get; internal set; }
|
||||||
|
|
||||||
//public State()
|
//public State()
|
||||||
//{
|
//{
|
||||||
|
|
|
@ -57,6 +57,7 @@ namespace Sledgemapper.UI
|
||||||
var item = sender as ListItem;
|
var item = sender as ListItem;
|
||||||
|
|
||||||
State.Instance.CampaignName = item.ItemName.Text;
|
State.Instance.CampaignName = item.ItemName.Text;
|
||||||
|
State.Instance.CampaignId = (Guid)item.Tag;
|
||||||
var list = item.Parent as Grid;
|
var list = item.Parent as Grid;
|
||||||
for (var i = 0; i < list.ChildrenCount; i++)
|
for (var i = 0; i < list.ChildrenCount; i++)
|
||||||
{
|
{
|
||||||
|
@ -74,7 +75,7 @@ namespace Sledgemapper.UI
|
||||||
{
|
{
|
||||||
var item = new ListItem();
|
var item = new ListItem();
|
||||||
item.ItemName.Text = campaign.Name;
|
item.ItemName.Text = campaign.Name;
|
||||||
|
item.Tag = campaign.Id;
|
||||||
item.TouchUp += OnCampaignSelected;
|
item.TouchUp += OnCampaignSelected;
|
||||||
StackCampaignsList.AddChild(item);
|
StackCampaignsList.AddChild(item);
|
||||||
}
|
}
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace Sledgemapper.UI
|
||||||
private void OnCampaignSelectedMessage(CampaignSelectedMessage obj)
|
private void OnCampaignSelectedMessage(CampaignSelectedMessage obj)
|
||||||
{
|
{
|
||||||
lblCampaign.Text = State.Instance.CampaignName;
|
lblCampaign.Text = State.Instance.CampaignName;
|
||||||
|
|
||||||
MenuMapNew.Enabled = true;
|
MenuMapNew.Enabled = true;
|
||||||
MenuMapOpen.Enabled = true;
|
MenuMapOpen.Enabled = true;
|
||||||
MenuCampaignPlayers.Enabled = true;
|
MenuCampaignPlayers.Enabled = true;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
using Myra.Graphics2D.Brushes;
|
using Myra.Graphics2D.Brushes;
|
||||||
using Myra.Graphics2D.UI;
|
using Myra.Graphics2D.UI;
|
||||||
using Sledgemapper.Messages;
|
using Sledgemapper.Messages;
|
||||||
|
using Sledgemapper.Shared.Entities;
|
||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using TinyMessenger;
|
using TinyMessenger;
|
||||||
|
@ -14,6 +15,7 @@ namespace Sledgemapper.UI
|
||||||
private TinyMessengerHub Messenger { get; }
|
private TinyMessengerHub Messenger { get; }
|
||||||
|
|
||||||
private string _selectedMap;
|
private string _selectedMap;
|
||||||
|
private int _selectedMapId;
|
||||||
public MapList(CommunicationManager communicationManager, TinyMessengerHub messenger)
|
public MapList(CommunicationManager communicationManager, TinyMessengerHub messenger)
|
||||||
{
|
{
|
||||||
CommunicationManager = communicationManager;
|
CommunicationManager = communicationManager;
|
||||||
|
@ -32,6 +34,7 @@ namespace Sledgemapper.UI
|
||||||
private void BtnLoadCampaign_Click(object sender, EventArgs e)
|
private void BtnLoadCampaign_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
State.Instance.MapName = _selectedMap;
|
State.Instance.MapName = _selectedMap;
|
||||||
|
State.Instance.MapId = _selectedMapId;
|
||||||
var map = CommunicationManager.Api.GetMap(State.Instance.CampaignName, State.Instance.MapName);
|
var map = CommunicationManager.Api.GetMap(State.Instance.CampaignName, State.Instance.MapName);
|
||||||
Messenger.Publish(new MapOpenedMessage(this) { MapName = State.Instance.MapName });
|
Messenger.Publish(new MapOpenedMessage(this) { MapName = State.Instance.MapName });
|
||||||
this.GetContainingWindow().Close();
|
this.GetContainingWindow().Close();
|
||||||
|
@ -44,6 +47,7 @@ namespace Sledgemapper.UI
|
||||||
{
|
{
|
||||||
var item = new ListItem();
|
var item = new ListItem();
|
||||||
item.ItemName.Text = campaign.SessionName;
|
item.ItemName.Text = campaign.SessionName;
|
||||||
|
item.Tag = campaign.SessionId;
|
||||||
item.TouchUp += OnMapSelected;
|
item.TouchUp += OnMapSelected;
|
||||||
StackCampaignsList.AddChild(item);
|
StackCampaignsList.AddChild(item);
|
||||||
}
|
}
|
||||||
|
@ -62,6 +66,7 @@ namespace Sledgemapper.UI
|
||||||
}
|
}
|
||||||
item.Background = new SolidBrush(Settings.Instance.OverlayTintColor);
|
item.Background = new SolidBrush(Settings.Instance.OverlayTintColor);
|
||||||
_selectedMap = item.ItemName.Text;
|
_selectedMap = item.ItemName.Text;
|
||||||
|
_selectedMapId = (int)item.Tag;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void OnMenuMapNew(object sender, EventArgs e)
|
private void OnMenuMapNew(object sender, EventArgs e)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue