using AspShogiSockets.Extensions; using Microsoft.Extensions.Logging; using Newtonsoft.Json; using System.Linq; using System.Net.WebSockets; using System.Threading.Tasks; using Websockets.Repositories; using Websockets.ServiceModels.Messages; using Websockets.ServiceModels.Types; namespace Websockets.Managers.ClientActionHandlers { public class ListGamesHandler : IActionHandler { private readonly ILogger logger; private readonly IGameboardRepository repository; public ListGamesHandler( ILogger logger, IGameboardRepository repository) { this.logger = logger; this.repository = repository; } public async Task Handle(WebSocket socket, string json, string userName) { logger.LogInformation("Socket Request \n{0}\n", new[] { json }); var request = JsonConvert.DeserializeObject(json); var getGamesResponse = string.IsNullOrWhiteSpace(userName) ? await repository.GetGames() : await repository.GetGames(userName); var games = getGamesResponse.Games .OrderBy(g => g.Players.Contains(userName)) .Select(g => new Game { GameName = g.GameName, Players = g.Players }); var response = new ListGamesResponse(ClientAction.ListGames) { Games = games ?? new Game[0] }; var serialized = JsonConvert.SerializeObject(response); logger.LogInformation("Socket Response \n{0}\n", new[] { serialized }); await socket.SendTextAsync(serialized); } } }