private void ClientsControlLoop() { // проверяю _listener, т.к. по такому же условию заканчивается цикл ListenerLoop while (_listener != null) { lock (_nodeConnections) { // Удаляю неподключенные клиенты for (int i = _nodeConnections.Count - 1; i >= 0; --i) { if (!_nodeConnections[i].Connected) { _nodeConnections.RemoveAt(i); } } // Довожу количество подключенных клиентов до 8 if (_nodeConnections.Count < 8) { var nodes = DB.Table <NetworkAddress>().OrderByDescending(x => x.TimeLastSeen).ToListAsync().Result; foreach (NetworkAddress node in nodes) { bool find = _nodeConnections.Any(c => c.NetworkAddress.StreamHostPort == node.StreamHostPort); if (!find) { var c = new NodeConnection(this, node); try { //Debug.WriteLine("Пытаюсь подключиться к " + node.HostStreamPort); c.Connect(); } catch (Exception e) { Debug.WriteLine(node + " " + e); } if (c.Connected) { //Debug.WriteLine("Подключился к " + node.HostStreamPort); _nodeConnections.Add(c); } if (_nodeConnections.Count >= 8) { break; } } } } } // Сплю минуту, или если уведомят из Helper.ReadHeaderMagic NodeIsDisconnected.WaitOne(60 * 1000); } }
private void ClientsControlLoop() { // проверяю _listener, т.к. по такому же условию заканчивается цикл ListenerLoop while (_listener != null) { lock (_nodeConnections) { // Удаляю неподключенные клиенты for (int i = _nodeConnections.Count - 1; i >= 0; --i) if (!_nodeConnections[i].Connected) _nodeConnections.RemoveAt(i); // Довожу количество подключенных клиентов до 8 if (_nodeConnections.Count < 8) { var nodes = DB.Table<NetworkAddress>().OrderByDescending(x => x.TimeLastSeen).ToListAsync().Result; foreach (NetworkAddress node in nodes) { bool find = _nodeConnections.Any(c => c.NetworkAddress.StreamHostPort == node.StreamHostPort); if (!find) { var c = new NodeConnection(this, node); try { //Debug.WriteLine("Пытаюсь подключиться к " + node.HostStreamPort); c.Connect(); } catch (Exception e) { Debug.WriteLine(node + " " + e); } if (c.Connected) { //Debug.WriteLine("Подключился к " + node.HostStreamPort); _nodeConnections.Add(c); } if (_nodeConnections.Count >= 8) break; } } } } // Сплю минуту, или если уведомят из Helper.ReadHeaderMagic NodeIsDisconnected.WaitOne(60*1000); } }