[ADD] added hosting a lobby
This commit is contained in:
@@ -8,6 +8,7 @@ using static SharedClientServer.JSONConvert;
|
||||
|
||||
namespace Client
|
||||
{
|
||||
public delegate void OnLobbyCreated(int id, int playersIn, int playersMax);
|
||||
class Client : ObservableObject
|
||||
{
|
||||
private TcpClient tcpClient;
|
||||
@@ -20,6 +21,7 @@ namespace Client
|
||||
private string username;
|
||||
public Callback OnSuccessfullConnect;
|
||||
public Callback OnLobbiesListReceived;
|
||||
public OnLobbyCreated OnLobbyCreated;
|
||||
public Lobby[] Lobbies { get; set; }
|
||||
|
||||
public Client(string username)
|
||||
@@ -98,6 +100,14 @@ namespace Client
|
||||
case LobbyIdentifier.LIST:
|
||||
Lobbies = JSONConvert.GetLobbiesFromMessage(payload);
|
||||
OnLobbiesListReceived?.Invoke();
|
||||
break;
|
||||
case LobbyIdentifier.HOST:
|
||||
// we receive this when the server has made us a host of a new lobby
|
||||
// TODO get the new lobby and the id
|
||||
Debug.WriteLine("[CLIENT] got lobby object");
|
||||
Lobby lobby = JSONConvert.GetLobby(payload);
|
||||
OnLobbyCreated?.Invoke(lobby.ID,lobby.PlayersIn,lobby.MaxPlayers);
|
||||
|
||||
break;
|
||||
}
|
||||
//TODO fill lobby with the data received
|
||||
|
||||
@@ -30,18 +30,35 @@ namespace Client
|
||||
_lobbies = new ObservableCollection<Lobby>();
|
||||
client = ClientData.Instance.Client;
|
||||
client.OnLobbiesListReceived = updateLobbies;
|
||||
//_lobbies.Add(new Lobby(50, 3, 8));
|
||||
//_lobbies.Add(new Lobby(69, 1, 9));
|
||||
//_lobbies.Add(new Lobby(420, 7, 7));
|
||||
|
||||
|
||||
OnHostButtonClick = new RelayCommand(() =>
|
||||
{
|
||||
Debug.WriteLine("Host button clicked");
|
||||
});
|
||||
OnHostButtonClick = new RelayCommand(hostGame);
|
||||
|
||||
JoinSelectedLobby = new RelayCommand(startGameInLobby, true);
|
||||
}
|
||||
|
||||
private void hostGame()
|
||||
{
|
||||
Debug.WriteLine("attempting to host game for " + ClientData.Instance.User.Username);
|
||||
client.SendMessage(JSONConvert.ConstructLobbyHostMessage());
|
||||
client.OnLobbyCreated = becomeHostForLobby;
|
||||
}
|
||||
|
||||
private void becomeHostForLobby(int id, int players, int maxplayers)
|
||||
{
|
||||
|
||||
Debug.WriteLine($"got host succes with data {id} {players} {maxplayers} ");
|
||||
Lobby newLobby = new Lobby(id, players, maxplayers);
|
||||
SelectedLobby = newLobby;
|
||||
Application.Current.Dispatcher.Invoke(delegate
|
||||
{
|
||||
_lobbies.Add(newLobby);
|
||||
startGameInLobby();
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
|
||||
private void updateLobbies()
|
||||
{
|
||||
Lobby[] lobbiesArr = client.Lobbies;
|
||||
@@ -61,13 +78,17 @@ namespace Client
|
||||
if (SelectedLobby != null)
|
||||
{
|
||||
ClientData.Instance.Lobby = SelectedLobby;
|
||||
|
||||
_model.CanStartGame = false;
|
||||
GameWindow window = new GameWindow();
|
||||
window.Show();
|
||||
startGameWindow();
|
||||
}
|
||||
}
|
||||
|
||||
private void startGameWindow()
|
||||
{
|
||||
_model.CanStartGame = false;
|
||||
GameWindow window = new GameWindow();
|
||||
window.Show();
|
||||
}
|
||||
|
||||
private void ClickCheck()
|
||||
{
|
||||
if(!(_model.Status))
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
|
||||
using Client;
|
||||
using SharedClientServer;
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
@@ -129,6 +130,12 @@ namespace Server.Models
|
||||
Debug.WriteLine("[SERVERCLIENT] got lobby request message, sending lobbies...");
|
||||
sendMessage(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray()));
|
||||
break;
|
||||
case LobbyIdentifier.HOST:
|
||||
// add new lobby and add this serverclient to it
|
||||
Lobby created = ServerCommunication.INSTANCE.HostForLobby(this.User);
|
||||
Debug.WriteLine("[SERVERCLIENT] created lobby");
|
||||
sendMessage(JSONConvert.ConstructLobbyHostCreatedMessage(created));
|
||||
break;
|
||||
}
|
||||
break;
|
||||
case JSONConvert.CANVAS:
|
||||
|
||||
@@ -148,5 +148,14 @@ namespace Server.Models
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
public Lobby HostForLobby(User user)
|
||||
{
|
||||
Lobby lobby = new Lobby( lobbies.Count + 1,0, 8);
|
||||
lobbies.Add(lobby);
|
||||
serverClientsInlobbies.Add(lobby, new List<ServerClient>());
|
||||
AddToLobby(lobby, user);
|
||||
return lobby;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -46,6 +46,25 @@ namespace SharedClientServer
|
||||
});
|
||||
}
|
||||
|
||||
#region lobby messages
|
||||
|
||||
public static byte[] ConstructLobbyHostMessage()
|
||||
{
|
||||
return GetMessageToSend(LOBBY, new
|
||||
{
|
||||
identifier = LobbyIdentifier.HOST
|
||||
});
|
||||
}
|
||||
|
||||
public static byte[] ConstructLobbyHostCreatedMessage(Lobby l)
|
||||
{
|
||||
return GetMessageToSend(LOBBY, new
|
||||
{
|
||||
identifier = LobbyIdentifier.HOST,
|
||||
lobby = l
|
||||
}) ;
|
||||
}
|
||||
|
||||
public static byte[] ConstructLobbyRequestMessage()
|
||||
{
|
||||
return GetMessageToSend(LOBBY, new
|
||||
@@ -80,6 +99,11 @@ namespace SharedClientServer
|
||||
id = lobbyID
|
||||
});
|
||||
}
|
||||
public static LobbyIdentifier GetLobbyIdentifier(byte[] json)
|
||||
{
|
||||
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
||||
return payload.identifier;
|
||||
}
|
||||
|
||||
public static Lobby[] GetLobbiesFromMessage(byte[] json)
|
||||
{
|
||||
@@ -95,6 +119,15 @@ namespace SharedClientServer
|
||||
return payload.id;
|
||||
}
|
||||
|
||||
public static Lobby GetLobby(byte[] json)
|
||||
{
|
||||
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
||||
JObject dynamicAsObject = payload.lobby;
|
||||
return dynamicAsObject.ToObject<Lobby>();
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
/// <summary>
|
||||
/// constructs a message that can be sent to the clients or server
|
||||
/// </summary>
|
||||
@@ -116,10 +149,6 @@ namespace SharedClientServer
|
||||
return res;
|
||||
}
|
||||
|
||||
public static LobbyIdentifier GetLobbyIdentifier(byte[] json)
|
||||
{
|
||||
dynamic payload = JsonConvert.DeserializeObject(Encoding.ASCII.GetString(json));
|
||||
return payload.identifier;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -64,7 +64,7 @@ namespace Client
|
||||
|
||||
public int PlayersIn
|
||||
{
|
||||
get { return _playersIn; }
|
||||
get { return _users.Count; }
|
||||
set { _playersIn = value; }
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user