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); } } }
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()); }
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); } } }
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()); }
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); } }