Пример #1
0
        public WorkerService(IWorker worker)
        {
            this.worker = worker;
            this.id     = worker.GetId();

            manager = new WorkersManager();
            manager.AddOverseenWorker(new OverseenWorker(this, null)); // Adds himself as an available worker

            logger = new LoggerWrapper("WS" + id);
            logger.Log("Created a new WorkerService");
        }
Пример #2
0
        public WorkerService(IWorker worker)
        {
            this.worker = worker;
            this.id = worker.GetId();

            manager = new WorkersManager();
            manager.AddOverseenWorker(new OverseenWorker(this, null)); // Adds himself as an available worker

            logger = new LoggerWrapper("WS" + id);
            logger.Log("Created a new WorkerService");
        }
Пример #3
0
        /// <summary>
        /// This method is called by the workers when they are created
        /// so that the tracker can keep track them.
        /// </summary>
        /// <param name="newWorker"></param>
        public void AddWorker(WorkerService newWorker, bool isPropagate = false)
        {
            worker.PropagateWorker(newWorker);

            // check if it already contains this worker
            if (manager.Exists(newWorker.Id))
            {
                return;
            }

            if (!isPropagate)
            {
                newWorker.SetMasterTracker(this);
                newWorker.SetMasterTrackerFather(GetMasterTracker());

                System.Timers.Timer newTimer = createCheckFaultyWorkerTimer(newWorker);

                // Finally, add the new worker to the list
                manager.AddOverseenWorker(new OverseenWorker(newWorker, newTimer));
            }
            else
            {
                manager.AddOverseenWorker(new OverseenWorker(newWorker, null));
            }

            logger.Log("Received new worker notification from W" + newWorker.Id);

            // Let the other workers know about this new worker
            foreach (OverseenWorker otherWorker in manager.ListWorkers)
            {
                if (otherWorker.WorkerId != id)
                {
                    WorkerService otherWorkerService = otherWorker.Service;
                    otherWorkerService.ReceiveNewWorkerUpdate(otherWorker);
                }
            }

            // Update the new worker with the list of workers in the network
            newWorker.ReceiveCurrentWorkerList(manager.ListWorkers);
        }