public void GeneratePostData_Base_NullProperty_Test()
        {
            var dto = new ClientRequestBase {
                Method = null
            };

            Assert.Throws <ArgumentNullException>(() => dto.GeneratePostData(_apiKey, _secretKey));
        }
Esempio n. 2
0
    public void OnBeginMatch()
    {
        ClientRequestBase req = null;

        req = new MatchRequest(ClientID, SelectBuildManager.Instance.CurrentSelectedBuildInfo.BuildID);
        SendMessage(req);
        ClientState = ClientStates.Matching;
    }
Esempio n. 3
0
 public virtual void ReceiveMessage(ClientRequestBase request)
 {
     if (isClosed)
     {
         return;
     }
     ReceiveRequestsQueue.Enqueue(request);
     Response();
 }
Esempio n. 4
0
 public void Send() // 每帧调用
 {
     if (SendRequestsQueue.Count > 0)
     {
         ClientRequestBase request = SendRequestsQueue.Dequeue();
         Thread            thread  = new Thread(SendRequest);
         thread.IsBackground = true;
         thread.Start(request);
     }
 }
        public void GeneratePostData_Base_Test()
        {
            var dto = new ClientRequestBase
            {
                Method    = Methods.delete_tag,
                Expires   = DateTime.Now,
                Timestamp = DateTime.Now,
                Version   = 1
            };

            string data = dto.GeneratePostData(_apiKey, _secretKey);

            Assert.IsNotNullOrEmpty(data);
        }
Esempio n. 6
0
    public void Send(object obj)
    {
        ClientRequestBase request = (ClientRequestBase)obj;

        if (ServerSocket == null)
        {
            ClientLog.Instance.PrintError("[C]Server socket is null");
            return;
        }

        if (!ServerSocket.Connected)
        {
            ClientLog.Instance.PrintError("[C]Not connected to server socket");
            Closed();
            return;
        }

        try
        {
            byte[] data = SerializeRequest(request);

            IAsyncResult asyncSend = ServerSocket.BeginSend(data, 0, data.Length, SocketFlags.None, new AsyncCallback(SendCallback), ServerSocket);
            bool         success   = asyncSend.AsyncWaitHandle.WaitOne(5000, true);
            if (!success)
            {
                Closed();
            }

            string log = "SendToServer: <" + request.GetProtocol() + "> " + request.DeserializeLog();
            ClientLog.Instance.Print(log);
        }
        catch (Exception e)
        {
            ClientLog.Instance.PrintError("[C]Send error : " + e.ToString());
            RoundManager.Instance.StopGame();
        }
    }
Esempio n. 7
0
    /// <summary>
    /// Dispose of all request received before game start
    /// ServerGameManager will dispose of others during games.
    /// </summary>
    public void Response(ClientRequestBase r)
    {
        if (isClosed)
        {
            return;
        }
        if (BattleGameManager != null && BattleGameManager.IsStopped)
        {
            BattleGameManager.StopGame();
        }

        if (ClientState == ProxyBase.ClientStates.Playing)
        {
            if (BattleGameManager == null)
            {
                return;
            }

            try
            {
                if (BattleGameManager.CurrentPlayer == BattleGameManager.GetPlayerByClientId(ClientID))
                {
                    switch (r)
                    {
                    case WinDirectlyRequest req:
                        BattleGameManager?.OnWinDirectlyRequest(req, MyPlayer);
                        break;

                    case EndRoundRequest req:
                        BattleGameManager?.OnEndRoundRequest(req);
                        break;

                    case SummonMechRequest req:
                        BattleGameManager?.OnClientSummonMechRequest(req);
                        break;

                    case EquipWeaponRequest req:
                        BattleGameManager?.OnClientEquipWeaponRequest(req);
                        break;

                    case EquipShieldRequest req:
                        BattleGameManager?.OnClientEquipShieldRequest(req);
                        break;

                    case EquipPackRequest req:
                        BattleGameManager?.OnClientEquipPackRequest(req);
                        break;

                    case EquipMARequest req:
                        BattleGameManager?.OnClientEquipMARequest(req);
                        break;

                    case UseSpellCardRequest req:
                        BattleGameManager?.OnClientUseSpellCardRequest(req);
                        break;

                    case UseSpellCardToMechRequest req:
                        BattleGameManager?.OnClientUseSpellCardToMechRequest(req);
                        break;

                    case UseSpellCardToShipRequest req:
                        BattleGameManager?.OnClientUseSpellCardToShipRequest(req);
                        break;

                    case UseSpellCardToEquipRequest req:
                        BattleGameManager?.OnClientUseSpellCardToEquipRequest(req);
                        break;

                    case LeaveGameRequest req:     //quit game normally
                        BattleGameManager?.OnLeaveGameRequest(req);
                        break;

                    case MechAttackMechRequest req:
                        BattleGameManager?.OnClientMechAttackMechRequest(req);
                        break;

                    case MechAttackShipRequest req:
                        BattleGameManager?.OnClientMechAttackShipRequest(req);
                        break;
                    }
                }
            }
            catch (Exception e)
            {
                DebugLog.PrintError(e.ToString());

                if (BattleGameManager != null && !BattleGameManager.IsStopped)
                {
                    BattleGameManager.OnEndGameByServerError();
                    BattleGameManager.StopGame();
                }

                BattleGameManager = null;
            }
        }
    }
Esempio n. 8
0
 private string Execute(ClientRequestBase request)
 {
     return(Execute(XmlUtilHelper.SerializedEntity(request)));
 }
Esempio n. 9
0
 private void PrepareRequest(ClientRequestBase request)
 {
     request.UserCredential     = new ApiCredentialInfo();
     request.UserCredential.Key = configuration.ApiKey;
     request.UserCredential.Pwd = configuration.ApiSecret;
 }
Esempio n. 10
0
 private void SendMessageToLocalGameProxy(ClientRequestBase request)
 {
     SendRequest(request);
 }
Esempio n. 11
0
 private void SendMessageToServer(ClientRequestBase request)
 {
     SendRequestsQueue.Enqueue(request);
 }
Esempio n. 12
0
 public void ReceiveMessage(ClientRequestBase request)
 {
 }
Esempio n. 13
0
    /// <summary>
    /// Dispose of all request received before game start
    /// ServerGameManager will dispose of others during games.
    /// </summary>
    protected override void Response()
    {
        while (ReceiveRequestsQueue.Count > 0)
        {
            ClientRequestBase request = ReceiveRequestsQueue.Dequeue();
            // Server 端特例覆写GameProxy
            switch (request)
            {
            case RegisterRequest r:     //for online mode
            {
                ServerLog.Instance.PrintClientStates("Client " + ClientID + " state: " + ClientState);
                if (ClientState != ClientStates.GetId)
                {
                    Server.SV.SGMM.RemoveGame(this);
                    ClientState = ClientStates.GetId;
                }

                bool suc = UserDatabase.Instance.AddUser(r.username, r.password);
                RegisterResultRequest response = new RegisterResultRequest(suc);
                SendMessage(response);
                break;
            }

            case LoginRequest r:
            {
                ServerLog.Instance.PrintClientStates("Client " + ClientID + " state: " + ClientState);

                if (ClientState != ClientStates.GetId)
                {
                    Server.SV.SGMM.RemoveGame(this);
                    ClientState = ClientStates.GetId;
                }

                if (ClientState == ClientStates.GetId)
                {
                    LoginResultRequest response;
                    string             password = UserDatabase.Instance.GetUserPasswordByUsername(r.username);
                    if (password != null)
                    {
                        if (password == r.password)
                        {
                            bool suc = UserDatabase.Instance.AddLoginUser(ClientID, r.username);
                            if (suc)
                            {
                                response = new LoginResultRequest(r.username, LoginResultRequest.StateCodes.Success);
                                SendMessage(response);
                                ClientState = ClientStates.Login;
                                UserName    = r.username;

                                if (BuildStoryDatabase.Instance.PlayerStoryStates.ContainsKey(UserName))
                                {
                                    Story story = BuildStoryDatabase.Instance.PlayerStoryStates[UserName];
                                    ClientBuildInfosRequest request1 = new ClientBuildInfosRequest(BuildStoryDatabase.Instance.GetPlayerBuilds(UserName), GamePlaySettings.OnlineGamePlaySettings, true, story);
                                    SendMessage(request1);
                                }
                                else
                                {
                                    ClientBuildInfosRequest request1 = new ClientBuildInfosRequest(BuildStoryDatabase.Instance.GetPlayerBuilds(UserName), GamePlaySettings.OnlineGamePlaySettings);
                                    SendMessage(request1);
                                }
                            }
                            else
                            {
                                response = new LoginResultRequest(r.username, LoginResultRequest.StateCodes.AlreadyOnline);
                                SendMessage(response);
                            }
                        }
                        else
                        {
                            response = new LoginResultRequest(r.username, LoginResultRequest.StateCodes.WrongPassword);
                            SendMessage(response);
                        }
                    }
                    else
                    {
                        response = new LoginResultRequest(r.username, LoginResultRequest.StateCodes.UnexistedUser);
                        SendMessage(response);
                    }
                }

                break;
            }

            case LogoutRequest r:
            {
                ServerLog.Instance.PrintClientStates("Client " + ClientID + " state: " + ClientState);
                LogoutResultRequest response;
                if (ClientState != ClientStates.GetId)
                {
                    Server.SV.SGMM.RemoveGame(this);
                    bool suc = UserDatabase.Instance.RemoveLoginUser(ClientID);
                    ClientState = ClientStates.GetId;
                    response    = new LogoutResultRequest(r.username, suc);
                }
                else
                {
                    response = new LogoutResultRequest(r.username, false);
                }

                SendMessage(response);
                break;
            }

            case MatchRequest r:

                ServerLog.Instance.PrintClientStates("Client " + ClientID + " state: " + ClientState);

                if (ClientState == ClientStates.Playing)
                {
                    Server.SV.SGMM.RemoveGame(this);
                    ClientState = ClientStates.Login;
                }

                if (ClientState == ClientStates.Login)
                {
                    GameProxy.BattleProxy.BuildInfo = BuildStoryDatabase.Instance.GetBuildInfoByID(r.buildID);
                    ClientState = ClientStates.Matching;
                    Server.SV.SGMM.OnClientMatchGames(this);
                }

                break;

            case CancelMatchRequest _:

                ServerLog.Instance.PrintClientStates("Client " + ClientID + " state: " + ClientState);

                if (ClientState == ClientStates.Playing)
                {
                    Server.SV.SGMM.RemoveGame(this);
                    ClientState = ClientStates.Login;
                }

                if (ClientState == ClientStates.Matching)
                {
                    ClientState = ClientStates.Login;
                    Server.SV.SGMM.OnClientCancelMatch(this);
                }

                break;

            default:
                GameProxy.ReceiveRequest(request);
                break;
            }
        }
    }