added remote backend

This commit is contained in:
MasterGordon 2022-10-26 14:57:00 +02:00
parent d4c697c5b9
commit ceeeb070e9
6 changed files with 64 additions and 11 deletions

View File

@ -2,8 +2,8 @@
{
static void Main(string[] args)
{
// bool isHost = args.Contains("--host");
bool isHost = true;
bool isHost = args.Contains("--host");
// bool isHost = true;
var game = new MultiPlayerGame(isHost);
game.Run();
}

View File

@ -29,8 +29,8 @@ class MultiPlayerGame : Game
window
);
}
ctx.Frontend.Init();
ctx.Backend.Init();
ctx.Frontend.Init();
}
protected override void draw()

View File

@ -5,13 +5,18 @@ using WatsonTcp;
class Backend : IBackend
{
private WatsonTcpServer server;
private int nextId = 0;
public void Process(double dt)
{
nextId++;
var ctx = Context.Get();
ctx.GameState.PlayerPositions.ForEach(player =>
{
player.position += player.movement;
});
this.sendGameState();
}
public void ProcessPacket(ValueType packet)
@ -26,6 +31,7 @@ class Backend : IBackend
}
if (packet is ConnectPacket connectPacket)
{
Console.WriteLine($"Player {connectPacket.playerName} connected");
gameState.PlayerPositions.Add(new Player
{
name = connectPacket.playerName,
@ -33,6 +39,7 @@ class Backend : IBackend
movement = new Vector2(0, 0)
});
}
this.sendGameState();
}
public void Init()
@ -42,7 +49,7 @@ class Backend : IBackend
public void Run()
{
var server = new WatsonTcpServer("127.0.0.1", 42069);
server = new WatsonTcpServer("127.0.0.1", 42069);
server.Events.ClientConnected += this.clientConnected;
server.Events.ClientDisconnected += this.clientDisconnected;
server.Events.MessageReceived += this.messageReceived;
@ -67,7 +74,26 @@ class Backend : IBackend
private void messageReceived(object? sender, MessageReceivedEventArgs args)
{
var message = Encoding.UTF8.GetString(args.Data);
Console.WriteLine("Message received: " + args.IpPort + " " + message);
Console.WriteLine("Message Received: " + args.IpPort);
var packet = Converter.ParsePacket(args.Data);
Console.WriteLine("Received packet: " + packet);
if (packet != null)
{
this.ProcessPacket(packet);
}
}
private void sendGameState()
{
if (server == null) return;
var clients = server.ListClients();
if (clients.Count() == 0) return;
var gameState = Context.Get().GameState;
var json = JsonConvert.SerializeObject(gameState);
var bytes = Encoding.UTF8.GetBytes(json);
foreach (var client in clients)
{
server.Send(client, bytes);
}
}
}

View File

@ -1,5 +1,11 @@
using WatsonTcp;
using Newtonsoft.Json;
using System.Text;
class RemoteBackend : IBackend
{
private WatsonTcpClient client;
public void Process(double dt)
{
@ -7,11 +13,24 @@ class RemoteBackend : IBackend
public void ProcessPacket(ValueType packet)
{
throw new NotImplementedException();
var json = JsonConvert.SerializeObject(packet);
var bytes = Encoding.UTF8.GetBytes(json);
client.Send(bytes);
}
public void Init()
{
client = new WatsonTcpClient("127.0.0.1", 42069);
client.Events.MessageReceived += (sender, args) =>
{
var ctx = Context.Get();
var message = Encoding.UTF8.GetString(args.Data);
var packet = JsonConvert.DeserializeObject<GameState>(message);
if (packet != null)
{
ctx.GameState = packet;
}
};
client.Connect();
}
}

View File

@ -3,9 +3,12 @@ using static SDL2.SDL;
class Frontend : IFrontend
{
private string playerName = "Player";
public void Init()
{
var conntectPacket = new ConnectPacket("Gordon");
this.playerName = Context.Get().IsHost ? "Host" : "Client";
var conntectPacket = new ConnectPacket(playerName);
Context.Get().Backend.ProcessPacket(conntectPacket);
}
@ -66,7 +69,7 @@ class Frontend : IFrontend
var movement = ctx.FrontendGameState.movementInput;
if (movement.Length() > 0)
movement = Vector2.Normalize(movement);
ctx.Backend.ProcessPacket(new MovePacket("Gordon", movement));
ctx.Backend.ProcessPacket(new MovePacket(playerName, movement));
}
if (e.key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_ESCAPE)
{
@ -75,9 +78,12 @@ class Frontend : IFrontend
}
ctx.Renderer.Clear();
ctx.Renderer.SetColor(255, 0, 0, 255);
ctx.GameState.PlayerPositions.ForEach(player =>
{
if (player.name == playerName)
ctx.Renderer.SetColor(0, 0, 255, 255);
else
ctx.Renderer.SetColor(255, 0, 0, 255);
ctx.Renderer.DrawRect(player.position.X, player.position.Y, 10, 10);
});
ctx.Renderer.Present();

View File

@ -19,9 +19,11 @@ class Converter
throw new System.Exception("Packet has no type");
}
var packetType = type.Value<string>();
Console.WriteLine("Packet type: " + packetType);
return packetType switch
{
"move" => parsedRaw.ToObject<MovePacket>(),
"connect" => parsedRaw.ToObject<ConnectPacket>(),
_ => throw new System.Exception("Unknown packet type")
};
}