public static HostGameRequest Deserialize(HazelBinaryReader reader) { var result = new HostGameRequest(); result.gameOptions = GameOptionsData.Deserialize(reader.ReadBytesAndSize()); return(result); }
public static GetGameListV2Request Deserialize(HazelBinaryReader reader) { var msg = new GetGameListV2Request(); reader.ReadPackedInt32(); // Hardcoded 0. msg.options = GameOptionsData.Deserialize(reader.ReadBytesAndSize()); return(msg); }
public static RpcSyncSettings Deserialize(HazelBinaryReader reader) { var msg = new RpcSyncSettings(); var body = reader.ReadBytesToEnd(); msg.gameOptions = GameOptionsData.Deserialize(body); return(msg); }
public static void Deserialize(IMessageReader reader, GameOptionsData gameOptionsData) { gameOptionsData.Deserialize(reader.ReadBytesAndSize()); }
public static GameOptionsData Deserialize(MessageReader reader) { return(GameOptionsData.Deserialize(reader.ReadBytesAndSize())); }
public static void Deserialize(MessageReader reader, out GameOptionsData options) { reader.ReadPackedInt32(); // Hardcoded 0. options = GameOptionsData.Deserialize(reader.ReadBytesAndSize()); }
private void OnMessageReceived(MessageReader message, SendOption sendOption) { var flag = (RequestFlag)message.Tag; Logger.Verbose("[{0}] Server got {1}.", Id, flag); switch (flag) { case RequestFlag.HostGame: { // Read game settings. var gameInfoBytes = message.ReadBytesAndSize(); var gameInfo = GameOptionsData.Deserialize(gameInfoBytes); // Create game. var game = _gameManager.Create(this, gameInfo); if (game == null) { Connection.Send(new Message1DisconnectReason(DisconnectReason.ServerFull)); return; } // Code in the packet below will be used in JoinGame. using (var writer = MessageWriter.Get(SendOption.Reliable)) { writer.StartMessage(0); writer.Write(game.Code); writer.EndMessage(); Connection.Send(writer); } break; } case RequestFlag.JoinGame: { var gameCode = message.ReadInt32(); var unknown = message.ReadByte(); var game = _gameManager.Find(gameCode); if (game == null) { Connection.Send(new Message1DisconnectReason(DisconnectReason.GameMissing)); return; } game.HandleJoinGame(Player); break; } case RequestFlag.StartGame: { if (!IsPacketAllowed(message, true)) { return; } Player.Game.HandleStartGame(message); break; } // No idea how this flag is triggered. case RequestFlag.RemoveGame: break; case RequestFlag.RemovePlayer: { if (!IsPacketAllowed(message, true)) { return; } var playerId = message.ReadPackedInt32(); var reason = message.ReadByte(); Player.Game.HandleRemovePlayer(playerId, (DisconnectReason)reason); break; } case RequestFlag.GameData: case RequestFlag.GameDataTo: { if (!IsPacketAllowed(message, false)) { return; } // Broadcast packet to all other players. using (var writer = MessageWriter.Get(sendOption)) { if (flag == RequestFlag.GameDataTo) { var target = message.ReadPackedInt32(); writer.CopyFrom(message); Player.Game.SendTo(writer, target); } else { writer.CopyFrom(message); Player.Game.SendToAllExcept(writer, Player); } } break; } case RequestFlag.EndGame: { if (!IsPacketAllowed(message, true)) { return; } Player.Game.HandleEndGame(message); break; } case RequestFlag.AlterGame: { if (!IsPacketAllowed(message, true)) { return; } if (message.ReadByte() != (byte)AlterGameTags.ChangePrivacy) { return; } var isPublic = message.ReadByte() == 1; Player.Game.HandleAlterGame(message, Player, isPublic); break; } case RequestFlag.KickPlayer: { if (!IsPacketAllowed(message, true)) { return; } var playerId = message.ReadPackedInt32(); var isBan = message.ReadBoolean(); Player.Game.HandleKickPlayer(playerId, isBan); break; } default: Logger.Warning("Server received unknown flag {0}.", flag); break; } if (flag != RequestFlag.GameData && flag != RequestFlag.GameDataTo && flag != RequestFlag.EndGame && message.Position < message.Length) { Logger.Warning("Server did not consume all bytes from {0} ({1} < {2}).", flag, message.Position, message.Length); } }