Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
02/29/08 19:22:27 (16 years ago)
Author:
gkronber
Message:

worked on #2

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/sources/HeuristicLab.Grid/ClientForm.cs

    r24 r32  
    3434using System.IO;
    3535using System.IO.Compression;
     36using System.Net;
    3637
    3738namespace HeuristicLab.Grid {
    38   public partial class ClientForm : Form {
    39 
     39  [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single, ConcurrencyMode = ConcurrencyMode.Multiple, UseSynchronizationContext = false)]
     40  public partial class ClientForm : Form, IClient {
    4041    private ChannelFactory<IEngineStore> factory;
     42    private ServiceHost clientHost;
    4143    private System.Timers.Timer fetchOperationTimer;
    4244    private IEngineStore engineStore;
     45    private Guid currentGuid;
     46    private ProcessingEngine currentEngine;
     47    private string clientUrl;
    4348
    4449    public ClientForm() {
     
    4853      fetchOperationTimer.Elapsed += new System.Timers.ElapsedEventHandler(fetchOperationTimer_Elapsed);
    4954      statusTextBox.Text = "Stopped";
     55      currentGuid = Guid.Empty;
    5056    }
    5157
    5258    private void startButton_Click(object sender, EventArgs e) {
     59      clientUrl = "net.tcp://" + Dns.GetHostAddresses(Dns.GetHostName())[0] + ":8002/Grid/Client";
     60      clientHost = new ServiceHost(this, new Uri(clientUrl));
    5361      try {
    5462        NetTcpBinding binding = new NetTcpBinding();
     
    5664        binding.ReaderQuotas.MaxStringContentLength = 100000000; // also 100M chars
    5765        binding.ReaderQuotas.MaxArrayLength = 100000000; // also 100M elements;
    58         binding.Security.Mode = SecurityMode.None;       
     66        binding.Security.Mode = SecurityMode.None;
     67
     68        clientHost.AddServiceEndpoint(typeof(IClient), binding, clientUrl);
     69        clientHost.Open();
     70
    5971        factory = new ChannelFactory<IEngineStore>(binding);
    6072        engineStore = factory.CreateChannel(new EndpointAddress(addressTextBox.Text));
     
    6577        statusTextBox.Text = "Waiting for engine";
    6678
    67       } catch (Exception ex) {
     79      } catch (CommunicationException ex) {
    6880        MessageBox.Show("Exception while connecting to the server: " + ex.Message);
     81        clientHost.Abort();
    6982        startButton.Enabled = true;
    7083        stopButton.Enabled = false;
     
    7689      fetchOperationTimer.Stop();
    7790      factory.Abort();
     91      clientHost.Close();
    7892      statusTextBox.Text = "Stopped";
    7993      stopButton.Enabled = false;
     
    8397    private void fetchOperationTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e) {
    8498      byte[] engineXml;
    85       Guid guid;
    8699      fetchOperationTimer.Stop();
    87       if (engineStore.TryTakeEngine(out guid, out engineXml)) {
    88         ProcessingEngine engine = RestoreEngine(engineXml);
     100      if (engineStore.TryTakeEngine(clientUrl, out currentGuid, out engineXml)) {
     101        currentEngine = RestoreEngine(engineXml);
    89102        if (InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Executing engine"; }); } else statusTextBox.Text = "Executing engine";
    90         engine.Finished += delegate(object src, EventArgs args) {
    91           byte[] resultScopeXml = SaveScope(engine.InitialOperation.Scope);
    92           engineStore.StoreResult(guid, resultScopeXml);
     103        currentEngine.Finished += delegate(object src, EventArgs args) {
     104          byte[] resultScopeXml = SaveScope(currentEngine.InitialOperation.Scope);
     105          engineStore.StoreResult(currentGuid, resultScopeXml);
     106          currentGuid = Guid.Empty;
     107          currentEngine = null;
    93108          fetchOperationTimer.Interval = 100;
    94109          fetchOperationTimer.Start();
    95110        };
    96         engine.Execute();
     111        currentEngine.Execute();
    97112      } else {
    98113        if(InvokeRequired) { Invoke((MethodInvoker)delegate() { statusTextBox.Text = "Waiting for engine"; }); } else statusTextBox.Text = "Waiting for engine";
     
    100115        fetchOperationTimer.Start();
    101116      }
     117    }
     118    public void Abort(Guid guid) {
     119      if(!IsRunningEngine(guid)) return;
     120      currentEngine.Abort();
     121    }
     122    public bool IsRunningEngine(Guid guid) {
     123      return currentGuid == guid;
    102124    }
    103125    private ProcessingEngine RestoreEngine(byte[] engine) {
Note: See TracChangeset for help on using the changeset viewer.