diff --git a/src/Aiursoft.ChessServer/Models/AcceptedChallenge.cs b/src/Aiursoft.ChessServer/Models/AcceptedChallenge.cs new file mode 100644 index 0000000..b7ff47b --- /dev/null +++ b/src/Aiursoft.ChessServer/Models/AcceptedChallenge.cs @@ -0,0 +1,59 @@ +using Aiursoft.AiurObserver; + +namespace Aiursoft.ChessServer.Models; + +public class AcceptedChallenge : Challenge +{ + private readonly bool _creatorIsWhite; + public AcceptedChallenge( + Player creator, + Player accepter, + string message, + RoleRule roleRule, + TimeSpan timeLimit, + ChallengePermission permission, + AsyncObservable challengeChangedChannel) + : base(creator, message, roleRule, timeLimit, permission) + { + Accepter = accepter; + Game = new Game(); + ChallengeChangedChannel = challengeChangedChannel; + _creatorIsWhite = RoleRule switch + { + RoleRule.Random => new Random().Next(0, 2) == 0, + RoleRule.CreatorWhite => true, + RoleRule.AccepterWhite => false, + _ => _creatorIsWhite + }; + } + + public Player Accepter { get; set; } + public Game Game { get; set; } + + public AsyncObservable ChatChannel { get; init; } = new(); + + public Player GetWhitePlayer() => _creatorIsWhite ? Creator : Accepter; + public Player GetBlackPlayer() => _creatorIsWhite ? Accepter : Creator; + + public DateTime GameStartTime { get; set; } = DateTime.UtcNow; + + public Player GetTurnPlayer() + { + return Game.Board.Turn.AsChar.ToString().Equals("w", StringComparison.CurrentCultureIgnoreCase) + ? GetWhitePlayer() : GetBlackPlayer(); + } + + public string GetPlayerColor(Guid playerId) + { + // returns : w,b, or m (monitor) + if (GetWhitePlayer().Id == playerId) + { + return "w"; + } + if (GetBlackPlayer().Id == playerId) + { + return "b"; + } + return "m"; + } +} \ No newline at end of file diff --git a/src/Aiursoft.ChessServer/Models/Challenge.cs b/src/Aiursoft.ChessServer/Models/Challenge.cs index c069607..6da9bb1 100644 --- a/src/Aiursoft.ChessServer/Models/Challenge.cs +++ b/src/Aiursoft.ChessServer/Models/Challenge.cs @@ -26,73 +26,4 @@ public class Challenge( // Creator transferred: creator-transferred-{new-owner-player-nick-name} // Settings changed: settings-changed public AsyncObservable ChallengeChangedChannel { get; protected init; } = new(); -} - -public class AcceptedChallenge : Challenge -{ - private readonly bool _creatorIsWhite; - public AcceptedChallenge( - Player creator, - Player accepter, - string message, - RoleRule roleRule, - TimeSpan timeLimit, - ChallengePermission permission, - AsyncObservable challengeChangedChannel) - : base(creator, message, roleRule, timeLimit, permission) - { - Accepter = accepter; - Game = new Game(); - ChallengeChangedChannel = challengeChangedChannel; - _creatorIsWhite = RoleRule switch - { - RoleRule.Random => new Random().Next(0, 2) == 0, - RoleRule.CreatorWhite => true, - RoleRule.AccepterWhite => false, - _ => _creatorIsWhite - }; - } - - public Player Accepter { get; set; } - public Game Game { get; set; } - - public AsyncObservable ChatChannel { get; init; } = new(); - - public Player GetWhitePlayer() => _creatorIsWhite ? Creator : Accepter; - public Player GetBlackPlayer() => _creatorIsWhite ? Accepter : Creator; - - public DateTime GameStartTime { get; set; } = DateTime.UtcNow; - - public Player GetTurnPlayer() - { - return Game.Board.Turn.AsChar.ToString().Equals("w", StringComparison.CurrentCultureIgnoreCase) - ? GetWhitePlayer() : GetBlackPlayer(); - } - - public string GetPlayerColor(Guid playerId) - { - // returns : w,b, or m (monitor) - if (GetWhitePlayer().Id == playerId) - { - return "w"; - } - if (GetBlackPlayer().Id == playerId) - { - return "b"; - } - return "m"; - } -} - -public class ChatMessage(string content, Player sender) -{ - public string Content { get; set; } = content; - public Player Sender { get; set; } = sender; -} - -public class ChatMessageResponse(ChatMessage message, Guid currentUserId) -{ - public string Content { get; set; } = message.Content; - public string SenderNickName { get; set; } = message.Sender.NickName; - public bool IsMe { get; set; } = message.Sender.Id == currentUserId; } \ No newline at end of file diff --git a/src/Aiursoft.ChessServer/Models/ChatMessage.cs b/src/Aiursoft.ChessServer/Models/ChatMessage.cs new file mode 100644 index 0000000..b493a73 --- /dev/null +++ b/src/Aiursoft.ChessServer/Models/ChatMessage.cs @@ -0,0 +1,7 @@ +namespace Aiursoft.ChessServer.Models; + +public class ChatMessage(string content, Player sender) +{ + public string Content { get; set; } = content; + public Player Sender { get; set; } = sender; +} \ No newline at end of file diff --git a/src/Aiursoft.ChessServer/Models/ChatMessageResponse.cs b/src/Aiursoft.ChessServer/Models/ChatMessageResponse.cs new file mode 100644 index 0000000..3d3b10c --- /dev/null +++ b/src/Aiursoft.ChessServer/Models/ChatMessageResponse.cs @@ -0,0 +1,8 @@ +namespace Aiursoft.ChessServer.Models; + +public class ChatMessageResponse(ChatMessage message, Guid currentUserId) +{ + public string Content { get; set; } = message.Content; + public string SenderNickName { get; set; } = message.Sender.NickName; + public bool IsMe { get; set; } = message.Sender.Id == currentUserId; +} \ No newline at end of file