/// <summary> /// Connects the AllsrvConnector's events to the core's handlers /// </summary> public static void Initialize(AllsrvConnector connector) { _connector = connector; if (connector != null) { connector.AdminPagedEvent += new AdminPagedAGCEventDelegate(AdminPagedAGCEventHandler); connector.ChatMessageEvent += new ChatMessageAGCEventDelegate(ChatMessageAGCEventHandler); connector.GameCreatedEvent += new GameCreatedAGCEventDelegate(GameCreatedAGCEventHandler); connector.GameDestroyedEvent += new GameDestroyedAGCEventDelegate(GameDestroyedAGCEventHandler); connector.GameEndedEvent += new GameEndedAGCEventDelegate(GameEndedAGCEventHandler); connector.GameOverEvent += new GameOverAGCEventDelegate(GameOverAGCEventHandler); connector.GameStartedEvent += new GameStartedAGCEventDelegate(GameStartedAGCEventHandler); connector.LobbyConnectedEvent += new LobbyConnectedAGCEventDelegate(LobbyConnectedAGCEventHandler); connector.LobbyDisconnectedEvent += new LobbyDisconnectedAGCEventDelegate(LobbyDisconnectedAGCEventHandler); connector.LobbyDisconnectingEvent += new LobbyDisconnectingAGCEventDelegate(LobbyDisconnectingAGCEventHandler); connector.LobbyLostEvent += new LobbyLostAGCEventDelegate(LobbyLostAGCEventHandler); connector.PlayerDroppedEvent += new PlayerDroppedAGCEventDelegate(PlayerDroppedAGCEventHandler); connector.PlayerJoinedTeamEvent += new PlayerJoinedTeamAGCEventDelegate(PlayerJoinedTeamAGCEventHandler); connector.PlayerLeftTeamEvent += new PlayerLeftTeamAGCEventDelegate(PlayerLeftTeamAGCEventHandler); connector.PlayerLoggedInEvent += new PlayerLoggedInAGCEventDelegate(PlayerLoggedInAGCEventHandler); connector.PlayerLoggedOutEvent += new PlayerLoggedOutAGCEventDelegate(PlayerLoggedOutAGCEventHandler); connector.ShipKilledEvent += new ShipKilledAGCEventDelegate(ShipKilledAGCEventHandler); connector.StationCapturedEvent += new StationCapturedAGCEventDelegate(StationCapturedAGCEventHandler); connector.StationCreatedEvent += new StationCreatedAGCEventDelegate(StationCreatedAGCEventHandler); connector.StationDestroyedEvent += new StationDestroyedAGCEventDelegate(StationDestroyedAGCEventHandler); connector.TeamInfoChangedEvent += new TeamInfoChangedAGCEventDelegate(TeamInfoChangedAGCEventHandler); connector.TerminateEvent += new TerminateAGCEventDelegate(TerminateAGCEventHandler); } }
/// <summary> /// Connects to Allsrv and hooks into events /// </summary> /// <returns>The connector to Allsrv</returns> public static AllsrvConnector Connect() { if (_connector == null) { _connector = new AllsrvConnector(); } return(_connector); }
/// <summary> /// Initializes the GameServer and reads the games from the server /// </summary> public static void Initialize() { _players = new Players(_server); // Start Allsrv if not already started if (!AllsrvConnector.IsRunning()) { AllsrvConnector.StartAllsrv(); } // Connect to Allsrv and retrieve the server object _connector = AllsrvConnector.Connect(); _server = _connector.Session.Server; TagTrace.WriteLine(TraceLevel.Info, "Connection to Allsrv established."); // Load Player list TagTrace.WriteLine(TraceLevel.Verbose, "Retrieving players..."); _players.Initialize(_server); TagTrace.WriteLine(TraceLevel.Info, "Playerlist loaded. {0} players online.", _players.Count); // Read the games TagTrace.WriteLine(TraceLevel.Verbose, "Reading Games..."); _games = new Games(); for (int i = 0; i < _server.Games.Count; i++) { object Index = (object)i; IAGCGame TempGame = _server.Games.get_Item(ref Index); Game NewGame = new Game(TempGame); _games.Add(NewGame); // Initialize game if in progress if (NewGame.InProgress) { // Get StartTime DateTime StartTime = DateTime.FromOADate(TempGame.GameParameters.TimeStart); // Initialize game NewGame.Start(StartTime); // Log event NewGame.GameData.LogGameStarted(StartTime); } } TagTrace.WriteLine(TraceLevel.Info, "Games read. {0} games online.", _games.Count); // Connect event handlers TagTrace.WriteLine(TraceLevel.Verbose, "Hooking up events..."); AGCEventHandler.Initialize(_connector); TagTrace.WriteLine(TraceLevel.Verbose, "Events connected."); }
/// <summary> /// Disconnects from Allsrv and releases any resources in use. /// </summary> public static void Disconnect() { if (_connector != null) { _connector.Disconnect(); _connector = null; } _server = null; if (_games != null) { _games.Clear(); _games = null; } if (_players != null) { _players.Clear(); _players = null; } }
/// <summary> /// Disconnects from Allsrv /// </summary> public void Disconnect() { if (_cookie != 0) { _connector = null; try { _session.DeactivateAllEvents(); } catch (Exception) { // An exception will be thrown if the session has already been detached // Ignore it! TagTrace.WriteLine(TraceLevel.Verbose, "Error while attempting to detach session. Session is already destroyed."); } finally { _session = null; } try { _icp.Unadvise(_cookie); } catch (Exception e) { // Ignore exceptions if we're already detached TagTrace.WriteLine(TraceLevel.Verbose, "Error while disposing session. Session is already disposed.", e.Message); } finally { _cookie = 0; } } }