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");
 }
Example #2
0
        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);
            }
        }