Exemple #1
0
        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);
                }
            }
        }
Exemple #2
0
        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);
                }
            }
        }
Exemple #3
0
        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);
                }
            }
        }
Exemple #4
0
        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());
                }
            }
        }