public void EncodeGameStartMessageTest() { var playerIds = new byte[] { 0, 1, 2, 3 }; var paddleTypes = new byte[] { 4, 5, 6, 7 }; byte ballType = 2; byte roomMasterId = 3; var data = Converter.EncodeGameStartMessage(playerIds, paddleTypes, ballType, roomMasterId); Converter.DecodeGameStartMessage(data, out byte[] pIds, out PaddleType[] pTypes, out BallType bType, out byte rmId);
private NetworkMessage GetResponse(ServerSidePlayer sender, NetworkMessage networkMessage) { switch (networkMessage.Type) { case NetworkMessage.MessageType.Chat: case NetworkMessage.MessageType.PlayerSync: case NetworkMessage.MessageType.BallSync: case NetworkMessage.MessageType.GameEnd: case NetworkMessage.MessageType.ObstacleSpawned: case NetworkMessage.MessageType.PowerupSpawned: case NetworkMessage.MessageType.BallPoweredUp: case NetworkMessage.MessageType.PaddlePowerUp: return(networkMessage.ShallowClone()); case NetworkMessage.MessageType.GameStart: { NetworkMessage message = networkMessage.DeepClone(); byte[] playerIds = Players.Select(p => p.Id).ToArray(); byte[] paddleTypes = RandomNumber.GetArray(playerIds.Length, () => RandomNumber.NextByte((byte)PaddleType.Normal, (byte)(PaddleType.Short + 1))); byte ballType = (byte)BallType.Normal; byte[] byteArray = Converter.EncodeGameStartMessage(playerIds, paddleTypes, ballType, RoomMaster.Id); message.ByteContents = byteArray; return(message); } case NetworkMessage.MessageType.RoundReset: { NetworkMessage message = networkMessage.DeepClone(); Converter.DecodeRoundOverData(networkMessage.ByteContents, out BallType[] oldBalls, out byte[] oldIds, out byte[] playerIDs, out byte[] playerLifes); int ballCount = SharedUtilities.Clamp( playerIDs.Length + RandomNumber.NextInt(-1, 2), 1, playerIDs.Length + 1); BallType[] newBallTypes = new BallType[ballCount]; byte[] newIds = new byte[newBallTypes.Length]; for (int i = 0; i < newBallTypes.Length; i++) { newBallTypes[i] = i == 1 ? BallType.Normal : (BallType)RandomNumber.NextByte((byte)BallType.Normal, (byte)(BallType.Deadly + 1)); newIds[i] = (byte)i; } byte[] byteArray = Converter.EncodeRoundOverData(newBallTypes, newIds, playerIDs, playerLifes); message.ByteContents = byteArray; return(message); } default: Debug.WriteLine($"Exception: could not get repsonse to message of type {networkMessage.Type}"); break; } return(null); }