예제 #1
0
        public override void OnOperationReturn(ClientConnection client, OperationResponse operationResponse)
        {
            Counters.ReceivedOperationResponse.Increment();
            WindowsCounters.ReceivedOperationResponse.Increment();

            switch (operationResponse.OperationCode)
            {
                case (byte)LoadBalancingEnums.OperationCode.Authenticate:
                    if (operationResponse.ReturnCode == 0)
                    {
                       client.AuthenticationTicket = (string)operationResponse[(byte)LoadBalancingEnums.ParameterCode.Secret];
                       this.TransitState(client);
                    }
                    else
                    {
                        log.WarnFormat("OnOperationReturn: Authenticate on Master failed: ReturnCode: {0} ({1}). Disconnecting...", operationResponse.ReturnCode, operationResponse.DebugMessage);
                        client.Peer.Disconnect();
                    }
                    break;

                default:
                    {
                        log.WarnFormat("OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                        break;
                    }
            }
        }
예제 #2
0
        public override void OnPeerStatusCallback(ClientConnection client, StatusCode returnCode)
        {
            switch (returnCode)
            {
                case StatusCode.DisconnectByServerUserLimit:
                case StatusCode.Disconnect:
                case StatusCode.DisconnectByServer:
                case StatusCode.DisconnectByServerLogic:
                case StatusCode.TimeoutDisconnect:
                    {
                        if (log.IsInfoEnabled)
                        {
                            log.InfoFormat("{0}", returnCode);
                        }

                        Counters.ConnectedClients.Decrement();
                        WindowsCounters.ConnectedClients.Decrement();

                        client.State = Disconnected.Instance;
                        client.OnDisconnected();
                        break;
                    }

                default:
                    {
                        log.WarnFormat("Connected: OnPeerStatusCallback: unexpected return code {0}", returnCode);
                        break;
                    }
            }
        }
예제 #3
0
        public override void EnterState(ClientConnection client)
        {
            this.OpAuthenticate(client);

            Counters.ReliableOperationsSent.Increment();
            WindowsCounters.ReliableOperationsSent.Increment();
        }
예제 #4
0
        public override void OnOperationReturn(ClientConnection client, OperationResponse operationResponse)
        {
            Counters.ReceivedOperationResponse.Increment();
            WindowsCounters.ReceivedOperationResponse.Increment();

            switch (operationResponse.OperationCode)
            {
                case OperationCode.JoinGame:
                    {
                        if (operationResponse.ReturnCode == 0)
                        {
                            this.TransitState(client);
                        }
                        else
                        {
                            log.WarnFormat("OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                            client.Stop();
                        }

                        break;
                    }

                default:
                    {
                        log.WarnFormat("OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                        break;
                    }
            }
        }
        public override void OnOperationReturn(ClientConnection client, OperationResponse operationResponse)
        {
            Counters.ReceivedOperationResponse.Increment();
            WindowsCounters.ReceivedOperationResponse.Increment();

            switch (operationResponse.OperationCode)
            {
                case (byte)LoadBalancingEnums.OperationCode.JoinGame:
                case (byte)LoadBalancingEnums.OperationCode.CreateGame:
                    if (operationResponse.ReturnCode == 0)
                    {
                        this.TransitState(client);
                    }
                    else
                    {
                        log.WarnFormat("OnOperationReturn: {0} failed: ReturnCode: {1} ({2}). Disconnecting...", Enum.GetName(typeof(LoadBalancingEnums.OperationCode), operationResponse.OperationCode), operationResponse.ReturnCode, operationResponse.DebugMessage);
                        client.Peer.Disconnect();
                    }
                    break;

                default:
                    {
                        log.WarnFormat("OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                        break;
                    }
            }
        }
        public override void EnterState(ClientConnection client)
        {
            client.Peer.Disconnect();

            Counters.ConnectedClients.Decrement();
            WindowsCounters.ConnectedClients.Decrement();
        }
예제 #7
0
        public override void EnterState(ClientConnection client)
        {
            // join:
            this.OpJoin(client);

            Counters.ReliableOperationsSent.Increment();
            WindowsCounters.ReliableOperationsSent.Increment();
        }
예제 #8
0
        /// <summary>
        /// The on operation return.
        /// </summary>
        /// <param name="client">
        /// The client.
        /// </param>
        /// <param name="operationResponse">
        /// The operation Response.
        /// </param>
        public override void OnOperationReturn(ClientConnection client, OperationResponse operationResponse)
        {
            Counters.ReceivedOperationResponse.Increment();
            WindowsCounters.ReceivedOperationResponse.Increment();

            switch (operationResponse.OperationCode)
            {
                case OperationCode.RaiseEvent:
                    {
                        if (operationResponse.ReturnCode != 0)
                        {
                            log.WarnFormat(
                                "OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                            client.Stop();
                        }

                        break;
                    }

                case OperationCode.Leave:
                    {
                        if (operationResponse.ReturnCode == 0)
                        {
                            if (log.IsDebugEnabled)
                            {
                                log.Debug("Stopped Playing");
                            }

                            client.State = Connected.Instance;
                            client.StopTimers();
                        }
                        else
                        {
                            log.WarnFormat(
                                "OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                            client.Stop();
                        }

                        break;
                    }

                case OperationCode.JoinGame:
                    {
                        // ignore: ReturnIncoming app returns 10x response
                        break;
                    }

                default:
                    {
                        log.WarnFormat(
                            "OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
                        break;
                    }
            }
        }
예제 #9
0
        public override void TransitState(ClientConnection client)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Connected");
            }

            client.State = Connected.Instance;
            Counters.ConnectedClients.Increment();
            WindowsCounters.ConnectedClients.Increment();

            client.State.EnterState(client);
        }
        public override void EnterState(ClientConnection client)
        {
            if (client.Number == 0)
               {
               this.OpCreateGame(client);
               }
               else
               {
               this.OpJoinGame(client);
               }

            Counters.ReliableOperationsSent.Increment();
            WindowsCounters.ReliableOperationsSent.Increment();
        }
        public override void EnterState(ClientConnection client)
        {
            if (client.Number == 0)
               {
               this.OpCreateGame(client);
               }
               else
               {
               // wait some time until transition took place..
               Thread.Sleep(500);
               this.OpJoinGame(client);
               }

            Counters.ReliableOperationsSent.Increment();
            WindowsCounters.ReliableOperationsSent.Increment();
        }
        public override void EnterState(ClientConnection client)
        {
            string gameServerAddress = ((LoadBalancingClientConnection)client).GameServerAddress;

            if (client.Peer.PeerState != PeerStateValue.Disconnected)
            {
                log.WarnFormat("Could not connect to GS: Peer is not disconencted ({0}). Stopping client...", client.Peer.PeerState);
                client.Peer.Disconnect();
            }
            else
            {
                if (client.Peer.Connect(gameServerAddress, "Game"))
                {
                    log.InfoFormat("Connecting to " + gameServerAddress);
                    this.OnUpdate(client);
                }
                else
                {
                    throw new InvalidOperationException("connect failed to " + gameServerAddress);
                }
            }
        }
예제 #13
0
        public override void OnPeerStatusCallback(ClientConnection client, StatusCode returnCode)
        {
            switch (returnCode)
            {
                // this is expected; client automatically sends a connect afterwards.
                case StatusCode.Connect:
                    {
                        client.OnConnected();
                        break;
                    }

                case StatusCode.EncryptionEstablished:
                    {
                        client.OnEncryptionEstablished();
                        break;
                    }

                case StatusCode.DisconnectByServerUserLimit:
                case StatusCode.Disconnect:
                case StatusCode.DisconnectByServer:
                case StatusCode.DisconnectByServerLogic:
                case StatusCode.TimeoutDisconnect:
                    {
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("{0}", returnCode);
                        }

                        client.OnDisconnected();
                        break;
                    }

                default:
                    {
                        log.WarnFormat("Waiting: OnPeerStatusCallback: unexpected return code {0}", returnCode);
                        break;
                    }
            }
        }
        /// <summary>
        /// The on peer status callback.
        /// </summary>
        /// <param name="client">
        /// The client.
        /// </param>
        /// <param name="returnCode">
        /// The return code.
        /// </param>
        public override void OnPeerStatusCallback(ClientConnection client, StatusCode returnCode)
        {
            switch (returnCode)
            {
                case StatusCode.Disconnect:
                    // this is expected! automatically reconnect to GS, don't call OnDisconnect.
                    if (log.IsDebugEnabled)
                    {
                        log.Debug("Disconnected from Master.");
                    }
                    this.TransitState(client);
                    break;

                case StatusCode.DisconnectByServerUserLimit:
                case StatusCode.DisconnectByServer:
                case StatusCode.DisconnectByServerLogic:
                case StatusCode.TimeoutDisconnect:
                    {
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("{0}", returnCode);
                        }

                        Counters.ConnectedClients.Decrement();
                        WindowsCounters.ConnectedClients.Decrement();

                        client.OnDisconnected();
                        break;
                    }

                default:
                    {
                        log.WarnFormat("Connected: OnPeerStatusCallback: unexpected return code {0}", returnCode);
                        break;
                    }
            }
        }
        public override void StopClient(ClientConnection client)
        {
            Counters.ConnectedClients.Decrement();
            WindowsCounters.ConnectedClients.Decrement();

            client.State = Disconnected.Instance;
        }
        public void OpJoinGame(ClientConnection client)
        {
            var data = new Dictionary<byte, object>
                {
                    { (byte)LoadBalancingEnums.ParameterCode.GameId, client.GameName },
                };

            client.Peer.OpCustom(
                (byte)LoadBalancingEnums.OperationCode.JoinGame, data, true, 0, Settings.UseEncryption);
        }
 /// <summary>
 /// The on update.
 /// </summary>
 /// <param name="client">
 /// The client.
 /// </param>
 public override void OnUpdate(ClientConnection client)
 {
     client.PeerService();
     client.EnqueueUpdate();
 }
예제 #18
0
 public virtual void StopClient(ClientConnection client)
 {
 }
예제 #19
0
 public virtual void OnPeerStatusCallback(ClientConnection client, StatusCode returnCode)
 {
     log.WarnFormat(
         "{1}: OnPeerStatusCallback - unexpected return code {0}", returnCode, client.GetHashCode());
 }
예제 #20
0
        private void OpAuthenticate(ClientConnection client)
        {
            var data = new Dictionary<byte, object>
                {
                    { (byte)LoadBalancingEnums.ParameterCode.ApplicationId, Settings.VirtualAppId }
                };

            client.Peer.OpCustom(
                (byte)LoadBalancingEnums.OperationCode.Authenticate, data, true, 0, Settings.UseEncryption);
        }
예제 #21
0
 private void OpJoin(ClientConnection client)
 {
     var wrap = new Dictionary<byte, object> { { ParameterCode.RoomName, client.GameName } };
     client.Peer.OpCustom(OperationCode.JoinGame, wrap, true, 0, Settings.UseEncryption);
 }
예제 #22
0
 public virtual void OnOperationReturn(ClientConnection client, OperationResponse operationResponse)
 {
     log.WarnFormat("OnOperationReturn: unexpected return code {0} of operation {1}", operationResponse.ReturnCode, operationResponse.OperationCode);
 }
        public override void TransitState(ClientConnection client)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Disconnecting from Master");
            }

            client.State = DisconnectingFromMaster.Instance;
            client.State.EnterState(client);
        }
        public void OpCreateGame(ClientConnection client)
        {
            log.Debug("Create game: " + client.GameName);
            var data = new Dictionary<byte, object>
                {
                    { (byte)LoadBalancingEnums.ParameterCode.GameId, client.GameName },
                };

            client.Peer.OpCustom(
                (byte)LoadBalancingEnums.OperationCode.CreateGame, data, true, 0, Settings.UseEncryption);
        }
        public override void TransitState(ClientConnection client)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Playing");
            }

            client.State = Playing.Instance;
            client.StartTimers();
        }
예제 #26
0
        public override void TransitState(ClientConnection client)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Authenticated on Master");
            }

            client.State = AuthenticatedOnMaster.Instance;
            client.State.EnterState(client);
        }
예제 #27
0
 public virtual void OnUpdate(ClientConnection client)
 {
 }
예제 #28
0
 public virtual void TransitState(ClientConnection client)
 {
 }
        /// <summary>
        /// The on peer status callback.
        /// </summary>
        /// <param name="client">
        /// The client.
        /// </param>
        /// <param name="returnCode">
        /// The return code.
        /// </param>
        public override void OnPeerStatusCallback(ClientConnection client, StatusCode returnCode)
        {
            switch (returnCode)
            {
                case StatusCode.DisconnectByServerUserLimit:
                case StatusCode.Disconnect:
                case StatusCode.DisconnectByServer:
                case StatusCode.DisconnectByServerLogic:
                case StatusCode.TimeoutDisconnect:
                    {
                        if (log.IsDebugEnabled)
                        {
                            log.DebugFormat("{0}", returnCode);
                        }

                        client.OnDisconnected();
                        break;
                    }

                default:
                    {
                        log.WarnFormat("Connected: OnPeerStatusCallback: unexpected return code {0}", returnCode);
                        break;
                    }
            }
        }
        public override void TransitState(ClientConnection client)
        {
            if (log.IsDebugEnabled)
            {
                log.Debug("Waiting for GameServer connect");
            }

            client.State = WaitingForGameServerConnect.Instance;
            client.State.EnterState(client);
        }