public void Disconnect(Uri workerUri) { lock (Server.Workers) { Server.Workers.Remove(Server.Workers.Find(info => info.WorkerUri == workerUri)); if (Server.Workers.Count == 0) { Server.CloseClientConnection(); } } Server.ConnectionControl.DeleteWorkerConnection(workerUri); Logging.WriteLog("Worker on " + workerUri + " connected"); }
public void Control() { List <Uri> removedClientConnections = new List <Uri>(); List <Uri> removedWorkerConnections = new List <Uri>(); while (WorkerConnections.Count != 0 && ClientConnections.Count != 0) { removedWorkerConnections.Clear(); removedClientConnections.Clear(); lock (WorkerConnections) { foreach (Uri connection in WorkerConnections) { try { var service = RemoteConnection.CreateProxy <ICheckConnection>(UriTemplates.CreateCheckConnectionUri(connection)); service.Check(); } catch { removedWorkerConnections.Add(connection); } } lock (Server.Workers) { foreach (Uri connection in removedWorkerConnections) { WorkerConnections.Remove(connection); Server.Workers.Remove(Server.Workers.Find(info => info.WorkerUri == connection)); } } } lock (ClientConnections) { foreach (Uri connection in ClientConnections) { try { var service = RemoteConnection.CreateProxy <ICheckConnection>(UriTemplates.CreateCheckConnectionUri(connection)); service.Check(); } catch { removedClientConnections.Add(connection); } } lock (Server.Clients) { foreach (Uri connection in removedClientConnections) { ClientConnections.Remove(connection); Server.Clients.Remove(Server.Clients.Find(uri => uri == connection)); } if (Server.Clients.Count == 0) { Server.CloseClientConnection(); } } } Thread.Sleep(TimeOut); } }