[ADD] added hosting a lobby
This commit is contained in:
@@ -8,6 +8,7 @@ using static SharedClientServer.JSONConvert;
|
|||||||
|
|
||||||
namespace Client
|
namespace Client
|
||||||
{
|
{
|
||||||
|
public delegate void OnLobbyCreated(int id, int playersIn, int playersMax);
|
||||||
class Client : ObservableObject
|
class Client : ObservableObject
|
||||||
{
|
{
|
||||||
private TcpClient tcpClient;
|
private TcpClient tcpClient;
|
||||||
@@ -20,6 +21,7 @@ namespace Client
|
|||||||
private string username;
|
private string username;
|
||||||
public Callback OnSuccessfullConnect;
|
public Callback OnSuccessfullConnect;
|
||||||
public Callback OnLobbiesListReceived;
|
public Callback OnLobbiesListReceived;
|
||||||
|
public OnLobbyCreated OnLobbyCreated;
|
||||||
public Lobby[] Lobbies { get; set; }
|
public Lobby[] Lobbies { get; set; }
|
||||||
|
|
||||||
public Client(string username)
|
public Client(string username)
|
||||||
@@ -98,6 +100,14 @@ namespace Client
|
|||||||
case LobbyIdentifier.LIST:
|
case LobbyIdentifier.LIST:
|
||||||
Lobbies = JSONConvert.GetLobbiesFromMessage(payload);
|
Lobbies = JSONConvert.GetLobbiesFromMessage(payload);
|
||||||
OnLobbiesListReceived?.Invoke();
|
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;
|
break;
|
||||||
}
|
}
|
||||||
//TODO fill lobby with the data received
|
//TODO fill lobby with the data received
|
||||||
|
|||||||
@@ -30,18 +30,35 @@ namespace Client
|
|||||||
_lobbies = new ObservableCollection<Lobby>();
|
_lobbies = new ObservableCollection<Lobby>();
|
||||||
client = ClientData.Instance.Client;
|
client = ClientData.Instance.Client;
|
||||||
client.OnLobbiesListReceived = updateLobbies;
|
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(() =>
|
OnHostButtonClick = new RelayCommand(hostGame);
|
||||||
{
|
|
||||||
Debug.WriteLine("Host button clicked");
|
|
||||||
});
|
|
||||||
|
|
||||||
JoinSelectedLobby = new RelayCommand(startGameInLobby, true);
|
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()
|
private void updateLobbies()
|
||||||
{
|
{
|
||||||
Lobby[] lobbiesArr = client.Lobbies;
|
Lobby[] lobbiesArr = client.Lobbies;
|
||||||
@@ -61,13 +78,17 @@ namespace Client
|
|||||||
if (SelectedLobby != null)
|
if (SelectedLobby != null)
|
||||||
{
|
{
|
||||||
ClientData.Instance.Lobby = SelectedLobby;
|
ClientData.Instance.Lobby = SelectedLobby;
|
||||||
|
startGameWindow();
|
||||||
_model.CanStartGame = false;
|
|
||||||
GameWindow window = new GameWindow();
|
|
||||||
window.Show();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void startGameWindow()
|
||||||
|
{
|
||||||
|
_model.CanStartGame = false;
|
||||||
|
GameWindow window = new GameWindow();
|
||||||
|
window.Show();
|
||||||
|
}
|
||||||
|
|
||||||
private void ClickCheck()
|
private void ClickCheck()
|
||||||
{
|
{
|
||||||
if(!(_model.Status))
|
if(!(_model.Status))
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
|
|
||||||
|
using Client;
|
||||||
using SharedClientServer;
|
using SharedClientServer;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
@@ -129,6 +130,12 @@ namespace Server.Models
|
|||||||
Debug.WriteLine("[SERVERCLIENT] got lobby request message, sending lobbies...");
|
Debug.WriteLine("[SERVERCLIENT] got lobby request message, sending lobbies...");
|
||||||
sendMessage(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray()));
|
sendMessage(JSONConvert.ConstructLobbyListMessage(ServerCommunication.INSTANCE.lobbies.ToArray()));
|
||||||
break;
|
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;
|
break;
|
||||||
case JSONConvert.CANVAS:
|
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()
|
public static byte[] ConstructLobbyRequestMessage()
|
||||||
{
|
{
|
||||||
return GetMessageToSend(LOBBY, new
|
return GetMessageToSend(LOBBY, new
|
||||||
@@ -80,6 +99,11 @@ namespace SharedClientServer
|
|||||||
id = lobbyID
|
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)
|
public static Lobby[] GetLobbiesFromMessage(byte[] json)
|
||||||
{
|
{
|
||||||
@@ -95,6 +119,15 @@ namespace SharedClientServer
|
|||||||
return payload.id;
|
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>
|
/// <summary>
|
||||||
/// constructs a message that can be sent to the clients or server
|
/// constructs a message that can be sent to the clients or server
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -116,10 +149,6 @@ namespace SharedClientServer
|
|||||||
return res;
|
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
|
public int PlayersIn
|
||||||
{
|
{
|
||||||
get { return _playersIn; }
|
get { return _users.Count; }
|
||||||
set { _playersIn = value; }
|
set { _playersIn = value; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user