public async Task Read() { try { byte[] buffer = new byte[tcpClient.ReceiveBufferSize]; while (true) { if (!tcpClient.Connected) { throw new PortClosedException(); } NetworkStream inputStream = tcpClient.GetStream(); int dataLength = await inputStream.ReadAsync(buffer, 0, 100); if (dataLength == 0) { Close(); PortClosedEventArgs portClosedEventArgs = new PortClosedEventArgs("Remote tcp endpoint"); OnClose(portClosedEventArgs); break; } byte[] data = new byte[dataLength]; Array.Copy(buffer, data, dataLength); BytesReceivedEventArgs eventArgs = new BytesReceivedEventArgs(data); OnDataReceived(eventArgs); } } catch (Exception e) { ExceptionOccuredEventArgs eventArgs = new ExceptionOccuredEventArgs(e); OnReadExceptionOccured(eventArgs); } }
static void PortClosedEventHandler(object sender, PortClosedEventArgs eventArgs) { Port port = (Port)sender; if (unidentifiedPorts.Contains(port)) { unidentifiedPorts.Remove(port); } else { try { Client client = clients.Single(c => c.port == port); RemoveDataFlow(client); clientsByType[client.type].Remove(client); } catch (Exception e) { Util.DisplayExceptionInfo(e, "PortClosedEventHandler of " + port.ID); } } Console.WriteLine("Port removed: " + port.ID + ", initiator: " + eventArgs.initiator); }
protected void OnClose(PortClosedEventArgs eventArgs) { EventHandler <PortClosedEventArgs> handler = PortClosed; handler?.Invoke(this, eventArgs); }