コード例 #1
0
        public void HandleUpdateGameServerEvent(UpdateServerEvent updateGameServer)
        {
            var loadLevelsCount = updateGameServer.LoadLevelsCount;

            if (loadLevelsCount == 0)
            {
                loadLevelsCount = 5;//old servers use only five levels
            }

            var previuosLoadLevel = this.SmartLoadLevel;
            var loadIndex         = updateGameServer.LoadIndex;
            var predictionData    = updateGameServer.PredictionData;

            this.UpdateLoadLevel(predictionData, loadLevelsCount, loadIndex);

            this.PeerCount = updateGameServer.PeerCount;

            if ((ServerState)updateGameServer.State != this.State)
            {
                this.SetServerState((ServerState)updateGameServer.State);
            }
            else if (previuosLoadLevel != this.SmartLoadLevel && this.State == ServerState.Normal)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("UpdateGameServer - from LoadLevel {0} to {1}, PeerCount {2}", previuosLoadLevel, this.LoadLevel, this.PeerCount);
                }

                if (!this.application.LoadBalancer.TryUpdateServer(this, this.SmartLoadLevel, this.LoadBalancerPriority))
                {
                    log.WarnFormat("Failed to update game server state for {0}", this.AddressInfo.TcpAddress);
                }
            }
        }
コード例 #2
0
        protected virtual void HandleUpdateGameServerEvent(IEventData eventData)
        {
            var updateGameServer = new UpdateServerEvent(this.Protocol, eventData);

            if (updateGameServer.IsValid == false)
            {
                string msg = updateGameServer.GetErrorMessage();
                log.ErrorFormat("UpdateServer contract error: {0}", msg);
                return;
            }

            var previuosLoadLevel = this.LoadLevel;

            this.LoadLevel = (FeedbackLevel)updateGameServer.LoadIndex;
            this.PeerCount = updateGameServer.PeerCount;

            if ((ServerState)updateGameServer.State != this.State)
            {
                this.SetServerState((ServerState)updateGameServer.State);
            }
            else if (previuosLoadLevel != this.LoadLevel && this.State == ServerState.Normal)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("UpdateGameServer - from LoadLevel {0} to {1}, PeerCount {2}", previuosLoadLevel, this.LoadLevel, this.PeerCount);
                }

                if (!this.application.LoadBalancer.TryUpdateServer(this, this.LoadLevel))
                {
                    log.WarnFormat("Failed to update game server state for {0}", this.TcpAddress);
                }
            }
        }
        private void UpdateServerState(FeedbackLevel workload, int peerCount, ServerState state)
        {
            Dictionary <byte, int[]> predictionData = null;

            if (this.loadStatsCollector != null)
            {
                this.loadStatsCollector.UpdatePrediction(peerCount, workload, out predictionData);
            }

            if (!this.IsRegistered)
            {
                return;
            }

            var contract = new UpdateServerEvent
            {
                LoadIndex       = (byte)workload,
                PeerCount       = peerCount,
                State           = (int)state,
                LoadLevelsCount = (int)FeedbackLevel.LEVELS_COUNT,
                PredictionData  = predictionData,
            };
            var eventData = new EventData((byte)ServerEventCode.UpdateServer, contract);

            this.SendEvent(eventData, new SendParameters());
        }
コード例 #4
0
        protected virtual void HandleUpdateGameServerEvent(IEventData eventData)
        {
            var updateGameServer = new UpdateServerEvent(this.Protocol, eventData);

            if (updateGameServer.IsValid == false)
            {
                string msg = updateGameServer.GetErrorMessage();
                log.ErrorFormat("UpdateServer contract error: {0}", msg);
                return;
            }

            var previuosLoadLevel = this.LoadLevel;

            this.LoadLevel = (FeedbackLevel)updateGameServer.LoadIndex;
            this.PeerCount = updateGameServer.PeerCount;

            if ((ServerState)updateGameServer.State != this.State)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("GameServer state changed for {0}: old={1}, new={2} ", this.TcpAddress, this.State, (ServerState)updateGameServer.State);
                }

                this.State = (ServerState)updateGameServer.State;
                if (this.State == ServerState.Normal)
                {
                    if (this.application.LoadBalancer.TryAddServer(this, this.LoadLevel) == false)
                    {
                        log.WarnFormat("Failed to add game server to load balancer: serverId={0}", this.ServerId);
                    }
                }
                else if (this.State == ServerState.Offline)
                {
                    ////this.RemoveGameServerPeerOnMaster();
                }
                else
                {
                    this.application.LoadBalancer.TryRemoveServer(this);
                }
            }
            else if (previuosLoadLevel != this.LoadLevel)
            {
                if (log.IsDebugEnabled)
                {
                    log.DebugFormat("UpdateGameServer - from LoadLevel {0} to {1}, PeerCount {2}", previuosLoadLevel, this.LoadLevel, this.PeerCount);
                }

                if (!this.application.LoadBalancer.TryUpdateServer(this, this.LoadLevel))
                {
                    log.WarnFormat("Failed to update game server state for {0}", this.TcpAddress);
                }
            }
        }
コード例 #5
0
        public void UpdateServerState(FeedbackLevel workload, int peerCount, ServerState state)
        {
            if (!this.IsRegistered)
            {
                return;
            }

            var contract = new UpdateServerEvent {
                LoadIndex = (byte)workload, PeerCount = peerCount, State = (int)state
            };
            var eventData = new EventData((byte)ServerEventCode.UpdateServer, contract);

            this.SendEvent(eventData, new SendParameters());
        }
コード例 #6
0
        private void HandleUpdateGameServerEvent(IEventData eventData)
        {
            var updateGameServer = new UpdateServerEvent(this.Protocol, eventData);

            if (updateGameServer.IsValid == false)
            {
                string msg = updateGameServer.GetErrorMessage();
                log.ErrorFormat("UpdateServer contract error: {0}", msg);
                return;
            }

            var ctx = this.Context;

            if (ctx != null)
            {
                ctx.HandleUpdateGameServerEvent(updateGameServer);
            }
        }