Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
12/17/08 14:36:20 (15 years ago)
Author:
msteinbi
Message:

Implementation of ClientCommunicator, pullJob sendHeartbeat (#399)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Hive.Server.Core/ClientCommunicator.cs

    r1001 r1004  
    1717  /// </summary>
    1818  public class ClientCommunicator: IClientCommunicator {
    19     int nrOfJobs = 1;
     19    int nrOfJobs = 10;
    2020
    2121    IClientAdapter clientAdapter;
    2222    IJobAdapter jobAdapter;
     23    IJobResultsAdapter jobResultAdapter;
    2324
    2425    public ClientCommunicator() {
     
    2627      jobAdapter = ServiceLocator.GetJobAdapter();
    2728
    28       for (int i = 0; i < 10; i++) {
     29      for (int i = 0; i < nrOfJobs; i++) {
    2930        Job job = new Job();
    3031        job.Id = i;
     
    3940    public Response Login(ClientInfo clientInfo) {
    4041      Response response = new Response();
    41       response.Success = true;
    4242
    4343      ICollection<ClientInfo> allClients = clientAdapter.GetAll();
    4444      ClientInfo client = clientAdapter.GetById(clientInfo.ClientId);
    45       if (client != null) {
    46         if (client.State != State.offline) {
    47           response.Success = false;
    48           response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_USER_ALLREADY_ONLINE;
    49         }
    50       }
    51 
    52       if (response.Success) {
    53         clientAdapter.Update(clientInfo);
    54         response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
     45      if (client != null && client.State != State.offline) {
     46        response.Success = false;
     47        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_USER_ALLREADY_ONLINE;
     48        return response;
    5549      }
     50      clientAdapter.Update(clientInfo);
     51      response.Success = true;
     52      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_LOGIN_SUCCESS;
    5653
    5754      return response;
     
    6461      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_HARDBEAT_RECEIVED;
    6562      response.ActionRequest = new List<MessageContainer>();
    66       List<Job> allJobs = new List<Job>(jobAdapter.GetAll());
    67       if (allJobs.Count > 0 && hbData.freeCores > 0)
     63      List<Job> allOfflineJobs = new List<Job>(jobAdapter.GetJobsByState(State.offline));
     64      if (allOfflineJobs.Count > 0 && hbData.freeCores > 0)
    6865        response.ActionRequest.Add(new MessageContainer(MessageContainer.MessageType.FetchJob));
    6966      else
     
    7673      ResponseJob response = new ResponseJob();
    7774      lock (this) {
    78         LinkedList<Job> allJobs = new LinkedList<Job>(jobAdapter.GetAll());
    79         if (allJobs.Last != null) {
    80           response.JobId = allJobs.Last.Value.Id;
    81           jobAdapter.Delete(allJobs.Last.Value);   
     75        LinkedList<Job> allOfflineJobs = new LinkedList<Job>(jobAdapter.GetJobsByState(State.offline));
     76        if (allOfflineJobs != null && allOfflineJobs.Count > 0) {
     77          Job job2Calculate = allOfflineJobs.First.Value;
     78          job2Calculate.State = State.calculating;
     79          response.JobId = job2Calculate.Id;
     80          jobAdapter.Update(job2Calculate);         
    8281          response.SerializedJob = PersistenceManager.SaveToGZip(new TestJob());
    8382          response.Success = true;
     
    9190    }
    9291
    93     public ResponseResultReceived SendJobResult(JobResult Result, bool finished) {
     92    public ResponseResultReceived SendJobResult(JobResult result, bool finished) {
    9493      ResponseResultReceived response = new ResponseResultReceived();
     94      if (result.Id != 0) {
     95        response.Success = false;
     96        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_ID_MUST_NOT_BE_SET;
     97        return response;
     98      }
     99      Job job = jobAdapter.GetById(result.JobId);
     100      if (job == null) {
     101        response.Success = false;
     102        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_NO_JO_WITH_THIS_ID;
     103        return response;
     104      }
     105      if (job.State != State.calculating) {
     106        response.Success = false;
     107        response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_WRONG_JOB_STATE;
     108        return response;
     109      }
     110      if (finished) {
     111        job.State = State.finished;
     112        jobAdapter.Update(job);
     113
     114        List<JobResult> jobResults = new List<JobResult>(jobResultAdapter.GetResultsOf(job));
     115        foreach (JobResult currentResult in jobResults)
     116          jobResultAdapter.Delete(currentResult);
     117      }
     118      jobResultAdapter.Update(result);   
     119
    95120      response.Success = true;
    96121      response.StatusMessage = ApplicationConstants.RESPONSE_COMMUNICATOR_JOBRESULT_RECEIVED;
    97       response.JobId = Result.JobId;
     122      response.JobId = result.JobId;
    98123
    99124      return response;
Note: See TracChangeset for help on using the changeset viewer.