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