/// <summary>
        /// Unloads content.
        /// </summary>
        public override void UnloadContent()
        {
            if (thread.IsAlive)
            {
                try
                {
                    thread.Interrupt();
                }
                catch (Exception e)
                {
                    ServiceManager.Game.Console.DebugPrint(
                        "[ERROR] At LoadingScreenState#UnloadContent(): {0}",
                        e.Message);
                }
            }

            if (futureGame != null)
            {
                ServiceManager.Game.BackgroundMovie.Pause();
                ServiceManager.MP3Player.Stop();
                ServiceManager.MP3Player.PlayPlaylist();
                futureGame.OnGameFinished += new GamePlayState.GameFinishHandler(OnGameFinished);
            }

            currentMap = null;
            currentMapInstance = null;
            thread = null;
            server = null;
            form = null;
            futureGame = null;
            clientCallback = null;
            buffer = null;
        }
        /// <summary>
        /// Attempts to connect with the game server
        /// </summary>
        private void ConnectToGameServer()
        {
            if (ServiceManager.Theater == null)
            {
                ServiceManager.ConnectToTheater(server);

                ServiceManager.Theater.ClearRegisteredCallbacks();

                clientCallback = new GameCallback(null, buffer);
                ClockSync clockCallback = new ClockSync();

                ServiceManager.Theater.RegisterCallback(clientCallback);
                ServiceManager.Theater.RegisterCallback(clockCallback);

                string key = ServiceManager.Echelon.RequestJoinGameServer(server);
                if (!ServiceManager.Theater.JoinServer(key))
                {
                    throw new Exception("Cannot connect to the game server.");
                }
            }
            else
            {

                ServiceManager.Theater.ClearRegisteredCallbacks();

                clientCallback = new GameCallback(null, buffer);
                ClockSync clockCallback = new ClockSync();

                ServiceManager.Theater.RegisterCallback(clientCallback);
                ServiceManager.Theater.RegisterCallback(clockCallback);

            }

            ServiceManager.CurrentServer = server;
            currentMap = ServiceManager.Theater.GetCurrentMapName();
        }
        // False meaning, do not load/draw the background.
        public GamePlayState(GameCallback _callback, Map _map, EventBuffer _buffer)
            : base(false)
        {
            map = _map;
            //form = new InGameMenu(ServiceManager.Game.Manager);
            ServiceManager.Game.FormManager.RemoveWindow(
                ServiceManager.Game.FormManager.currentWindow);

            callback = _callback;
            buffer = _buffer;
            prevFrameScrollWheelValue = 0f;
        }