#region License Information
/* HeuristicLab
* Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
*
* This file is part of HeuristicLab.
*
* HeuristicLab is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* HeuristicLab is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with HeuristicLab. If not, see .
*/
#endregion
using System;
using HeuristicLab.Common;
using HeuristicLab.Persistence.Default.CompositeSerializers.Storable;
namespace HeuristicLab.Services.Hive.Common {
///
/// The MessageContainer is a container class for Messages. Its two parts are:
/// the actual message itself and the JobId, refered by the message
///
[StorableClass]
[Serializable]
public class MessageContainer : IDeepCloneable {
public enum MessageType {
// *** commands from hive server ***
CalculateJob, // slave should calculate a job. the job is already assigned to the slave
StopJob, // slave should stop the job and submit results
AbortJob, // slave should shut the job down immediately without submitting results
PauseJob, // pause the job and submit the results
SoftPause, // slave should stop all jobs, submit results and pause
HardPause, // abort jobs and pause
Restart, //restart operation after Soft/HardPause
ShutdownSlave, // slave should shutdown immediately without submitting results
SayHello, // Slave should say hello, because he is unknown to the server
// *** commands from execution engine ***
AddChildJob, // adds a new child job for the provided jobId
GetChildJobs, // return all child jobs of the provided jobId
DeleteChildJobs, // delete all child jobs of the provided jobId
};
[Storable]
public MessageType Message { get; set; }
[Storable]
public Guid JobId { get; set; }
protected MessageContainer() { }
public MessageContainer(MessageType message) {
Message = message;
JobId = Guid.Empty;
}
public MessageContainer(MessageType message, Guid jobId) {
Message = message;
JobId = jobId;
}
protected MessageContainer(MessageContainer original, Cloner cloner) {
cloner.RegisterClonedObject(original, this);
this.Message = original.Message;
this.JobId = original.JobId;
}
public virtual IDeepCloneable Clone(Cloner cloner) {
return new MessageContainer(this, cloner);
}
public object Clone() {
return Clone(new Cloner());
}
}
}