/// <summary> /// Creates a GameManager instance which holds each match. Called from the lobby queue /// </summary> /// <param name="gameInfo">Match configuration</param> /// <param name="teamInfo">players information (players + bots)</param> public static void CreateGameManager(LobbyGameInfo gameInfo, LobbyTeamInfo teamInfo, List <long> PlayerSessionTokens) { if (string.IsNullOrEmpty(gameInfo.GameConfig.RoomName)) { throw new EmptyRoomNameGameServerException(); } try { EvosServer server = new EvosServer(); server.Setup(gameInfo, teamInfo); ActiveServers.Add(gameInfo.GameConfig.RoomName, server); foreach (long sessionToken in PlayerSessionTokens) { ServersByPlayerSessionToken.Add(sessionToken, server); } server.OnStop += HandleOnServerStop; Log.Print(LogType.Debug, "Game Server Launched with name " + gameInfo.GameConfig.RoomName); } catch (System.Exception e) { throw new EvosException("Error Creating Game Manager", e); } }
/// <summary> Removes from memory the references to the server </summary> public static void HandleOnServerStop(EvosServer server) { ActiveServers.Remove(server.GetRoomName()); foreach (long sessionToken in ServersByPlayerSessionToken.Keys) { if (ServersByPlayerSessionToken[sessionToken] == server) { ServersByPlayerSessionToken.Remove(sessionToken); } } }