using System; using System.Collections.Generic; using System.Linq; using System.Text; using HeuristicLab.Hive.Contracts.BusinessObjects; using HeuristicLab.Hive.Contracts.Interfaces; using HeuristicLab.Hive.Contracts; using HeuristicLab.Core; namespace HeuristicLab.Hive.Server.Core { /// /// The ClientCommunicator manages the whole communication with the client /// public class ClientCommunicator: IClientCommunicator { List clients; LinkedList jobs; int nrOfJobs = 1; public ClientCommunicator() { jobs = new LinkedList(); for (long i = 0; i < nrOfJobs; i++) { jobs.AddFirst(i); } } #region IClientCommunicator Members public Response Login(ClientInfo clientInfo) { if (clients == null) clients = new List(); clients.Add(clientInfo); Response response = new Response(); response.Success = true; response.StatusMessage = "Client with GUID " + clientInfo.ClientId + " successuflly logged in"; return response; } public ResponseHB SendHeartBeat(HeartBeatData hbData) { ResponseHB response = new ResponseHB(); response.Success = true; response.StatusMessage = "HeartBeat received"; response.ActionRequest = new List(); if (jobs.Count > 0) response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob)); else response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.NoMessage)); return response; } public ResponseJob PullJob(Guid clientId) { ResponseJob response = new ResponseJob(); lock (this) { response.JobId = jobs.Last.Value; jobs.RemoveLast(); response.SerializedJob = PersistenceManager.SaveToGZip(new TestJob()); } response.Success = true; response.StatusMessage = "Job with id " + jobs.Count + " sent"; return response; } public Response SendJobResult(JobResult Result, bool finished) { Response response = new Response(); response.Success = true; response.StatusMessage = "Thanks for calculating"; return response; } public Response Logout(Guid clientId) { bool clientRemoved = false; foreach (ClientInfo client in clients) { if (client.ClientId.Equals(clientId)) { clients.Remove(client); clientRemoved = true; } } Response response = new Response(); if (clientRemoved) { response.Success = true; response.StatusMessage = "Successfully logged out. Good bye"; } else { response.Success = false; response.StatusMessage = "Sorry, but you weren't logged in"; } return response; } #endregion } }