public override bool Init(ServerExecuteType executeType, string version, string name = null) { if (base.Init(executeType, version, name) == false) return false; return true; }
public override bool Init(ServerExecuteType executeType, string version, string name = null) { if (base.Init(executeType, version, name) == false) { return(false); } return(true); }
public virtual bool Init(ServerExecuteType executeType, string version, string name = null) { Running = new AtomicBool(); Stopped = new AtomicBool(); ExecuteType = executeType; Name = string.IsNullOrEmpty(name) == true?Process.GetCurrentProcess().ProcessName : name; Version = version; ModuleName = Name; CreateLogger(); Logger.Info("Init"); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); if (LoadServerConfig() == false) { if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return(false); } TheadPoolEx.SetMinMaxThreads( m_ServerConfig.MinWorkerThreads == 0 ? Environment.ProcessorCount : m_ServerConfig.MinWorkerThreads, m_ServerConfig.MaxWorkerThreads == 0 ? Environment.ProcessorCount * 2: m_ServerConfig.MaxWorkerThreads, m_ServerConfig.MinCompletionPortThreads == 0 ? Environment.ProcessorCount : m_ServerConfig.MinCompletionPortThreads, m_ServerConfig.MaxCompletionPortThreads == 0 ? Environment.ProcessorCount * 2 : m_ServerConfig.MaxCompletionPortThreads); m_Sessions = new ConcurrentDictionary <long, Session>(); m_Listeners = new List <Listener>(); try { int bufferSize = m_ServerConfig.ReceiveBufferSize; if (bufferSize <= 0) { bufferSize = 1024 * 4; } // Send, Recv m_BufferManager = new BufferManager(bufferSize * m_ServerConfig.MaxConnectionNumber * 2, bufferSize); try { m_BufferManager.InitBuffer(); int[] poolSizes = new int[] { 4096, 16, 128, 256, 1024 }; m_PooledBufferManager = new PooledBufferManager(poolSizes); { SocketAsyncEventArgs socketEventArg; var socketArgsList = new List <SocketAsyncEventArgs>(m_ServerConfig.MaxConnectionNumber); for (int i = 0; i < m_ServerConfig.MaxConnectionNumber; i++) { socketEventArg = new SocketAsyncEventArgs(); socketEventArg.Completed += new EventHandler <SocketAsyncEventArgs>(CompletedReceive); m_BufferManager.SetBuffer(socketEventArg); socketArgsList.Add(socketEventArg); } m_RecvSAEAPool = new ConcurrentStack <SocketAsyncEventArgs>(socketArgsList); } { SocketAsyncEventArgs socketEventArg; var socketArgsList = new List <SocketAsyncEventArgs>(m_ServerConfig.MaxConnectionNumber); for (int i = 0; i < m_ServerConfig.MaxConnectionNumber; i++) { socketEventArg = new SocketAsyncEventArgs(); socketEventArg.Completed += new EventHandler <SocketAsyncEventArgs>(CompletedSend); //m_BufferManager.SetBuffer(socketEventArg); // Send할때 별도의 풀을 사용할거라서 socketEventArg.SetBuffer(null, 0, 0); socketArgsList.Add(socketEventArg); } m_SendSAEAPool = new ConcurrentStack <SocketAsyncEventArgs>(socketArgsList); } } catch (Exception e) { Logger.Error("메모리 부족! 최대 접속 허용 인원 설정을 낮추세요", e); if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return(false); } m_Updater = new TimerThread(Update, null, 1); return(true); } catch (Exception e) { Logger.Error("Server.Init", e); if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return(false); } }
public virtual bool Init(ServerExecuteType executeType, string version, string name = null) { Running = new AtomicBool(); Stopped = new AtomicBool(); ExecuteType = executeType; Name = string.IsNullOrEmpty(name) == true ? Process.GetCurrentProcess().ProcessName : name; Version = version; ModuleName = Name; CreateLogger(); Logger.Info("Init"); AppDomain.CurrentDomain.UnhandledException += new UnhandledExceptionEventHandler(CurrentDomain_UnhandledException); if (LoadServerConfig() == false) { if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return false; } TheadPoolEx.SetMinMaxThreads( m_ServerConfig.MinWorkerThreads == 0 ? Environment.ProcessorCount : m_ServerConfig.MinWorkerThreads, m_ServerConfig.MaxWorkerThreads == 0 ? Environment.ProcessorCount * 2: m_ServerConfig.MaxWorkerThreads, m_ServerConfig.MinCompletionPortThreads == 0 ? Environment.ProcessorCount : m_ServerConfig.MinCompletionPortThreads, m_ServerConfig.MaxCompletionPortThreads == 0 ? Environment.ProcessorCount * 2 : m_ServerConfig.MaxCompletionPortThreads); m_Sessions = new ConcurrentDictionary<long, Session>(); m_Listeners = new List<Listener>(); try { int bufferSize = m_ServerConfig.ReceiveBufferSize; if (bufferSize <= 0) bufferSize = 1024 * 4; // Send, Recv m_BufferManager = new BufferManager(bufferSize * m_ServerConfig.MaxConnectionNumber * 2, bufferSize); try { m_BufferManager.InitBuffer(); int[] poolSizes = new int[] { 4096, 16, 128, 256, 1024 }; m_PooledBufferManager = new PooledBufferManager(poolSizes); { SocketAsyncEventArgs socketEventArg; var socketArgsList = new List<SocketAsyncEventArgs>(m_ServerConfig.MaxConnectionNumber); for (int i = 0; i < m_ServerConfig.MaxConnectionNumber; i++) { socketEventArg = new SocketAsyncEventArgs(); socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(CompletedReceive); m_BufferManager.SetBuffer(socketEventArg); socketArgsList.Add(socketEventArg); } m_RecvSAEAPool = new ConcurrentStack<SocketAsyncEventArgs>(socketArgsList); } { SocketAsyncEventArgs socketEventArg; var socketArgsList = new List<SocketAsyncEventArgs>(m_ServerConfig.MaxConnectionNumber); for (int i = 0; i < m_ServerConfig.MaxConnectionNumber; i++) { socketEventArg = new SocketAsyncEventArgs(); socketEventArg.Completed += new EventHandler<SocketAsyncEventArgs>(CompletedSend); //m_BufferManager.SetBuffer(socketEventArg); // Send할때 별도의 풀을 사용할거라서 socketEventArg.SetBuffer(null, 0, 0); socketArgsList.Add(socketEventArg); } m_SendSAEAPool = new ConcurrentStack<SocketAsyncEventArgs>(socketArgsList); } } catch (Exception e) { Logger.Error("메모리 부족! 최대 접속 허용 인원 설정을 낮추세요", e); if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return false; } m_Updater = new TimerThread(Update, null, 1); return true; } catch (Exception e) { Logger.Error("Server.Init", e); if (ExecuteType == ServerExecuteType.Console) { Console.ReadKey(); } return false; } }