using Gameboard.ShogiUI.Sockets.ServiceModels.Types; using Newtonsoft.Json; using System.Collections.Concurrent; using System.Net.WebSockets; namespace Gameboard.ShogiUI.Sockets.Models { public class Session { // TODO: Separate subscriptions to the Session from the Session. [JsonIgnore] public ConcurrentDictionary Subscriptions { get; } public string Name { get; } public User Player1 { get; } public User? Player2 { get; private set; } public bool IsPrivate { get; } // TODO: Don't retain the entire rules system within the Session model. It just needs the board state after rules are applied. public Shogi Shogi { get; } public Session(string name, bool isPrivate, Shogi shogi, User player1, User? player2 = null) { Subscriptions = new ConcurrentDictionary(); Name = name; Player1 = player1; Player2 = player2; IsPrivate = isPrivate; Shogi = shogi; } public void SetPlayer2(User user) { Player2 = user; } public Game ToServiceModel() => new(Name, Player1.DisplayName, Player2?.DisplayName); } }