Merge remote-tracking branch 'origin/setupBranch' into setupBranch
This commit is contained in:
@@ -72,10 +72,10 @@ namespace Client
|
|||||||
Array.Copy(message, 1, payload, 0, message.Length - 1);
|
Array.Copy(message, 1, payload, 0, message.Length - 1);
|
||||||
switch (id)
|
switch (id)
|
||||||
{
|
{
|
||||||
case 0x01:
|
case JSONConvert.LOGIN:
|
||||||
// json log in username data
|
// json log in username data
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case JSONConvert.MESSAGE:
|
||||||
// json message data
|
// json message data
|
||||||
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
||||||
string textUsername = combo.Item1;
|
string textUsername = combo.Item1;
|
||||||
@@ -84,11 +84,11 @@ namespace Client
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x03:
|
case JSONConvert.LOBBY:
|
||||||
// lobby data
|
// lobby data
|
||||||
//TODO fill lobby with the data received
|
//TODO fill lobby with the data received
|
||||||
break;
|
break;
|
||||||
case 0x04:
|
case JSONConvert.CANVAS:
|
||||||
// canvas data
|
// canvas data
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|||||||
@@ -5,6 +5,7 @@ using System.ComponentModel;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Windows.Input;
|
using System.Windows.Input;
|
||||||
using SharedClientServer;
|
using SharedClientServer;
|
||||||
|
using System.Diagnostics;
|
||||||
|
|
||||||
namespace Client
|
namespace Client
|
||||||
{
|
{
|
||||||
@@ -43,9 +44,6 @@ namespace Client
|
|||||||
{
|
{
|
||||||
get
|
get
|
||||||
{
|
{
|
||||||
if (_model == null)
|
|
||||||
_model = new Model();
|
|
||||||
|
|
||||||
return _model;
|
return _model;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -61,5 +59,10 @@ namespace Client
|
|||||||
get { return _lobbies; }
|
get { return _lobbies; }
|
||||||
set { _lobbies = value; }
|
set { _lobbies = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void OnHostButtonClick()
|
||||||
|
{
|
||||||
|
Debug.WriteLine("Click host button");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -12,7 +12,7 @@
|
|||||||
<RowDefinition/>
|
<RowDefinition/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
|
|
||||||
|
|
||||||
<Grid.ColumnDefinitions>
|
<Grid.ColumnDefinitions>
|
||||||
<ColumnDefinition />
|
<ColumnDefinition />
|
||||||
<ColumnDefinition/>
|
<ColumnDefinition/>
|
||||||
@@ -34,7 +34,6 @@
|
|||||||
<Label Grid.Row="0" Content="This client information:" FontSize="17"/>
|
<Label Grid.Row="0" Content="This client information:" FontSize="17"/>
|
||||||
|
|
||||||
<Label Grid.Row="1" Grid.Column="0" Content="Your username:" FontSize="15" VerticalAlignment="Center"/>
|
<Label Grid.Row="1" Grid.Column="0" Content="Your username:" FontSize="15" VerticalAlignment="Center"/>
|
||||||
<TextBox Name="usernameTextbox" Grid.Row="1" Grid.Column="1" MaxLength="10" FontSize="15" VerticalAlignment="Center"/>
|
|
||||||
|
|
||||||
<Label Grid.Row="2" Grid.Column="0" Content="Which color you want to be:" FontSize="15" VerticalAlignment="Center"/>
|
<Label Grid.Row="2" Grid.Column="0" Content="Which color you want to be:" FontSize="15" VerticalAlignment="Center"/>
|
||||||
<ComboBox Name="colorSelection" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" FontSize="15">
|
<ComboBox Name="colorSelection" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" FontSize="15">
|
||||||
@@ -48,6 +47,7 @@
|
|||||||
</ComboBox>
|
</ComboBox>
|
||||||
|
|
||||||
<Label Grid.Row="3" Name="testLabel" FontSize="15" VerticalAlignment="Center"/>
|
<Label Grid.Row="3" Name="testLabel" FontSize="15" VerticalAlignment="Center"/>
|
||||||
|
<Label Content="place username here" Grid.Column="1" HorizontalAlignment="Center" Margin="0,12,0,0" VerticalAlignment="Top" Grid.Row="1"/>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
<RowDefinition Height="50"/>
|
<RowDefinition Height="50"/>
|
||||||
</Grid.RowDefinitions>
|
</Grid.RowDefinitions>
|
||||||
<Button Name="joinButton" Grid.Row="0" Content="join a selected lobby" Click="Button_Click" Width="200" Height="40" HorizontalAlignment="Left" Margin="10, 0, 0, 0"/>
|
<Button Name="joinButton" Grid.Row="0" Content="join a selected lobby" Click="Button_Click" Width="200" Height="40" HorizontalAlignment="Left" Margin="10, 0, 0, 0"/>
|
||||||
<Button Name="hostButton" Grid.Row="1" Content="host a new lobby" Command="{Binding ...}" Width="200" Height="40" HorizontalAlignment="left" Margin="10, 0, 0, 0"/>
|
<Button Name="hostButton" Grid.Row="1" Content="host a new lobby" Command="{Binding Path=OnHostButtonClick}" Width="200" Height="40" HorizontalAlignment="left" Margin="10, 0, 0, 0"/>
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|
||||||
</Grid>
|
</Grid>
|
||||||
|
|||||||
@@ -37,7 +37,6 @@ namespace Client
|
|||||||
if(lobbySelected != null)
|
if(lobbySelected != null)
|
||||||
{
|
{
|
||||||
testLabel.Content = lobbySelected.ID;
|
testLabel.Content = lobbySelected.ID;
|
||||||
usernameTextbox.IsEnabled = false;
|
|
||||||
colorSelection.IsEnabled = false;
|
colorSelection.IsEnabled = false;
|
||||||
joinButton.IsEnabled = false;
|
joinButton.IsEnabled = false;
|
||||||
hostButton.IsEnabled = false;
|
hostButton.IsEnabled = false;
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ namespace Server.Models
|
|||||||
{
|
{
|
||||||
class ServerClient : ObservableObject
|
class ServerClient : ObservableObject
|
||||||
{
|
{
|
||||||
public string Username { get; set; }
|
|
||||||
private TcpClient tcpClient;
|
private TcpClient tcpClient;
|
||||||
private NetworkStream stream;
|
private NetworkStream stream;
|
||||||
private byte[] buffer = new byte[1024];
|
private byte[] buffer = new byte[1024];
|
||||||
private byte[] totalBuffer = new byte[1024];
|
private byte[] totalBuffer = new byte[1024];
|
||||||
private int totalBufferReceived = 0;
|
private int totalBufferReceived = 0;
|
||||||
|
public User User { get; set; }
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -84,24 +84,25 @@ namespace Server.Models
|
|||||||
/// <param name="message">the incoming message</param>
|
/// <param name="message">the incoming message</param>
|
||||||
private void HandleIncomingMessage(byte[] message)
|
private void HandleIncomingMessage(byte[] message)
|
||||||
{
|
{
|
||||||
Debug.WriteLine($"Got message from {Username} : {message}");
|
Debug.WriteLine($"Got message from {User?.Username} : {message}");
|
||||||
byte id = message[0];
|
byte id = message[0];
|
||||||
byte[] payload = new byte[message.Length - 1];
|
byte[] payload = new byte[message.Length - 1];
|
||||||
Array.Copy(message,1,payload,0,message.Length-1);
|
Array.Copy(message,1,payload,0,message.Length-1);
|
||||||
switch(id)
|
switch(id)
|
||||||
{
|
{
|
||||||
|
|
||||||
case 0x01:
|
case JSONConvert.LOGIN:
|
||||||
// json log in username data
|
// json log in username data
|
||||||
string uName = JSONConvert.GetUsernameLogin(message);
|
string uName = JSONConvert.GetUsernameLogin(payload);
|
||||||
if (uName != null)
|
if (uName != null)
|
||||||
{
|
{
|
||||||
Username = uName;
|
User = new User(uName);
|
||||||
Debug.WriteLine("[SERVERCLIENT] set username to " + Username);
|
User.Username = uName;
|
||||||
|
Debug.WriteLine("[SERVERCLIENT] set username to " + uName);
|
||||||
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 0x02:
|
case JSONConvert.MESSAGE:
|
||||||
// json message data
|
// json message data
|
||||||
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
||||||
string textUsername = combo.Item1;
|
string textUsername = combo.Item1;
|
||||||
@@ -110,10 +111,10 @@ namespace Server.Models
|
|||||||
// todo handle sending to all except this user the username and message to display in chat
|
// todo handle sending to all except this user the username and message to display in chat
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x03:
|
case JSONConvert.LOBBY:
|
||||||
// lobby data
|
// lobby data
|
||||||
break;
|
break;
|
||||||
case 0x04:
|
case JSONConvert.CANVAS:
|
||||||
// canvas data
|
// canvas data
|
||||||
// todo send canvas data to all other serverclients in lobby
|
// todo send canvas data to all other serverclients in lobby
|
||||||
break;
|
break;
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ namespace Server.Models
|
|||||||
public List<Lobby> lobbies;
|
public List<Lobby> lobbies;
|
||||||
private Dictionary<Lobby, List<ServerClient>> serverClientsInlobbies;
|
private Dictionary<Lobby, List<ServerClient>> serverClientsInlobbies;
|
||||||
public Action newClientAction;
|
public Action newClientAction;
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// use a padlock object to make sure the singleton is thread-safe
|
/// use a padlock object to make sure the singleton is thread-safe
|
||||||
@@ -98,7 +99,7 @@ namespace Server.Models
|
|||||||
{
|
{
|
||||||
foreach (ServerClient sc in serverClients)
|
foreach (ServerClient sc in serverClients)
|
||||||
{
|
{
|
||||||
if (sc.Username != username) sc.sendMessage(message);
|
if (sc.User.Username != username) sc.sendMessage(message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -7,10 +7,15 @@ namespace SharedClientServer
|
|||||||
{
|
{
|
||||||
class JSONConvert
|
class JSONConvert
|
||||||
{
|
{
|
||||||
|
public const byte LOGIN = 0x01;
|
||||||
|
public const byte MESSAGE = 0x02;
|
||||||
|
public const byte LOBBY = 0x03;
|
||||||
|
public const byte CANVAS = 0x04;
|
||||||
public static (string,string) GetUsernameAndMessage(byte[] json)
|
public static (string,string) GetUsernameAndMessage(byte[] json)
|
||||||
{
|
{
|
||||||
string msg = Encoding.ASCII.GetString(json);
|
string msg = Encoding.ASCII.GetString(json);
|
||||||
dynamic payload = JsonConvert.DeserializeObject(msg);
|
dynamic payload = JsonConvert.DeserializeObject(msg);
|
||||||
|
|
||||||
return (payload.username, payload.message);
|
return (payload.username, payload.message);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -19,5 +24,30 @@ namespace SharedClientServer
|
|||||||
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
||||||
return payload.username;
|
return payload.username;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static byte[] GetUsernameMessage(string uName)
|
||||||
|
{
|
||||||
|
return GetMessageToSend(LOGIN, new
|
||||||
|
{
|
||||||
|
username = uName
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// constructs a message that can be sent to the clients or server
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="identifier">the identifier for what kind of message it is</param>
|
||||||
|
/// <param name="payload">the json payload</param>
|
||||||
|
/// <returns>a byte array containing a message that can be sent to clients or server</returns>
|
||||||
|
public static byte[] GetMessageToSend(byte identifier, dynamic payload)
|
||||||
|
{
|
||||||
|
// convert the dynamic to bytes
|
||||||
|
byte[] payloadBytes = Encoding.ASCII.GetBytes(JsonConvert.SerializeObject(payload));
|
||||||
|
// 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 + 1];
|
||||||
|
Array.Copy(payloadBytes, 0, res, 1, payloadBytes.Length);
|
||||||
|
res[0] = identifier;
|
||||||
|
return res;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -17,6 +17,13 @@ namespace SharedClientServer
|
|||||||
_host = host;
|
_host = host;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public User(string username)
|
||||||
|
{
|
||||||
|
_username = username;
|
||||||
|
_score = 0;
|
||||||
|
_host = false;
|
||||||
|
}
|
||||||
|
|
||||||
public string Username
|
public string Username
|
||||||
{
|
{
|
||||||
get { return _username; }
|
get { return _username; }
|
||||||
|
|||||||
Reference in New Issue
Block a user