예제 #1
0
        private void EndConnect(IAsyncResult res)
        {
            try
            {
                m_Client.EndConnect(res);
                m_Peer = new Utf8TcpPeer(this, m_Client.Client);

                if (ClientConnected != null)
                {
                    ClientConnected(this, new Utf8TcpPeerEventArgs(m_Peer));
                }

                m_Peer.ConnectionClosed += m_Peer_ConnectionClosed;
                m_Peer.DataReceived     += m_Peer_DataReceived;

                m_Peer.Start();
            }
            catch (SocketException)
            {
                if (ConnectionFailed != null)
                {
                    ConnectionFailed(this, EventArgs.Empty);
                }

                RetryConnectionIfNeeded();
            }
        }
예제 #2
0
        private void AddNewClient(Socket socket)
        {
            if ((Options & Utf8TcpServerOptions.SingleClientOnly) != 0)
            {
                lock (m_PeerListLock)
                {
                    foreach (var pp in m_PeerList)
                    {
                        pp.Disconnect();
                    }
                }
            }

            Utf8TcpPeer peer = new Utf8TcpPeer(this, socket);

            lock (m_PeerListLock)
            {
                m_PeerList.Add(peer);
                peer.ConnectionClosed += OnPeerDisconnected;
                peer.DataReceived     += OnPeerDataReceived;
            }


            if (ClientConnected != null)
            {
                Utf8TcpPeerEventArgs args = new Utf8TcpPeerEventArgs(peer);
                ClientConnected(this, args);
            }

            peer.Start();
        }
예제 #3
0
        void m_Peer_ConnectionClosed(object sender, Utf8TcpPeerEventArgs e)
        {
            if (m_Peer != null)
            {
                m_Peer.ConnectionClosed -= m_Peer_ConnectionClosed;
                m_Peer.DataReceived     -= m_Peer_DataReceived;
                m_Peer.Disconnect();
            }

            m_Peer = null;

            if (ClientDisconnected != null)
            {
                ClientDisconnected(this, e);
            }

            RetryConnectionIfNeeded();
        }
 internal Utf8TcpPeerEventArgs(Utf8TcpPeer peer, string message = null)
 {
     Peer    = peer;
     Message = message;
 }