public void Send(OperationRequest operationRequest)
 {
     try
     {
         byte[] data = Encoding.Default.GetBytes(JsonConvert.SerializeObject(operationRequest, new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto })+ "XXXXXXXX");
         tcpClient.GetStream().Write(data, 0, data.Length);
     }
     catch (Exception ex)
     {
         peerService.DebugReturn(DebugLevel.Error, ex.Message);
         peerService.DebugReturn(DebugLevel.Error, ex.StackTrace);
     }
 }
 private void CancleReadyTask(OperationRequest operationRequest)
 {
     user.ready = false;
     OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.Correct,
                 "",
                 new Dictionary<byte, object>()
             );
     SendResponse(response);
     RoomUpdateBroadcast(user.userGroup as Room);
 }
        private void CreateRoomTask(OperationRequest operationRequest)
        {
            if (operationRequest.Parameters.Count != 3)
            {
                OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.InvalidParameter,
                        "CreateRoomTask Parameter Error",
                        new Dictionary<byte, object>()
                    );
                SendResponse(response);
            }
            else
            {
                string roomName = (string)operationRequest.Parameters[(byte)CreateRoomParameterItem.RoomName];
                bool isEncrypted = (bool)operationRequest.Parameters[(byte)CreateRoomParameterItem.IsEncrypted];
                string password = (string)operationRequest.Parameters[(byte)CreateRoomParameterItem.Password];
                Room room;

                if (CreateRoom(roomName, isEncrypted, password, out room))
                {
                    Dictionary<byte, object> parameter = new Dictionary<byte, object>
                    {
                        { (byte)CreateRoomResponseItem.RoomDataString, JsonConvert.SerializeObject(room.Serialize(), new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }) }
                    };
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.Correct,
                        "",
                        parameter
                    );
                    SendResponse(response);
                }
                else
                {
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.InvalidOperation,
                        "建立房間失敗",
                        new Dictionary<byte, object>()
                    );
                    SendResponse(response);
                }
            }
        }
 private void BuyLandTask(OperationRequest operationRequest)
 {
     (user.playingGame.map.blocks[user.player.token.position] as LandBlock).land.Buy(user.player);
     if(user.player.money >= 0)
     {
         Dictionary<byte, object> parameter = new Dictionary<byte, object>
         {
             {(byte)BuyLandBroadcastParameterItem.PlayerName, user.player.username},
             {(byte)BuyLandBroadcastParameterItem.LandName, (user.playingGame.map.blocks[user.player.token.position] as LandBlock).land.name}
         };
         List<Peer> peers = new List<Peer>();
         foreach (ServerUser targetUser in (user.playingGame as ServerGame).users)
         {
             peers.Add(targetUser.Peer);
         }
         server.Broadcast(peers.ToArray(), BroadcastType.BuyLand, parameter);
     }
     if(user.playingGame != null)
         GameUpdateBroadcast(user.playingGame);
 }
Beispiel #5
0
        protected override void OnOperationRequest(OperationRequest operationRequest)
        {
            server.logger.Info(guid.ToString() + " : " + (OperationType)operationRequest.OperationCode);
            switch(operationRequest.OperationCode)
            {
                #region login
                case (byte)OperationType.Login:
                    {
                        LoginTask(operationRequest);
                    }
                    break;
                #endregion

                #region get lobby data
                case (byte)OperationType.GetLobbyData:
                    {
                        GetLobbyDataTask(operationRequest);
                    }
                    break;
                #endregion

                #region send message
                case (byte)OperationType.SendMessage:
                    {
                        SendMessageTask(operationRequest);
                    }
                    break;
                #endregion

                #region create room
                case (byte)OperationType.CreateRoom:
                    {
                        CreateRoomTask(operationRequest);
                    }
                    break;
                #endregion

                #region join room
                case (byte)OperationType.JoinRoom:
                    {
                        JoinRoomTask(operationRequest);
                    }
                    break;
                #endregion

                #region ready for game
                case (byte)OperationType.ReadyForGame:
                    {
                        ReadyForGameTask(operationRequest);
                    }
                    break;
                #endregion

                #region cancle ready
                case (byte)OperationType.CancleReady:
                    {
                        CancleReadyTask(operationRequest);
                    }
                    break;
                #endregion

                #region start game
                case (byte)OperationType.StartGame:
                    {
                        StartGameTask(operationRequest);
                    }
                    break;
                #endregion

                #region exit game
                case (byte)OperationType.ExitRoom:
                    {
                        ExitRoomTask(operationRequest);
                    }
                    break;
                #endregion

                #region get game data
                case (byte)OperationType.GetGameData:
                    {
                        GetGameDataTask(operationRequest);
                    }
                    break;
                #endregion

                #region roll dice
                case (byte)OperationType.RollDice:
                    {
                        RollDiceTask(operationRequest);
                    }
                    break;
                #endregion

                #region buy land
                case (byte)OperationType.BuyLand:
                    {
                        BuyLandTask(operationRequest);
                    }
                    break;
                #endregion

                #region upgrade land
                case (byte)OperationType.UpgradeLand:
                    {
                        UpgradeLandTask(operationRequest);
                    }
                    break;
                #endregion

                //#region get player data
                //case (byte)OperationType.GetPlayerData:
                //    {
                //        GetPlayerDataTask(operationRequest);
                //    }
                //    break;
                //#endregion

                #region give up
                case (byte)OperationType.GiveUp:
                    {
                        GiveUpTask(operationRequest);
                    }
                    break;
                #endregion

                #region end turn
                case (byte)OperationType.EndTurn:
                    {
                        EndTurnTask(operationRequest);
                    }
                    break;
                #endregion

                case (byte)OperationType.LogOut:
                    {
                        LogOutTask(operationRequest);
                    }
                    break;
            }
        }
 private void StartGameTask(OperationRequest operationRequest)
 {
     if(/*!(user.userGroup as Room).users.Any(x=>x.Value.ready) && */server.CreateGame(user.userGroup.users.Values.ToList()))
     {
         OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.Correct,
                 "",
                 new Dictionary<byte, object>()
             );
         SendResponse(response);
     }
     else
     {
         OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.PermissionDeny,
                 "開始遊戲錯誤",
                 new Dictionary<byte, object>()
             );
         SendResponse(response);
     }
 }
        private void SendMessageTask(OperationRequest operationRequest)
        {
            if (operationRequest.Parameters.Count != 1)
            {
                OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.InvalidParameter,
                        "SendMessageTask Parameter Error",
                        new Dictionary<byte, object>()
                    );
                SendResponse(response);
            }
            else
            {
                string message = (string)operationRequest.Parameters[(byte)SendMessageParameterItem.Message];

                if (SendMessageBroadcast(message))
                {
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.Correct,
                        "",
                        new Dictionary<byte, object>()
                    );
                    SendResponse(response);
                }
                else
                {
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.NotExist,
                        "Send target not exist",
                        new Dictionary<byte, object>()
                    );
                    SendResponse(response);
                }
            }
        }
 private void RollDiceTask(OperationRequest operationRequest)
 {
     int result = user.playingGame.RollDice();
     OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.Correct,
                 "",
                 new Dictionary<byte, object>()
             );
     SendResponse(response);
     Dictionary<byte, object> parameter = new Dictionary<byte, object>
     {
         {(byte)RollDiceResultParameterItem.DiceNumber, result}
     };
     List<Peer> peers = new List<Peer>();
     foreach (ServerUser targetUser in (user.playingGame as ServerGame).users)
     {
         peers.Add(targetUser.Peer);
     }
     server.Broadcast(peers.ToArray(), BroadcastType.RollDiceResult, parameter);
     user.playingGame.players[user.playingGame.turnCounter% user.playingGame.players.Count].Move(result);
     GameUpdateBroadcast(user.playingGame);
 }
 private void ExitRoomTask(OperationRequest operationRequest)
 {
     ExitRoom();
     OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.Correct,
                 "",
                 new Dictionary<byte, object>()
             );
     SendResponse(response);
 }
 private void LoginTask(OperationRequest operationRequest)
 {
     if (operationRequest.Parameters.Count != 1)
     {
         OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.InvalidParameter,
                 "LoginTask Parameter Error",
                 new Dictionary<byte, object>()
             );
         server.logger.Info(string.Format("{0} LoginTask Parameter Error", guid));
         SendResponse(response);
     }
     else
     {
         string userName = (string)operationRequest.Parameters[(byte)LoginParameterItem.UserName];
         if(server.UserOnline(user = new ServerUser(userName, false, this)))
         {
             LobbyUpdateBroadcast(server.lobby);
             Dictionary<byte, object> parameter = new Dictionary<byte, object>
             {
                 { (byte)LoginResponseItem.UserName, user.userName }
             };
             OperationResponse response = new OperationResponse
             (
                 operationRequest.OperationCode,
                 (byte)ReturnCode.Correct,
                 "",
                 parameter
             );
             server.logger.Info(string.Format("{0} 登入成功", user.userName));
             SendResponse(response);
         }
         else
         {
             OperationResponse response = new OperationResponse
                 (
                     operationRequest.OperationCode,
                     (byte)ReturnCode.InvalidOperation,
                     "此帳號已經登入!",
                     new Dictionary<byte, object>()
                 );
             server.logger.Info(string.Format("{0} 此帳號已經登入", guid));
             SendResponse(response);
         }
     }
 }
        private void JoinRoomTask(OperationRequest operationRequest)
        {
            if (operationRequest.Parameters.Count != 2)
            {
                OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.InvalidParameter,
                        "JoinRoomTask Parameter Error",
                        new Dictionary<byte, object>()
                    );
                SendResponse(response);
            }
            else
            {
                int roomID = (int)(long)operationRequest.Parameters[(byte)JoinRoomParameterItem.RoomID];
                string password = (string)operationRequest.Parameters[(byte)JoinRoomParameterItem.Password];
                Room room;

                if (JoinRoom(roomID, password, out room))
                {
                    Dictionary<byte, object> parameter = new Dictionary<byte, object>
                    {
                        { (byte)JoinRoomResponseItem.RoomDataString, JsonConvert.SerializeObject(room?.Serialize(), new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }) }
                    };
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.Correct,
                        "",
                        parameter
                    );
                    SendResponse(response);
                }
                else
                {
                    OperationResponse response = new OperationResponse
                    (
                        operationRequest.OperationCode,
                        (byte)ReturnCode.InvalidOperation,
                        "加入房間失敗",
                        new Dictionary<byte, object>()
                    );
                    SendResponse(response);
                }
            }
        }
 private void GiveUpTask(OperationRequest operationRequest)
 {
 }
 private void GetLobbyDataTask(OperationRequest operationRequest)
 {
     Dictionary<byte, object> parameter = new Dictionary<byte, object>
     {
         { (byte)GetLobbyDataResponseItem.LobbyDataString, JsonConvert.SerializeObject(server.lobby.Serialize(), new JsonSerializerSettings { TypeNameHandling = TypeNameHandling.Auto }) }
     };
     OperationResponse response = new OperationResponse
                 (
                     operationRequest.OperationCode,
                     (byte)ReturnCode.Correct,
                     "",
                     parameter
                 );
     server.logger.Info(string.Format("{0} 取得了大廳資料", user.userName));
     SendResponse(response);
 }
 private void GetGameDataTask(OperationRequest operationRequest)
 {
 }
 private void LogOutTask(OperationRequest operationRequest)
 {
     server.UserOffline(user);
     LobbyUpdateBroadcast(server.lobby);
     OperationResponse response = new OperationResponse
            (
                operationRequest.OperationCode,
                (byte)ReturnCode.Correct,
                "",
                new Dictionary<byte, object>()
            );
     server.logger.Info(string.Format("{0} 登出成功", user.userName));
     SendResponse(response);
 }
 protected abstract void OnOperationRequest(OperationRequest operationRequest);
 private void EndTurnTask(OperationRequest operationRequest)
 {
     user.playingGame.EndTurn();
     GameUpdateBroadcast(user.playingGame);
 }