source: branches/HeuristicLab.Hive-3.4/sources/HeuristicLab.Clients.Hive.Slave.Tests/SlaveCommListener.cs @ 6004

Last change on this file since 6004 was 6004, checked in by ascheibe, 9 years ago

#1233

  • fix pause/stop bug when serializing big experiments
  • use proper newlines
  • use GetPlugin(..) instead of GetPlugins()
File size: 2.5 KB
Line 
1#region License Information
2/* HeuristicLab
3 * Copyright (C) 2002-2010 Heuristic and Evolutionary Algorithms Laboratory (HEAL)
4 *
5 * This file is part of HeuristicLab.
6 *
7 * HeuristicLab is free software: you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation, either version 3 of the License, or
10 * (at your option) any later version.
11 *
12 * HeuristicLab is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with HeuristicLab. If not, see <http://www.gnu.org/licenses/>.
19 */
20#endregion
21
22using System;
23using System.ServiceModel;
24using System.Threading;
25using HeuristicLab.Clients.Hive.SlaveCore.ServiceContracts;
26
27namespace HeuristicLab.Clients.Hive.SlaveCore.Tests {
28
29  /// <summary>
30  /// mock a client, simply print out messages
31  /// </summary>
32  [CallbackBehavior(ConcurrencyMode = ConcurrencyMode.Reentrant)]
33  public class SlaveCommListener : ISlaveCommunicationCallbacks, IDisposable {
34    ISlaveCommunication pipeProxy;
35    DuplexChannelFactory<ISlaveCommunication> pipeFactory;
36
37    public void Open() {
38      pipeFactory = new DuplexChannelFactory<ISlaveCommunication>(this, "SlaveCommunicationServiceEndpoint");
39
40      while (!ReconnectToSlaveCore()) {
41        Thread.Sleep(500);
42      }
43    }
44
45    public bool ReconnectToSlaveCore() {
46      try {
47        pipeProxy = pipeFactory.CreateChannel();
48        pipeProxy.Subscribe();
49        return true;
50      }
51      catch (Exception e) {
52        OnMessageLogged("Couldn't connect to Slave core. Is it possible that the Slave Core isn't running?" + Environment.NewLine + "Exception is: " + e.ToString());
53        return false;
54      }
55    }
56
57    public void Close() {
58      if (pipeFactory.State != CommunicationState.Closed) {
59        pipeProxy.Unsubscribe();
60        pipeFactory.Close();
61      }
62    }
63
64    public void OnStatusChanged(SlaveCore.StatusCommons status) {
65      System.Console.WriteLine("SlaveCommListener: " + status);
66    }
67
68    public void OnMessageLogged(string message) {
69      System.Console.WriteLine("SlaveCommListener: " + message);
70    }
71
72    public void OnShutdown() {
73      System.Console.WriteLine("SlaveCommListner: Slave quit");
74    }
75
76    public void Dispose() {
77      Close();
78    }
79  }
80}
Note: See TracBrowser for help on using the repository browser.