public async Task Process(GamePointer gp, List<PlayerState> players, BufferBlock<UpdatePacket> sendChannel) { players.Add(_player); var squares = gp.Game.GetSquares().Select(x => new SquareDTO(x)).ToArray(); //FIXME: right now the order is important here, lest we lack player color information when rendering flags var json2 = JSON.Serialize<PlayerState[]>(players.ToArray()); var packet2 = new UpdatePacket() { Type = "player", Data = json2 }; var j2 = JSON.Serialize<UpdatePacket>(packet2); await _uc.SendAsync(j2); var json = JSON.Serialize<SquareDTO[]>(squares); var packet = new UpdatePacket() { Type = "square", Data = json }; var j = JSON.Serialize<UpdatePacket>(packet); await _uc.SendAsync(j); }
public async Task Process(GamePointer gamePointer, List<PlayerState> players, BufferBlock<UpdatePacket> sendChannel) { if (_player.Dead) { return; } List<Square> changedSquares = gamePointer.Game.Update(_command, _player); if (changedSquares.Count > 0) { var json = JSON.Serialize<Square[]>(changedSquares.ToArray()); var packet = new UpdatePacket() { Type = "square", Data = json }; await sendChannel.SendAsync(packet); } var player = JSON.Serialize<PlayerState>(_player); var pp = new UpdatePacket() { Type = "player", Data = player }; await sendChannel.SendAsync(pp); }
static async Task ProcessWebSocket(Websocket ws, ConnectionHub connectionHub, BufferBlock<GameTask> gameTasks) { var uc = new UserConnection(ws); await connectionHub.Add(uc); var hash = Guid.NewGuid().ToString(); var player = new PlayerState() { Name = "player", Color = "blue", Hash = hash }; var first = new PlayerInit() { Hash = hash, Height = 0, Width = 0 }; var json = JSON.Serialize(first); var initPacket = new UpdatePacket() { Type = "init", Data = json }; var ip = JSON.Serialize(initPacket); await uc.SendAsync(ip); ReadWebsocket(ws, gameTasks, uc, player); var initTask = new InitTask(uc, player); await gameTasks.SendAsync(initTask); await uc.Worker(); Console.WriteLine("disconnected"); //FIXME: this is never pushed to currently connected clients player.Dead = true; await connectionHub.Remove(uc); }