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);
|
||||
switch (id)
|
||||
{
|
||||
case 0x01:
|
||||
case JSONConvert.LOGIN:
|
||||
// json log in username data
|
||||
break;
|
||||
case 0x02:
|
||||
case JSONConvert.MESSAGE:
|
||||
// json message data
|
||||
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
||||
string textUsername = combo.Item1;
|
||||
@@ -84,11 +84,11 @@ namespace Client
|
||||
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
case JSONConvert.LOBBY:
|
||||
// lobby data
|
||||
//TODO fill lobby with the data received
|
||||
break;
|
||||
case 0x04:
|
||||
case JSONConvert.CANVAS:
|
||||
// canvas data
|
||||
break;
|
||||
default:
|
||||
|
||||
@@ -5,6 +5,7 @@ using System.ComponentModel;
|
||||
using System.Text;
|
||||
using System.Windows.Input;
|
||||
using SharedClientServer;
|
||||
using System.Diagnostics;
|
||||
|
||||
namespace Client
|
||||
{
|
||||
@@ -43,9 +44,6 @@ namespace Client
|
||||
{
|
||||
get
|
||||
{
|
||||
if (_model == null)
|
||||
_model = new Model();
|
||||
|
||||
return _model;
|
||||
}
|
||||
|
||||
@@ -61,5 +59,10 @@ namespace Client
|
||||
get { return _lobbies; }
|
||||
set { _lobbies = value; }
|
||||
}
|
||||
|
||||
public void OnHostButtonClick()
|
||||
{
|
||||
Debug.WriteLine("Click host button");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -12,7 +12,7 @@
|
||||
<RowDefinition/>
|
||||
</Grid.RowDefinitions>
|
||||
|
||||
|
||||
|
||||
<Grid.ColumnDefinitions>
|
||||
<ColumnDefinition />
|
||||
<ColumnDefinition/>
|
||||
@@ -34,7 +34,6 @@
|
||||
<Label Grid.Row="0" Content="This client information:" FontSize="17"/>
|
||||
|
||||
<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"/>
|
||||
<ComboBox Name="colorSelection" Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" FontSize="15">
|
||||
@@ -48,6 +47,7 @@
|
||||
</ComboBox>
|
||||
|
||||
<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>
|
||||
|
||||
@@ -68,7 +68,7 @@
|
||||
<RowDefinition Height="50"/>
|
||||
</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="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>
|
||||
|
||||
@@ -37,7 +37,6 @@ namespace Client
|
||||
if(lobbySelected != null)
|
||||
{
|
||||
testLabel.Content = lobbySelected.ID;
|
||||
usernameTextbox.IsEnabled = false;
|
||||
colorSelection.IsEnabled = false;
|
||||
joinButton.IsEnabled = false;
|
||||
hostButton.IsEnabled = false;
|
||||
|
||||
@@ -10,12 +10,12 @@ namespace Server.Models
|
||||
{
|
||||
class ServerClient : ObservableObject
|
||||
{
|
||||
public string Username { get; set; }
|
||||
private TcpClient tcpClient;
|
||||
private NetworkStream stream;
|
||||
private byte[] buffer = new byte[1024];
|
||||
private byte[] totalBuffer = new byte[1024];
|
||||
private int totalBufferReceived = 0;
|
||||
public User User { get; set; }
|
||||
|
||||
|
||||
/// <summary>
|
||||
@@ -84,24 +84,25 @@ namespace Server.Models
|
||||
/// <param name="message">the incoming message</param>
|
||||
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[] payload = new byte[message.Length - 1];
|
||||
Array.Copy(message,1,payload,0,message.Length-1);
|
||||
switch(id)
|
||||
{
|
||||
|
||||
case 0x01:
|
||||
case JSONConvert.LOGIN:
|
||||
// json log in username data
|
||||
string uName = JSONConvert.GetUsernameLogin(message);
|
||||
string uName = JSONConvert.GetUsernameLogin(payload);
|
||||
if (uName != null)
|
||||
{
|
||||
Username = uName;
|
||||
Debug.WriteLine("[SERVERCLIENT] set username to " + Username);
|
||||
User = new User(uName);
|
||||
User.Username = uName;
|
||||
Debug.WriteLine("[SERVERCLIENT] set username to " + uName);
|
||||
|
||||
}
|
||||
break;
|
||||
case 0x02:
|
||||
case JSONConvert.MESSAGE:
|
||||
// json message data
|
||||
(string, string) combo = JSONConvert.GetUsernameAndMessage(payload);
|
||||
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
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
case JSONConvert.LOBBY:
|
||||
// lobby data
|
||||
break;
|
||||
case 0x04:
|
||||
case JSONConvert.CANVAS:
|
||||
// canvas data
|
||||
// todo send canvas data to all other serverclients in lobby
|
||||
break;
|
||||
|
||||
@@ -18,6 +18,7 @@ namespace Server.Models
|
||||
public List<Lobby> lobbies;
|
||||
private Dictionary<Lobby, List<ServerClient>> serverClientsInlobbies;
|
||||
public Action newClientAction;
|
||||
|
||||
|
||||
/// <summary>
|
||||
/// use a padlock object to make sure the singleton is thread-safe
|
||||
@@ -98,7 +99,7 @@ namespace Server.Models
|
||||
{
|
||||
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
|
||||
{
|
||||
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)
|
||||
{
|
||||
string msg = Encoding.ASCII.GetString(json);
|
||||
dynamic payload = JsonConvert.DeserializeObject(msg);
|
||||
|
||||
return (payload.username, payload.message);
|
||||
}
|
||||
|
||||
@@ -19,5 +24,30 @@ namespace SharedClientServer
|
||||
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
||||
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;
|
||||
}
|
||||
|
||||
public User(string username)
|
||||
{
|
||||
_username = username;
|
||||
_score = 0;
|
||||
_host = false;
|
||||
}
|
||||
|
||||
public string Username
|
||||
{
|
||||
get { return _username; }
|
||||
|
||||
Reference in New Issue
Block a user