public static void OnStartServerSessionMessageReceived(StartServerSessionMessage message) { if (GameModeClusterManager.m_sessionClusters.ContainsKey(message.SessionId)) { throw new Exception("GameModeClusterManager.onStartSessionMessageReceived: session already started!"); } GameModeCluster gameModeCluster = GameModeClusterManager.GetFastestCluster(); if (gameModeCluster != null) { GameModeClusterManager.m_sessionClusters.Add(message.SessionId, gameModeCluster); gameModeCluster.SendMessage(message); } else { if (message.BindRequestMessage != null) { ServerRequestManager.SendResponse(new BindServerSocketResponseMessage(), message.BindRequestMessage); } ServerMessageManager.SendMessage(new StartServerSessionFailedMessage { SessionId = message.SessionId }, message.Sender); } }
private static GameModeCluster GetFastestCluster() { GameModeCluster fastestCluster = null; for (int i = 0, fastestClusterTime = 0x7FFFFFFF; i < GameModeClusterManager.m_clusters.Length; i++) { GameModeCluster instance = GameModeClusterManager.m_clusters[i]; long executeTime = instance.GetAverageMessageProcessSpeed(); if (executeTime <= 2000L && (fastestCluster == null || executeTime < fastestClusterTime)) { fastestCluster = instance; fastestClusterTime = (int)executeTime; } } return(fastestCluster); }