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); } } }
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(new ConnectedClient { Client = newClient }); _parent.NotifyClientConnected(this, new ConnectedClient { Client = newClient }); } _delimiter = _parent.Delimiter; foreach (var c in _connectedClients) { int bytesAvailable = c.Client.Available; if (bytesAvailable == 0) { //Thread.Sleep(10); continue; } var bytesReceived = new List <byte>(); while (c.Client.Available > 0 && c.Client.Connected) { byte[] nextByte = new byte[256]; c.Client.Client.Receive(nextByte, 0, nextByte.Length, SocketFlags.None); bytesReceived.AddRange(nextByte); var delIndex = Array.IndexOf(nextByte, _delimiter); if (delIndex != -1) { var part = nextByte.Take(delIndex + 1); var next = nextByte.Skip(delIndex + 1); _queuedMsg.AddRange(part); byte[] msg = _queuedMsg.ToArray(); _queuedMsg.Clear(); _queuedMsg.AddRange(next); _parent.NotifyDelimiterMessageRx(this, c.Client, msg); } else { _queuedMsg.AddRange(nextByte); } } if (bytesReceived.Count > 0) { _parent.NotifyEndTransmissionRx(this, c.Client, bytesReceived.ToArray()); } if (!c.Client.Connected) { _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) { if (IsSocketConnected(c.Client) == false) { _disconnectedClients.Add(c); } int bytesAvailable = c.Available; if (bytesAvailable == 0) { //Thread.Sleep(10); continue; } List <byte> bytesReceived = new List <byte>(); while (c.Available > 0 && c.Connected) { byte[] nextByte = new byte[1]; c.Client.Receive(nextByte, 0, 1, SocketFlags.None); bytesReceived.AddRange(nextByte); string clientKey = c.Client.RemoteEndPoint.ToString(); if (!_clientBuffers.ContainsKey(clientKey)) { _clientBuffers.Add(clientKey, new List <byte>()); } List <byte> clientBuffer = _clientBuffers[clientKey]; if (nextByte[0] == _delimiter) { byte[] msg = clientBuffer.ToArray(); clientBuffer.Clear(); _parent.NotifyDelimiterMessageRx(this, c, msg); } else { clientBuffer.AddRange(nextByte); } } if (bytesReceived.Count > 0) { _parent.NotifyEndTransmissionRx(this, c, bytesReceived.ToArray()); } } }