Exemplo n.º 1
0
        /// <summary>
        ///     Starts the server.
        /// </summary>
        /// <returns></returns>
        public bool StartServer()
        {
            if (_listener != null)
            {
                return(false);                               // Already started
            }
            try
            {
                Log.Info("Initializing...");

                Log.Info("Loading settings...");
                //string t = "Instant Network MiNET Test";
                string t = "§6§l\u00BB §5Instant§dNetwork §aTest §6§l\u00AB";
                Motd = Config.GetProperty("motd", t);

                Log.Info("Loading plugins...");
                _pluginManager = new PluginManager();
                _pluginManager.LoadPlugins();
                Log.Info("Plugins loaded!");

                // Bootstrap server
                _pluginManager.ExecuteStartup(this);

                if (Config.GetProperty("EnableSecurity", false))
                {
                    // http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity
                    UserManager = UserManager ?? new UserManager <User>(new DefaultUserStore());
                    RoleManager = RoleManager ?? new RoleManager <Role>(new DefaultRoleStore());
                }

                LevelFactory = LevelFactory ?? new LevelFactory();

                _level = LevelFactory.CreateLevel("Default");
                _levels.Add(_level);

                //for (int i = 1; i < 10; i++)
                //{
                //	Level level = LevelFactory.CreateLevel("" + i);
                //	_levels.Add(level);
                //}

                _pluginManager.EnablePlugins(_levels);

                _listener = new UdpClient(_endpoint);

                if (IsRunningOnMono())
                {
                    _listener.Client.ReceiveBufferSize = 1024 * 1024 * 3;
                    _listener.Client.SendBufferSize    = 4096;
                }
                else
                {
                    _listener.Client.ReceiveBufferSize = int.MaxValue;
                    //_listener.Client.SendBufferSize = 1024 * 1024 * 8;
                    _listener.Client.SendBufferSize = int.MaxValue;
                    //_listener.DontFragment = true;

                    // SIO_UDP_CONNRESET (opcode setting: I, T==3)
                    // Windows:  Controls whether UDP PORT_UNREACHABLE messages are reported.
                    // - Set to TRUE to enable reporting.
                    // - Set to FALSE to disable reporting.

                    uint IOC_IN            = 0x80000000;
                    uint IOC_VENDOR        = 0x18000000;
                    uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
                    _listener.Client.IOControl((int)SIO_UDP_CONNRESET, new byte[] { Convert.ToByte(false) }, null);

                    //
                    //WARNING: We need to catch errors here to remove the code above.
                    //
                }

                _ackTimer     = new Timer(SendAckQueue, null, 0, 50);
                _cleanerTimer = new Timer(Update, null, 0, 10);

                _listener.BeginReceive(ReceiveCallback, _listener);

                // Measure latency through system
                //_internalPingTimer = new Timer(delegate(object state)
                //{
                //	var playerSession = _playerSessions.Values.FirstOrDefault();
                //	if (playerSession != null)
                //	{
                //		var ping = new InternalPing();
                //		ping.Timer.Start();
                //		HandlePackage(ping, playerSession);
                //	}
                //}, null, 1000, 1000);

                Log.Info("Server open for business...");

                return(true);
            }
            catch (Exception e)
            {
                Log.Error(e);
                StopServer();
            }

            return(false);
        }
Exemplo n.º 2
0
        public bool StartServer()
        {
            if (_listener != null) return false; // Already started

            try
            {
                Log.Info("Initializing...");

                if (_endpoint == null)
                {
                    var ip = IPAddress.Parse(Config.GetProperty("ip", "0.0.0.0"));
                    int port = Config.GetProperty("port", 19132);
                    Log.InfoFormat("Server Connection Info: IP {0} and Port {1}",ip,port);
                    _endpoint = new IPEndPoint(ip, port);
                }

                Log.Info("Loading plugins...");
                PluginManager = new PluginManager();
                PluginManager.LoadPlugins();
                Log.Info("Plugins loaded!");

                // Bootstrap server
                PluginManager.ExecuteStartup(this);

                MotdProvider = MotdProvider ?? new MotdProvider();

                IsSecurityEnabled = Config.GetProperty("EnableSecurity", false);
                if (IsSecurityEnabled)
                {
                    // http://www.asp.net/identity/overview/extensibility/overview-of-custom-storage-providers-for-aspnet-identity
                    UserManager = UserManager ?? new UserManager<User>(new DefaultUserStore());
                    RoleManager = RoleManager ?? new RoleManager<Role>(new DefaultRoleStore());
                }

                SessionManager = SessionManager ?? new SessionManager();
                if (LevelFactory is LevelFactory)
                /*{
                    Log.Info("Level already loaded!");
                }else
                {*/
                    Log.Info("Creating Level");
                    LevelFactory = new LevelFactory();
                //}
                //LevelFactory = LevelFactory ?? new LevelFactory();
                PlayerFactory = PlayerFactory ?? new PlayerFactory();

                _level = LevelFactory.CreateLevel("Default");
                _levels.Add(_level);

                ServerInfo = new ServerInfo(_level, _playerSessions);

                //for (int i = 1; i < 60; i++)
                //{
                //	Level level = LevelFactory.CreateLevel("" + i);
                //	_levels.Add(level);
                //}

                PluginManager.EnablePlugins(this, _levels);

                _listener = new UdpClient(_endpoint);

                if (IsRunningOnMono())
                {
                    _listener.Client.ReceiveBufferSize = 1024*1024*3;
                    _listener.Client.SendBufferSize = 4096;
                }
                else
                {
                    _listener.Client.ReceiveBufferSize = int.MaxValue;
                    //_listener.Client.SendBufferSize = 1024 * 1024 * 8;
                    _listener.Client.SendBufferSize = int.MaxValue;
                    //_listener.DontFragment = true;

                    // SIO_UDP_CONNRESET (opcode setting: I, T==3)
                    // Windows:  Controls whether UDP PORT_UNREACHABLE messages are reported.
                    // - Set to TRUE to enable reporting.
                    // - Set to FALSE to disable reporting.

                    uint IOC_IN = 0x80000000;
                    uint IOC_VENDOR = 0x18000000;
                    uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
                    _listener.Client.IOControl((int) SIO_UDP_CONNRESET, new byte[] {Convert.ToByte(false)}, null);

                    //
                    //WARNING: We need to catch errors here to remove the code above.
                    //
                }

                _ackTimer = new Timer(SendAckQueue, null, 0, 10);
                _cleanerTimer = new Timer(Update, null, 0, 10);

                _listener.BeginReceive(ReceiveCallback, _listener);

                // Measure latency through system
                //_internalPingTimer = new Timer(delegate(object state)
                //{
                //	var playerSession = _playerSessions.Values.FirstOrDefault();
                //	if (playerSession != null)
                //	{
                //		var ping = new InternalPing();
                //		ping.Timer.Start();
                //		HandlePackage(ping, playerSession);
                //	}
                //}, null, 1000, 1000);

                Log.Info("Server open for business...");

                return true;
            }
            catch (Exception e)
            {
                Log.Error(e);
                StopServer();
            }

            return false;
        }