Ejemplo n.º 1
0
        private void threadSpinCore()
        {
            TcpClient     newsock = null;
            ErlConnection conn;

            m_Node.OnNodeStatusChange(m_Node.NodeName, true, null);

            while (m_Active)
            {
                conn = null;

                try
                {
                    newsock = m_Sock.AcceptTcpClient();
                }
                catch (System.Exception e)
                {
                    m_Node.OnNodeStatusChange(m_Node.NodeName, false, e);
                    break;
                }

                try
                {
                    conn = new ErlConnection(m_Node, newsock);
                    m_Node.Add(conn);
                }
                catch (ErlAuthException e)
                {
                    m_Node.OnConnectAttempt(conn != null ? conn.Name : ErlAtom.Null, Direction.Inbound, e);
                    closeSock(newsock);
                }
                catch (ErlException e)
                {
                    m_Node.OnConnectAttempt(conn != null ? conn.Name : ErlAtom.Null, Direction.Inbound, e);
                    closeSock(newsock);
                }
                catch (Exception e)
                {
                    closeSock(newsock);
                    closeSock(m_Sock);
                    m_Node.OnNodeStatusChange(m_Node.NodeName, false, e);
                    break;
                }
            }

            App.Log.Write(Log.MessageType.Info,
                          StringConsts.ERL_STOPPING_SERVER.Args(m_Node.NodeLongName, "Listener"));

            stop();
            m_Thread = null;
        }