Merge branch 'master' into feature/playerList

This commit is contained in:
SemvdH
2020-10-23 12:53:35 +02:00
committed by GitHub
13 changed files with 522 additions and 214 deletions

View File

@@ -7,6 +7,8 @@ using System.Text;
namespace SharedClientServer
{
public delegate void Callback();
class ClientServerUtil
{
// creates a message array to send to the server or to clients

View File

@@ -1,5 +1,4 @@
using Client;
using Microsoft.VisualBasic.CompilerServices;
using Client;
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
using System;
@@ -8,6 +7,7 @@ using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Media;
namespace SharedClientServer
{
@@ -17,8 +17,13 @@ namespace SharedClientServer
public const byte MESSAGE = 0x02;
public const byte LOBBY = 0x03;
public const byte CANVAS = 0x04;
public const byte RANDOMWORD = 0x05;
public const byte GAME = 0x05;
public const byte MESSAGE_RECEIVED = 0x06;
public const byte RANDOMWORD = 0x07;
public const int CANVAS_WRITING = 0;
public const int CANVAS_RESET = 1;
public enum LobbyIdentifier
{
@@ -29,9 +34,10 @@ namespace SharedClientServer
LIST,
REQUEST
}
public static (string,string) GetUsernameAndMessage(byte[] json)
{
string msg = Encoding.ASCII.GetString(json);
string msg = Encoding.UTF8.GetString(json);
dynamic payload = JsonConvert.DeserializeObject(msg);
return (payload.username, payload.message);
@@ -39,7 +45,7 @@ namespace SharedClientServer
public static string GetUsernameLogin(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
return payload.username;
}
@@ -87,6 +93,7 @@ namespace SharedClientServer
});
}
public static byte[] ConstructLobbyJoinMessage(int lobbyID)
{
return GetMessageToSend(LOBBY, new
@@ -106,13 +113,13 @@ namespace SharedClientServer
}
public static LobbyIdentifier GetLobbyIdentifier(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
return payload.identifier;
}
public static Lobby[] GetLobbiesFromMessage(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
JArray lobbiesArray = payload.lobbies;
Debug.WriteLine("[JSONCONVERT] got lobbies from message" + lobbiesArray.ToString());
Lobby[] lobbiesTemp = lobbiesArray.ToObject<Lobby[]>();
@@ -126,13 +133,13 @@ namespace SharedClientServer
public static int GetLobbyID(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
return payload.id;
}
public static Lobby GetLobby(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
JObject dynamicAsObject = payload.lobby;
return dynamicAsObject.ToObject<Lobby>();
}
@@ -145,11 +152,79 @@ namespace SharedClientServer
public static bool GetLobbyJoinIsHost(byte[] json)
{
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
dynamic payload = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
return payload.host;
}
#endregion
public static byte[] ConstructCanvasDataSend(int typeToSend, double[][] buffer, Color colorToSend)
{
return GetMessageToSend(CANVAS, new
{
canvasType = typeToSend,
coords = buffer,
color = colorToSend
}); ;
}
public static byte[] ConstructDrawingCanvasData(double[][] buffer, Color colorToSend)
{
return GetMessageToSend(CANVAS, new
{
canvasType = CANVAS_WRITING,
coords = buffer,
color = colorToSend
});
}
public static int GetCanvasMessageType(byte[] json)
{
dynamic d = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(json));
return d.canvasType;
}
public static double[][] getCoordinates(byte[] payload)
{
Debug.WriteLine("got coords " + Encoding.UTF8.GetString(payload));
dynamic json = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(payload));
JArray coordinatesArray = json.coords;
double[][] coordinates = coordinatesArray.ToObject<double[][]>();
return coordinates;
}
public static Color getCanvasDrawingColor(byte[] payload)
{
dynamic json = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(payload));
Color color = json.color;
return color;
}
public static byte[] ConstructGameStartData(int lobbyID)
{
string startGame = "startGame";
return GetMessageToSend(GAME, new
{
command = startGame,
lobbyToStart = lobbyID
}); ;
}
public static string GetGameCommand(byte[] payload)
{
dynamic json = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(payload));
return json.command;
}
public static int GetStartGameLobbyID(byte[] payload)
{
dynamic json = JsonConvert.DeserializeObject(Encoding.UTF8.GetString(payload));
return json.lobbyToStart;
}
/// <summary>
/// constructs a message that can be sent to the clients or server
/// </summary>
@@ -159,7 +234,8 @@ namespace SharedClientServer
public static byte[] GetMessageToSend(byte identifier, dynamic payload)
{
// convert the dynamic to bytes
byte[] payloadBytes = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(payload));
string json = JsonConvert.SerializeObject(payload);
byte[] payloadBytes = Encoding.UTF8.GetBytes(json);
// make the array that holds the message and copy the payload into it with the first spot containing the identifier
byte[] res = new byte[payloadBytes.Length + 5];
// put the payload in the res array
@@ -170,8 +246,8 @@ namespace SharedClientServer
Array.Copy(BitConverter.GetBytes(payloadBytes.Length+5),0,res,0,4);
return res;
}
/*
/*
* This method sends a random word from the json file, this happens when the client joins a lobby.
*/
public static string SendRandomWord(string filename)
@@ -204,5 +280,7 @@ namespace SharedClientServer
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
return payload.word;
}
}
}

View File

@@ -14,6 +14,7 @@ namespace Client
private int _id;
private int _playersIn;
private int _maxPlayers;
private bool _lobbyJoinable;
//private List<string> _usernames;
private List<User> _users;
@@ -34,6 +35,7 @@ namespace Client
_maxPlayers = maxPlayers;
//_usernames = new List<string>();
_users = new List<User>();
_lobbyJoinable = true;
}
public void AddUser(string username, out bool succes)
@@ -41,7 +43,7 @@ namespace Client
succes = false;
if (_users.Count < _maxPlayers)
{
_users.Add(new User(username, 0, false));
_users.Add(new User(username, 0, false, false));
succes = true;
}
}
@@ -87,6 +89,11 @@ namespace Client
set { _users = value; }
}
public bool LobbyJoinable
{
get { return _lobbyJoinable; }
set { _lobbyJoinable = value; }
}
}
}

View File

@@ -11,14 +11,16 @@ namespace SharedClientServer
private string _username;
private int _score;
private bool _host;
private bool _turnToDraw;
private string _message;
[JsonConstructor]
public User(string username, int score, bool host)
public User(string username, int score, bool host, bool turnToDraw)
{
_username = username;
_score = score;
_host = host;
_turnToDraw = turnToDraw;
}
public User(string username)
@@ -26,6 +28,7 @@ namespace SharedClientServer
_username = username;
_score = 0;
_host = false;
_turnToDraw = false;
}
public static bool operator ==(User u1, User u2)
@@ -81,5 +84,11 @@ namespace SharedClientServer
get { return _host; }
set { _host = value; }
}
public bool TurnToDraw
{
get { return _turnToDraw; }
set { _turnToDraw = value; }
}
}
}