Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
10/16/14 03:57:49 (10 years ago)
Author:
swagner
Message:

#2205: Worked on optimization networks

File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/ClientNode.cs

    r11465 r11468  
    6868    }
    6969
    70     public virtual void CallAsync() {
    71       Task.Factory.StartNew(() => {
     70    public virtual async Task CallServicesAsync() {
     71      await CallServicesAsync(new CancellationToken());
     72    }
     73    public virtual async Task CallServicesAsync(CancellationToken token) {
     74      foreach (var clientPort in Ports.OfType<IClientPort>()) {
     75        var parameters = clientPort.PrepareParameters();
    7276
    73         foreach (var clientPort in Ports.OfType<IClientPort>()) {
    74           var parameters = clientPort.PrepareParameters();
     77        // retrieve inputs
     78        foreach (var inputPort in Ports.OfType<IInputPort>().
     79                                        Where(x => parameters.ContainsKey(x.Name) &&
     80                                                    parameters[x.Name].Type == ServiceParameterType.Input &&
     81                                                    parameters[x.Name].DataType.IsAssignableFrom(x.DataType))) {
     82          parameters[inputPort.Name].Value = (IItem)inputPort.Value.Clone();
     83        }
    7584
    76           // retrieve inputs
    77           foreach (var inputPort in Ports.OfType<IInputPort>().
    78                                           Where(x => parameters.ContainsKey(x.Name) &&
    79                                                      parameters[x.Name].Type == ServiceParameterType.Input &&
    80                                                      parameters[x.Name].DataType.IsAssignableFrom(x.DataType))) {
    81             parameters[inputPort.Name].Value = (IItem)inputPort.Value.Clone();
     85        parameters = await clientPort.CallServiceAsync(parameters, token);
     86
     87        lock (locker) {
     88          // set outputs
     89          foreach (var outputPort in Ports.OfType<IOutputPort>().
     90                                            Where(x => parameters.ContainsKey(x.Name) &&
     91                                                      parameters[x.Name].Type == ServiceParameterType.Output &&
     92                                                      x.DataType.IsAssignableFrom(parameters[x.Name].DataType))) {
     93            outputPort.Value = (IItem)parameters[outputPort.Name].Value.Clone();
    8294          }
    8395
    84           parameters = clientPort.Call(parameters);
    85 
    86           lock (locker) {
    87             // set outputs
    88             foreach (var outputPort in Ports.OfType<IOutputPort>().
    89                                              Where(x => parameters.ContainsKey(x.Name) &&
    90                                                         parameters[x.Name].Type == ServiceParameterType.Output &&
    91                                                         x.DataType.IsAssignableFrom(parameters[x.Name].DataType))) {
    92               outputPort.Value = (IItem)parameters[outputPort.Name].Value.Clone();
    93             }
    94 
    95             Calls.Add(parameters);
    96           }
     96          Calls.Add(parameters);
    9797        }
    98       });
     98      }
    9999    }
    100100  }
Note: See TracChangeset for help on using the changeset viewer.