public ServerUsersStorage(SqliteStorageManager storage, ServerWebApi webApi)
        {
            if (storage == null)
            {
                throw new ArgumentNullException("storage");
            }
            if (webApi == null)
            {
                throw new ArgumentNullException("webApi");
            }

            DefaultRole = UserRole.Guest;

            _storage = storage;
            _webApi  = webApi;
        }
Beispiel #2
0
        static void Main(string[] args)
        {
            AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;

            logger.Info("Utopia Realms game server v{1} Protocol: v{0}", ServerConnection.ProtocolVersion, Assembly.GetExecutingAssembly().GetName().Version);

            DllLoadHelper.LoadUmnanagedLibrary("sqlite3.dll");

            var path = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "main.realm");

            if (!File.Exists(path))
            {
                if (args.Length == 0)
                {
                    logger.Fatal("Could not find the realm file. Specify realm configuration file path.");
                    return;
                }

                path = args[0];

                if (!File.Exists(path))
                {
                    logger.Fatal("Could not find the realm file at " + path);
                    return;
                }
            }

            _serverFactory = new EntityFactory();

            EntityFactory.InitializeProtobufInheritanceHierarchy();

            WorldConfiguration conf;

            try
            {
                conf = WorldConfiguration.LoadFromFile(path);
                _serverFactory.Config = conf;
                logger.Info("Realm file {0} loaded", path);
            }
            catch (Exception ex)
            {
                logger.Fatal("Exception when trying to load configuration:\n" + ex.Message);
                return;
            }

            System.Net.ServicePointManager.Expect100Continue = false;

            var    configFileName = "server.config";
            var    port           = 0;
            string desc           = null;

            for (int i = 0; i < args.Length; i++)
            {
                var argument = args[i];
                if (argument == "-conf" && args.Length > i + 1)
                {
                    configFileName = args[i + 1];
                }
                if (argument == "-port" && args.Length > i + 1)
                {
                    port = int.Parse(args[i + 1]);
                }
                if (argument == "-desc" && args.Length > i + 1)
                {
                    desc = args[i + 1];
                }
            }

            _settingsManager = new XmlSettingsManager <ServerSettings>(@"Server\" + configFileName);
            _settingsManager.Load();


            if (port != 0 && _settingsManager.Settings.ServerPort != port)
            {
                _settingsManager.Settings.ServerPort = port;
                _settingsManager.Save();
            }

            if (string.IsNullOrEmpty(_settingsManager.Settings.Seed))
            {
                Console.WriteLine();
                Console.WriteLine("Please enter the seed:");
                Console.Write("> ");
                _settingsManager.Settings.Seed = Console.ReadLine();
                _settingsManager.Save();
            }

            if (string.IsNullOrEmpty(_settingsManager.Settings.ServerName) || _settingsManager.Settings.ServerName == "unnamed server")
            {
                Console.WriteLine();
                Console.WriteLine("Please enter the name of the server:");
                Console.Write("> ");
                _settingsManager.Settings.ServerName = Console.ReadLine();
                _settingsManager.Save();
            }

            if (string.IsNullOrEmpty(_settingsManager.Settings.ServerDescription))
            {
                if (desc != null)
                {
                    _settingsManager.Settings.ServerDescription = desc;
                }
                else
                {
                    Console.WriteLine();
                    Console.WriteLine("Please enter the server description:");
                    Console.Write("> ");
                    _settingsManager.Settings.ServerDescription = Console.ReadLine();
                    _settingsManager.Save();
                }
            }

            var wp = new WorldParameters
            {
                WorldName     = "Utopia",
                SeedName      = _settingsManager.Settings.Seed,
                Configuration = conf
            };

            IocBind(wp);

            _serverWebApi = new ServerWebApi();
            _server       = new ServerCore(
                _settingsManager,
                _worldGenerator,
                new ServerUsersStorage(_sqLiteStorageManager, _serverWebApi),
                _sqLiteStorageManager,
                _sqLiteStorageManager,
                _sqLiteStorageManager,
                _serverFactory,
                wp
                );

            _serverFactory.LandscapeManager     = _server.LandscapeManager;
            _serverFactory.DynamicEntityManager = _server.AreaManager;
            _serverFactory.GlobalStateManager   = _server.GlobalStateManager;
            _serverFactory.ScheduleManager      = _server.Scheduler;
            _serverFactory.ServerSide           = true;

            _gameplay = new ServerGameplayProvider(_server, conf);

            _server.ConnectionManager.Listen();
            _server.LoginManager.PlayerEntityNeeded += LoginManagerPlayerEntityNeeded;
            _server.LoginManager.PlayerLogged       += LoginManager_PlayerLogged;

            _server.UsersStorage.DefaultRole = _server.CustomStorage.GetVariable("DefaultRole", UserRole.Guest);

            // send alive message each 5 minutes
            _reportAliveTimer = new Timer(CommitServerInfo, null, 0, 1000 * 60 * 5);

            _server.EntityManager.LoadNpcs();

            while (Console.ReadLine() != "exit")
            {
                Console.WriteLine("Type 'exit' to quit");
            }

            _server.Dispose();
        }