/// <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); }
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; }