#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()); } } }