added remote backend
This commit is contained in:
parent
d4c697c5b9
commit
ceeeb070e9
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -29,8 +29,8 @@ class MultiPlayerGame : Game
|
|||
window
|
||||
);
|
||||
}
|
||||
ctx.Frontend.Init();
|
||||
ctx.Backend.Init();
|
||||
ctx.Frontend.Init();
|
||||
}
|
||||
|
||||
protected override void draw()
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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();
|
||||
|
|
|
|||
|
|
@ -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")
|
||||
};
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue