예제 #1
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerCleaner"/> class.
        /// </summary>
        /// <param name="server">The <see cref="Server"/> instance.</param>
        /// <exception cref="ArgumentNullException"><paramref name="server"/> is null.</exception>
        public ServerCleaner(Server server)
        {
            if (server == null)
                throw new ArgumentNullException("server");

            _server = server;
        }
예제 #2
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerPacketHandler"/> class.
        /// </summary>
        /// <param name="server">The server.</param>
        /// <exception cref="ArgumentNullException"><paramref name="server" /> is <c>null</c>.</exception>
        public ServerPacketHandler(Server server)
        {
            if (server == null)
                throw new ArgumentNullException("server");

            _server = server;

            _sayHandler = new SayHandler(server);
        }
        /// <summary>
        /// Checks the server's settings for being valid.
        /// </summary>
        /// <returns>The list of descriptions on potentially invalid settings. Will be empty if no settings appeared to be invalid.</returns>
        /// <exception cref="ArgumentNullException"><paramref name="server"/> is null.</exception>
        public List<string> Check(Server server)
        {
            if (log.IsInfoEnabled)
                log.Info("Checking the server settings.");

            var errs = new List<string>();

            CheckServerSettings(server, errs);

            return errs;
        }
예제 #4
0
        /// <summary>
        /// Initializes a new instance of the <see cref="ServerSockets"/> class.
        /// </summary>
        /// <param name="server">The <see cref="Server"/> instance.</param>
        public ServerSockets(Server server) : base(CommonConfig.NetworkAppIdentifier, CommonConfig.ServerPort)
        {
            _packetHandler = new ServerPacketHandler(server);

            // When debugging, use the StatMessageProcessorManager instead (same thing as the other, but provides network statistics)
#if DEBUG
            var m = new StatMessageProcessorManager(_packetHandler, EnumHelper<ClientPacketID>.BitsRequired);
            m.Stats.EnableFileOutput(ContentPaths.Build.Root.Join("netstats_in" + EngineSettings.DataFileSuffix));
            _messageProcessorManager = m;
#else
            _messageProcessorManager = new MessageProcessorManager(_packetHandler, EnumHelper<ClientPacketID>.BitsRequired);
#endif
        }
        void CheckLegalMapPos(List<string> errs, Server server, string settingName, MapID mapID, Vector2 pos)
        {
            var map = server.World.GetMap(mapID);
            if (map == null)
            {
                Add(errs, "`{0}` is invalid: map `{1}` does not exist", settingName, mapID);
                return;
            }

            if (pos.X < 0 || pos.Y < 0 || pos.X > map.Width || pos.Y > map.Height)
            {
                Add(errs, "`{0}` is invalid: position `{1}` is outside of the bounds of map `{2}` (size: {3})", settingName, pos,
                    map, map.Size);
                return;
            }
        }
        /// <summary>
        /// Checks the <see cref="ServerSettings"/>.
        /// </summary>
        /// <param name="server">The <see cref="Server"/>.</param>
        /// <param name="errs">The list for holding errors.</param>
        void CheckServerSettings(Server server, List<string> errs)
        {
            const int secs = 1000;
            const int mins = secs * 60;
            const int hours = mins * 60;
            const int days = hours * 24;

            var ss = ServerSettings.Default;

            /* Range checks */
            CheckValueGreaterThan(errs, ss.CharacterJumpVelocity, "ServerSettings.CharacterJumpVelocity", -10);
            CheckValueLessThan(errs, ss.CharacterJumpVelocity, "ServerSettings.CharacterJumpVelocity", float.Epsilon);

            CheckValueGreaterThan(errs, ss.DefaultMapItemLife, "ServerSettings.DefaultMapItemLife", 1 * secs);
            CheckValueLessThan(errs, ss.DefaultMapItemLife, "ServerSettings.DefaultMapItemLife", 1 * days);

            CheckValueGreaterThan(errs, ss.MaxConnections, "ServerSettings.MaxConnections", -1);
            CheckValueLessThan(errs, ss.MaxConnections, "ServerSettings.MaxConnections", 60000);

            CheckValueGreaterThan(errs, ss.MaxRecentlyCreatedAccounts, "ServerSettings.MaxRecentlyCreatedAccounts", 0);
            CheckValueLessThan(errs, ss.MaxRecentlyCreatedAccounts, "ServerSettings.MaxRecentlyCreatedAccounts", 20);

            CheckValueGreaterThan(errs, ss.RespawnablesUpdateRate, "ServerSettings.MaxRecentlyCreatedAccounts", 100);
            CheckValueLessThan(errs, ss.RespawnablesUpdateRate, "ServerSettings.RespawnablesUpdateRate", mins * 10);

            CheckValueGreaterThan(errs, ss.RoutineServerSaveRate, "ServerSettings.RoutineServerSaveRate", mins * 1);
            CheckValueLessThan(errs, ss.RoutineServerSaveRate, "ServerSettings.RoutineServerSaveRate", days * 2);

            CheckValueGreaterThan(errs, ss.ServerUpdateRate, "ServerSettings.ServerUpdateRate", 0);
            CheckValueLessThan(errs, ss.ServerUpdateRate, "ServerSettings.ServerUpdateRate", 500);

            CheckValueGreaterThan(errs, ss.SyncExtraUserInformationRate, "ServerSettings.SyncExtraUserInformationRate", 10);
            CheckValueLessThan(errs, ss.SyncExtraUserInformationRate, "ServerSettings.SyncExtraUserInformationRate", secs * 5);

            /* Map checks */
            CheckLegalMapPos(errs, server, "ServerSettings.InvalidPersistentNPCLoadMap", ss.InvalidPersistentNPCLoadMap,
                ss.InvalidPersistentNPCLoadPosition);

            CheckLegalMapPos(errs, server, "ServerSettings.InvalidUserLoadMap", ss.InvalidUserLoadMap, ss.InvalidUserLoadPosition);
        }