Exemplo n.º 1
0
        public ServerWorldState(ServerWorldDataContext serverWorldDataContext) : base()
        {
            dataContext = serverWorldDataContext; //new WorldWebDataContext(string.Format(@"http://{0}:{1}/", LegendServer.Properties.Settings.Default.DataServerAddress, LegendServer.Properties.Settings.Default.DataServerPort));
            int expectedMaxPlayers = 1000;        //server.Statistics.PlayerPeak;
            int mapZones           = 1;           //maps.Count;

            characters = new Dictionary <int, Character>(expectedMaxPlayers);
            maptoCharacterRelations = new List <int> [mapZones];
            mapToGroundItems        = new List <int> [mapZones];
            for (int i = 0; i < mapZones; i++)
            {
                maptoCharacterRelations[i] = new List <int>(expectedMaxPlayers);
                mapToGroundItems[i]        = new List <int>(expectedMaxPlayers);
            }
        }
Exemplo n.º 2
0
        public void Start()
        {
            //this.Status = ServerStatus.Starting;

            Assembly assembly = Assembly.GetEntryAssembly();
            Version  ver      = assembly.GetName().Version;

            ConsoleGameServer.WriteLine("LegendServer Version {0}.{1}, Build {2}.{3}", ver.Major, ver.Minor, ver.Build, ver.Revision);
            ConsoleGameServer.WriteLine("Running on .NET Framework Version {0}.{1}.{2}", Environment.Version.Major, Environment.Version.Minor, Environment.Version.Build);

            try
            {
                ConsoleGameServer.WriteLine("Starting Data Connection...");
                worldDataContext = new ServerWorldDataContext(string.Format(@"http://{0}:{1}/", LegendServer.Properties.Settings.Default.DataServerAddress, LegendServer.Properties.Settings.Default.DataServerPort));
                if (!worldDataContext.AuthServer(LegendServer.Properties.Settings.Default.DataServerUsername, LegendServer.Properties.Settings.Default.DataServerPassword))
                {
                    throw new Exception("Failed to auth with data server.");
                }
            }
            catch (Exception e)
            {
                ConsoleGameServer.WriteLine("Starting Data Connection failed, general Exception occured:");
                ConsoleGameServer.WriteLine(e.ToString());
                this.WaitOnKeyPress();
                return;
            }
            finally
            {
                ConsoleGameServer.WriteLine("Data Connection Successfull.");
            }

            try
            {
                ConsoleGameServer.WriteLine("Starting WorldServer...");
                worldState      = new ServerWorldState(worldDataContext);
                worldPump       = new WorldPump();
                worldPump.State = worldState;
                worldServerTask = Task.Factory.StartNew(() => worldPump.Start());
            }
            catch (Exception se)
            {
                ConsoleGameServer.WriteLine("Starting WorldServer failed:");
                ConsoleGameServer.WriteLine(se.ToString());
                this.WaitOnKeyPress();
                return;
            }
            finally
            {
                ConsoleGameServer.WriteLine("WorldServer running.");
                //this.Status = ServerStatus.Running;
            }


            try
            {
                ConsoleGameServer.WriteLine("Starting SocketServer...");
                socketServer = new SocketServer(this);
                //socketServer.Activity += SocketServer_Activity;
                socketServer.ProcessPacket += SocketServer_ProcessPacket;
                socketServerTask            = Task.Factory.StartNew(() => socketServer.Start());
            }
            catch (SocketException se)
            {
                ConsoleGameServer.WriteLine("Starting SocketServer failed:");
                ConsoleGameServer.WriteLine(se.ToString());
                this.WaitOnKeyPress();
                return;
            }
            finally
            {
                ConsoleGameServer.WriteLine("SocketServer running on port {0}.", SocketServer.Port);
                //this.Status = ServerStatus.Running;
            }

            var returnval = Task.WaitAny(worldServerTask, socketServerTask);

            worldPump.IsRunning = socketServer.IsRunning = false;
            //worldPump.State.SaveAndClose(); //Sould be located in DataContex. Game state should not be datalayer aware.
            socketServer.Close();
            //this.Status = ServerStatus.Halting;
        }