private void RunLoopStep() { if (_disconnectedClients.Count > 0) { var disconnectedClients = _disconnectedClients.ToArray(); _disconnectedClients.Clear(); foreach (var disC in disconnectedClients) { _connectedClients.Remove(disC); _parent.NotifyClientDisconnected(this, disC); } } if (_listener.Pending()) { var newClient = _listener.AcceptTcpClient(); _connectedClients.Add(newClient); _parent.NotifyClientConnected(this, newClient); System.IO.File.AppendAllText("incomingconnection.txt", ((IPEndPoint)_connectedClients[_connectedClients.Count - 1].Client.RemoteEndPoint).Address + ":" + ((IPEndPoint)_connectedClients[_connectedClients.Count - 1].Client.RemoteEndPoint).Port + " connected" + Environment.NewLine); } _delimiter = _parent.Delimiter; foreach (var c in _connectedClients) { List <byte> bytesReceived = new List <byte>(); while (c.Available > 0 && c.IsConnected()) { byte[] nextByte = new byte[1]; c.Client.Receive(nextByte, 0, 1, SocketFlags.None); bytesReceived.AddRange(nextByte); if (nextByte[0] == _delimiter) { byte[] msg = _queuedMsg.ToArray(); var daata = (Encoding.UTF8).GetString(msg); System.IO.File.AppendAllText("incomingconnection.txt", ((IPEndPoint)_connectedClients[_connectedClients.Count - 1].Client.RemoteEndPoint).Address + ":" + ((IPEndPoint)_connectedClients[_connectedClients.Count - 1].Client.RemoteEndPoint).Port + " sent : " + daata + Environment.NewLine); _queuedMsg.Clear(); _parent.NotifyDelimiterMessageRx(this, c, msg); } else { _queuedMsg.AddRange(nextByte); } } if (bytesReceived.Count > 0) { _parent.NotifyEndTransmissionRx(this, c, bytesReceived.ToArray()); } if (c.IsDisconnected()) { _disconnectedClients.Add(c); } } }
private void RunLoopStep() { if (_disconnectedClients.Count > 0) { var disconnectedClients = _disconnectedClients.ToArray(); _disconnectedClients.Clear(); foreach (var disC in disconnectedClients) { _connectedClients.Remove(disC); _parent.NotifyClientDisconnected(this, disC); } } if (_listener.Pending()) { var newClient = _listener.AcceptTcpClient(); _connectedClients.Add(newClient); _parent.NotifyClientConnected(this, newClient); } _delimiter = _parent.Delimiter; foreach (var c in _connectedClients) { List <byte> bytesReceived = new List <byte>(); while (c.Available > 0 && c.IsConnected()) { byte[] nextByte = new byte[1]; c.Client.Receive(nextByte, 0, 1, SocketFlags.None); bytesReceived.AddRange(nextByte); if (nextByte[0] == _delimiter) { byte[] msg = _queuedMsg.ToArray(); _queuedMsg.Clear(); _parent.NotifyDelimiterMessageRx(this, c, msg); } else { _queuedMsg.AddRange(nextByte); } } if (bytesReceived.Count > 0) { _parent.NotifyEndTransmissionRx(this, c, bytesReceived.ToArray()); } if (c.IsDisconnected()) { _disconnectedClients.Add(c); } } }