private void HandleDatagramReceived(IAsyncResult AsyncResult) { if (isrunning) { TcpClientState tcpClientState = (TcpClientState)AsyncResult.AsyncState; NetworkStream networkStream = tcpClientState.networkStream; int numberOfReadBytes = 0; try { numberOfReadBytes = networkStream.EndRead(AsyncResult); } catch { numberOfReadBytes = 0; } if (numberOfReadBytes == 0) { lock (this.clients) { this.clients.Remove(tcpClientState); RaiseClientDisconnected(tcpClientState.tcpClient); return; } } byte[] receivedBytes = new byte[numberOfReadBytes]; Buffer.BlockCopy(tcpClientState.buffer, 0, receivedBytes, 0, numberOfReadBytes); RaiseDatagramReceived(tcpClientState.tcpClient, receivedBytes); networkStream.BeginRead(tcpClientState.buffer, 0, tcpClientState.buffer.Length, HandleDatagramReceived, tcpClientState); } }
void MT_OnClientDisconnected(TcpClientState client) { lock (dataQueue) { dataQueue.Enqueue(new EventData(EventType.Disconnect, client.Sid, null)); } lock (clients) { clients.Remove(client.Sid); } }
void MT_OnClientConnected(TcpClientState client) { lock (clients) { clients[client.Sid] = client; } lock (dataQueue) { dataQueue.Enqueue(new EventData(EventType.Connect, client.Sid, null)); } }
private void server_Received(object sender, TcpDatagramReceivedEventArgs <byte[]> e) { Debug.Log(string.Format("Client : {0} --> {1}", e.Client.TcpClient.Client.RemoteEndPoint.ToString(), e.Datagram.Length)); TcpClientState internalClient = e.Client; string tcpClientKey = internalClient.TcpClient.Client.RemoteEndPoint.ToString(); inbox.AddOrUpdate(tcpClientKey, internalClient, (n, o) => { return(internalClient); }); }
private void HandleTcpClientAccepted(IAsyncResult AsyncResult) { if (isrunning) { TcpListener tcpListener = (TcpListener)AsyncResult.AsyncState; TcpClient tcpClient = tcpListener.EndAcceptTcpClient(AsyncResult); TcpClientState tcpClientState = new TcpClientState(tcpClient); lock (this.clients) { this.clients.Add(tcpClientState); RaiseClientConnected(tcpClient); //_connectionIndex = this.clients.IndexOf(tcpClientState); //_bufferIndex = (++_bufferIndex) % BUFCOUNT; } NetworkStream networkStream = tcpClientState.networkStream; networkStream.BeginRead(tcpClientState.buffer, 0, tcpClientState.buffer.Length, HandleDatagramReceived, tcpClientState); tcpListener.BeginAcceptTcpClient(HandleTcpClientAccepted, AsyncResult.AsyncState); } }
void MT_OnDatagramReceived(TcpClientState client, byte[] data) { lock (dataQueue) { dataQueue.Enqueue(new EventData(EventType.Data, client.Sid, data)); } }