added remote backend
This commit is contained in:
parent
d4c697c5b9
commit
ceeeb070e9
|
|
@ -2,8 +2,8 @@
|
||||||
{
|
{
|
||||||
static void Main(string[] args)
|
static void Main(string[] args)
|
||||||
{
|
{
|
||||||
// bool isHost = args.Contains("--host");
|
bool isHost = args.Contains("--host");
|
||||||
bool isHost = true;
|
// bool isHost = true;
|
||||||
var game = new MultiPlayerGame(isHost);
|
var game = new MultiPlayerGame(isHost);
|
||||||
game.Run();
|
game.Run();
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -29,8 +29,8 @@ class MultiPlayerGame : Game
|
||||||
window
|
window
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
ctx.Frontend.Init();
|
|
||||||
ctx.Backend.Init();
|
ctx.Backend.Init();
|
||||||
|
ctx.Frontend.Init();
|
||||||
}
|
}
|
||||||
|
|
||||||
protected override void draw()
|
protected override void draw()
|
||||||
|
|
|
||||||
|
|
@ -5,13 +5,18 @@ using WatsonTcp;
|
||||||
|
|
||||||
class Backend : IBackend
|
class Backend : IBackend
|
||||||
{
|
{
|
||||||
|
private WatsonTcpServer server;
|
||||||
|
private int nextId = 0;
|
||||||
|
|
||||||
public void Process(double dt)
|
public void Process(double dt)
|
||||||
{
|
{
|
||||||
|
nextId++;
|
||||||
var ctx = Context.Get();
|
var ctx = Context.Get();
|
||||||
ctx.GameState.PlayerPositions.ForEach(player =>
|
ctx.GameState.PlayerPositions.ForEach(player =>
|
||||||
{
|
{
|
||||||
player.position += player.movement;
|
player.position += player.movement;
|
||||||
});
|
});
|
||||||
|
this.sendGameState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void ProcessPacket(ValueType packet)
|
public void ProcessPacket(ValueType packet)
|
||||||
|
|
@ -26,6 +31,7 @@ class Backend : IBackend
|
||||||
}
|
}
|
||||||
if (packet is ConnectPacket connectPacket)
|
if (packet is ConnectPacket connectPacket)
|
||||||
{
|
{
|
||||||
|
Console.WriteLine($"Player {connectPacket.playerName} connected");
|
||||||
gameState.PlayerPositions.Add(new Player
|
gameState.PlayerPositions.Add(new Player
|
||||||
{
|
{
|
||||||
name = connectPacket.playerName,
|
name = connectPacket.playerName,
|
||||||
|
|
@ -33,6 +39,7 @@ class Backend : IBackend
|
||||||
movement = new Vector2(0, 0)
|
movement = new Vector2(0, 0)
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
this.sendGameState();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Init()
|
public void Init()
|
||||||
|
|
@ -42,7 +49,7 @@ class Backend : IBackend
|
||||||
|
|
||||||
public void Run()
|
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.ClientConnected += this.clientConnected;
|
||||||
server.Events.ClientDisconnected += this.clientDisconnected;
|
server.Events.ClientDisconnected += this.clientDisconnected;
|
||||||
server.Events.MessageReceived += this.messageReceived;
|
server.Events.MessageReceived += this.messageReceived;
|
||||||
|
|
@ -67,7 +74,26 @@ class Backend : IBackend
|
||||||
|
|
||||||
private void messageReceived(object? sender, MessageReceivedEventArgs args)
|
private void messageReceived(object? sender, MessageReceivedEventArgs args)
|
||||||
{
|
{
|
||||||
var message = Encoding.UTF8.GetString(args.Data);
|
Console.WriteLine("Message Received: " + args.IpPort);
|
||||||
Console.WriteLine("Message received: " + args.IpPort + " " + message);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,5 +1,11 @@
|
||||||
|
using WatsonTcp;
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using System.Text;
|
||||||
|
|
||||||
class RemoteBackend : IBackend
|
class RemoteBackend : IBackend
|
||||||
{
|
{
|
||||||
|
private WatsonTcpClient client;
|
||||||
|
|
||||||
public void Process(double dt)
|
public void Process(double dt)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
@ -7,11 +13,24 @@ class RemoteBackend : IBackend
|
||||||
|
|
||||||
public void ProcessPacket(ValueType packet)
|
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()
|
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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -3,9 +3,12 @@ using static SDL2.SDL;
|
||||||
|
|
||||||
class Frontend : IFrontend
|
class Frontend : IFrontend
|
||||||
{
|
{
|
||||||
|
private string playerName = "Player";
|
||||||
|
|
||||||
public void Init()
|
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);
|
Context.Get().Backend.ProcessPacket(conntectPacket);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -66,7 +69,7 @@ class Frontend : IFrontend
|
||||||
var movement = ctx.FrontendGameState.movementInput;
|
var movement = ctx.FrontendGameState.movementInput;
|
||||||
if (movement.Length() > 0)
|
if (movement.Length() > 0)
|
||||||
movement = Vector2.Normalize(movement);
|
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)
|
if (e.key.keysym.scancode == SDL_Scancode.SDL_SCANCODE_ESCAPE)
|
||||||
{
|
{
|
||||||
|
|
@ -75,9 +78,12 @@ class Frontend : IFrontend
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.Renderer.Clear();
|
ctx.Renderer.Clear();
|
||||||
ctx.Renderer.SetColor(255, 0, 0, 255);
|
|
||||||
ctx.GameState.PlayerPositions.ForEach(player =>
|
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.DrawRect(player.position.X, player.position.Y, 10, 10);
|
||||||
});
|
});
|
||||||
ctx.Renderer.Present();
|
ctx.Renderer.Present();
|
||||||
|
|
|
||||||
|
|
@ -19,9 +19,11 @@ class Converter
|
||||||
throw new System.Exception("Packet has no type");
|
throw new System.Exception("Packet has no type");
|
||||||
}
|
}
|
||||||
var packetType = type.Value<string>();
|
var packetType = type.Value<string>();
|
||||||
|
Console.WriteLine("Packet type: " + packetType);
|
||||||
return packetType switch
|
return packetType switch
|
||||||
{
|
{
|
||||||
"move" => parsedRaw.ToObject<MovePacket>(),
|
"move" => parsedRaw.ToObject<MovePacket>(),
|
||||||
|
"connect" => parsedRaw.ToObject<ConnectPacket>(),
|
||||||
_ => throw new System.Exception("Unknown packet type")
|
_ => throw new System.Exception("Unknown packet type")
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue