Example #1
0
        protected virtual void OnSessionAccepted(Listener listener, Socket socket)
        {
            if (Stopped.IsTrue())
                return;

            // TODO 여기서 동접 체크?

            SocketAsyncEventArgs recvSAEA;
            if (!m_RecvSAEAPool.TryPop(out recvSAEA))
            {
                Task.Run(() => { socket.CloseEx(); });
                Logger.Error(string.Format("Max connection number {0} was reached!", m_ServerConfig.MaxConnectionNumber));
                return;
            }

            SocketAsyncEventArgs sendSAEA;
            if (!m_SendSAEAPool.TryPop(out sendSAEA))
            {
                Task.Run(() => { socket.CloseEx(); });
                Logger.Error(string.Format("Max connection number {0} was reached!", m_ServerConfig.MaxConnectionNumber));
                return;
            }

            Session session = CreateSession(socket, recvSAEA, sendSAEA);
            if (session == null)
            {
                recvSAEA.UserToken = null;
                sendSAEA.UserToken = null;
                m_RecvSAEAPool.Push(recvSAEA);
                m_SendSAEAPool.Push(sendSAEA);
                Task.Run(() => { socket.CloseEx(); });
                return;
            }

            session.Connected += OnSessionConnected;
            session.Disconnected += OnSessionDisconnected;
            session.Received += OnSessionReceived;
            session.Error += OnSessionError;

            long sessionID = GenerateSessionID();
            session.SetSessionID(sessionID);
            m_Sessions.TryAdd(sessionID, session);

            session.OnConnected();

            // TODO
            session.StartReceive();

            Logger.Debug(string.Format("OnSessionAccepted:{0}", session.m_ID));
        }
Example #2
0
 void OnListenerError(Listener listener, Exception e)
 {
     Logger.Error(string.Format("Listener ({0}) error: {1}", listener.m_Config.EndPoint, e.Message), e);
 }
Example #3
0
        public virtual bool ServerStart()
        {
            Logger.Info("ServerStart");

            for (var i = 0; i < m_ServerConfig.Listeners.Length; i++)
            {
                var listener = new Listener(m_ServerConfig.Listeners[i], this);
                listener.Error += new Listener.ErrorHandler(OnListenerError);
                listener.Accepted += new Listener.AcceptHandler(OnSessionAccepted);

                if (listener.Start(m_ServerConfig))
                {
                    m_Listeners.Add(listener);

                    Logger.Info(string.Format("Listener ({0}) was started", listener.m_Config.EndPoint));
                }
                else
                {
                    Logger.Info(string.Format("Listener ({0}) failed to start", listener.m_Config.EndPoint));

                    for (var j = 0; j < m_Listeners.Count; j++)
                    {
                        m_Listeners[j].Stop();
                    }

                    m_Listeners.Clear();
                    return false;
                }
            }

            Running.ForceTrue();
            return true;
        }