All the code

This commit is contained in:
2020-12-13 14:31:23 -06:00
parent 9c3d67a07e
commit 1bbab8fe8f
49 changed files with 1878 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Interfaces
{
public interface IRequest
{
ClientAction Action { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace Websockets.ServiceModels.Interfaces
{
public interface IResponse
{
string Action { get; }
string Error { get; set; }
}
}

View File

@@ -0,0 +1,25 @@
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class CreateGameRequest : IRequest
{
public ClientAction Action { get; set; }
public string GameName { get; set; }
public bool IsPrivate { get; set; }
}
public class CreateGameResponse : IResponse
{
public string Action { get; private set; }
public string Error { get; set; }
public Game Game { get; set; }
public string PlayerName { get; set; }
public CreateGameResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,16 @@
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class ErrorResponse : IResponse
{
public string Action { get; private set; }
public string Error { get; set; }
public ErrorResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,11 @@
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class JoinByCode : IRequest
{
public ClientAction Action { get; set; }
public string JoinCode { get; set; }
}
}

View File

@@ -0,0 +1,24 @@
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class JoinGameRequest : IRequest
{
public ClientAction Action { get; set; }
public string GameName { get; set; }
}
public class JoinGameResponse : IResponse
{
public string Action { get; private set; }
public string Error { get; set; }
public string GameName { get; set; }
public string PlayerName { get; set; }
public JoinGameResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,24 @@
using System.Collections.Generic;
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class ListGamesRequest : IRequest
{
public ClientAction Action { get; set; }
}
public class ListGamesResponse : IResponse
{
public string Action { get; private set; }
public string Error { get; set; }
public IEnumerable<Game> Games { get; set; }
public ListGamesResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,25 @@
using System.Collections.Generic;
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class LoadGameRequest : IRequest
{
public ClientAction Action { get; set; }
public string GameName { get; set; }
}
public class LoadGameResponse : IResponse
{
public string Action { get; private set; }
public Game Game { get; set; }
public IEnumerable<Move> Moves { get; set; }
public string Error { get; set; }
public LoadGameResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,26 @@
using Websockets.ServiceModels.Interfaces;
using Websockets.ServiceModels.Types;
namespace Websockets.ServiceModels.Messages
{
public class MoveRequest : IRequest
{
public ClientAction Action { get; set; }
public string GameName { get; set; }
public Move Move { get; set; }
}
public class MoveResponse : IResponse
{
public string Action { get; }
public string Error { get; set; }
public string GameName { get; set; }
public Move Move { get; set; }
public string PlayerName { get; set; }
public MoveResponse(ClientAction action)
{
Action = action.ToString();
}
}
}

View File

@@ -0,0 +1,13 @@
namespace Websockets.ServiceModels.Types
{
public enum ClientAction
{
ListGames,
CreateGame,
JoinGame,
JoinByCode,
LoadGame,
Move,
KeepAlive
}
}

View File

@@ -0,0 +1,8 @@
namespace Websockets.ServiceModels.Types
{
public class Coords
{
public int X { get; set; }
public int Y { get; set; }
}
}

View File

@@ -0,0 +1,8 @@
namespace Websockets.ServiceModels.Types
{
public class Game
{
public string GameName { get; set; }
public string[] Players { get; set; }
}
}

View File

@@ -0,0 +1,33 @@
namespace Websockets.ServiceModels.Types
{
public class Move
{
public string PieceFromCaptured { get; set; }
public Coords From { get; set; }
public Coords To { get; set; }
public bool IsPromotion { get; set; }
/// <summary>
/// Toggles perspective of this move. (ie from player 1 to player 2)
/// </summary>
public static Move ConvertPerspective(Move m)
{
var convertedMove = new Move
{
To = new Coords
{
X = 8 - m.To.X,
Y = 8 - m.To.Y
},
From = new Coords
{
X = 8 - m.From.X,
Y = 8 - m.From.Y
},
IsPromotion = m.IsPromotion,
PieceFromCaptured = m.PieceFromCaptured
};
return convertedMove;
}
}
}