예제 #1
0
 /// <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);
     }
 }
예제 #2
0
        /// <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);
        }
예제 #3
0
        /// <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.");
        }
예제 #4
0
        /// <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;
            }
        }
예제 #5
0
        /// <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;
                }
            }
        }