コード例 #1
0
        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);
コード例 #2
0
ファイル: ServerController.cs プロジェクト: zamixn/PongRoyale
        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);
        }