netcode: replicate other players for connecting client

This commit is contained in:
2022-05-14 19:04:34 +03:00
parent 3b8a226fdc
commit 789b4bacec
10 changed files with 358 additions and 23 deletions

View File

@@ -103,15 +103,24 @@ namespace Game
{
Console.Print($"Client({networkEvent.Sender.ConnectionId}) is trying to connect");
if (GameModeManager.OnClientConnecting(networkEvent.Sender))
try
{
ConnectedClients.Add(networkEvent.Sender);
Console.Print($"Client({networkEvent.Sender.ConnectionId}) connected. Total clients: {ConnectedClients.Count}");
IsServer = true;
if (GameModeManager.OnClientConnecting(networkEvent.Sender))
{
ConnectedClients.Add(networkEvent.Sender);
Console.Print(
$"Client({networkEvent.Sender.ConnectionId}) connected. Total clients: {ConnectedClients.Count}");
GameModeManager.OnClientConnected(networkEvent.Sender);
GameModeManager.OnClientConnected(networkEvent.Sender);
}
else
Console.Print($"Client({networkEvent.Sender.ConnectionId}) connection refused");
}
finally
{
IsServer = false;
}
else
Console.Print($"Client({networkEvent.Sender.ConnectionId}) connection refused");
break;
}
@@ -128,10 +137,32 @@ namespace Game
{
try
{
IsServer = true;
OnNetworkMessage(ref networkEvent);
if (networkEvent.Message.Position > 0 &&
networkEvent.Message.Position < networkEvent.Message.Length)
{
string err =
$"Network message was not fully read: {networkEvent.Message.Position} / {networkEvent.Message.Length}.";
networkEvent.Message.Position = 0;
byte[] messageBytes = new byte[networkEvent.Message.Length];
unsafe
{
fixed (byte* messageBytePtr = &messageBytes[0])
networkEvent.Message.ReadBytes(messageBytePtr, (int)networkEvent.Message.Length);
}
string messageBytesStr = string.Join(", ",
messageBytes.Select(x => "0x" + ((int)x).ToString("X2")));
Console.PrintError(err + $"Message dump: {messageBytesStr}");
}
}
finally
{
IsServer = false;
server.RecycleMessage(networkEvent.Message);
}
break;