Free cookie consent management tool by TermsFeed Policy Generator

Ignore:
Timestamp:
11/12/14 01:43:03 (9 years ago)
Author:
swagner
Message:

#2205: Implemented review comments:

  • added IConnectablePort
  • replaced MessagePort.Messages by MessagePort.LastMessage
  • removed Path and PathChanged in NetworkItem

Additional changes:

  • refactored CanConnectToPort
  • refactored cloning of port parameters in MessagePortView
File:
1 edited

Legend:

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

    r11530 r11538  
    5454          RegisterConnectedPortEvents();
    5555          OnConnectedPortChanged();
    56           OnInterfaceChanged();
    57         }
     56          CheckPortConnection();
     57        }
     58      }
     59    }
     60    IPort IConnectablePort.ConnectedPort {
     61      get { return ConnectedPort; }
     62      set {
     63        if (!(value is IMessagePort))
     64          throw new InvalidOperationException("Type mismatch. ConnectedPort is not an IMessagePort.");
     65        ConnectedPort = (IMessagePort)value;
    5866      }
    5967    }
     
    7179    }
    7280    [Storable]
    73     protected bool logMessages;
    74     public bool LogMessages {
    75       get { return logMessages; }
    76       set {
    77         if (value != logMessages) {
    78           logMessages = value;
    79           OnLogMessagesChanged();
    80         }
    81       }
    82     }
    83     [Storable]
    84     protected MessageCollection messages;
    85     public MessageCollection Messages {
    86       get { return messages; }
     81    protected IMessage lastMessage;
     82    public IMessage LastMessage {
     83      get { return lastMessage; }
     84      protected set {
     85        if (value != lastMessage) {
     86          lastMessage = value;
     87          OnLastMessageChanged();
     88        }
     89      }
    8790    }
    8891
     
    9396      connectedPort = cloner.Clone(original.connectedPort);
    9497      portConnectionValid = original.portConnectionValid;
    95       logMessages = original.logMessages;
    96       messages = cloner.Clone(original.messages);
     98      lastMessage = null;
    9799      RegisterConnectedPortEvents();
    98100    }
     
    100102      : base("MessagePort") {
    101103      portConnectionValid = true;
    102       logMessages = false;
    103       messages = new MessageCollection();
     104      lastMessage = null;
    104105    }
    105106    public MessagePort(string name)
    106107      : base(name) {
    107108      portConnectionValid = true;
    108       logMessages = false;
    109       messages = new MessageCollection();
     109      lastMessage = null;
    110110    }
    111111    public MessagePort(string name, string description)
    112112      : base(name, description) {
    113113      portConnectionValid = true;
    114       logMessages = false;
    115       messages = new MessageCollection();
     114      lastMessage = null;
    116115    }
    117116
     
    126125
    127126    public bool CanConnectToPort(IPort port) {
    128       if (port == null) return true;
    129 
    130       var p = port as IMessagePort;
    131       if (p == null) return false;
    132 
    133       // check if the local parameters are compatible to the input parameters of the port
    134       if (!ParametersCompatibleToTarget(Parameters, p.Parameters)) return false;
    135       // check if the parameters of the port are compatible to the local input parameters
    136       if (!ParametersCompatibleToTarget(p.Parameters, Parameters)) return false;
    137 
    138       return true;
     127      return (port == null) || (port is IMessagePort);
    139128    }
    140129
     
    162151    public void SendMessage(IMessage message, CancellationToken token) {
    163152      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
    164       if (LogMessages) Messages.Add(message);
     153      LastMessage = message;
    165154      if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token);
    166155      OnMessageSent(message, token);
     
    180169    public void ReceiveMessage(IMessage message, CancellationToken token) {
    181170      if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid");
    182       if (LogMessages) Messages.Add(message);
     171      LastMessage = message;
    183172      OnMessageReceived(message, token);
    184173    }
     
    199188      if (handler != null) handler(this, EventArgs.Empty);
    200189    }
    201     public event EventHandler LogMessagesChanged;
    202     protected virtual void OnLogMessagesChanged() {
    203       var handler = LogMessagesChanged;
     190    public event EventHandler LastMessageChanged;
     191    protected virtual void OnLastMessageChanged() {
     192      var handler = LastMessageChanged;
    204193      if (handler != null) handler(this, EventArgs.Empty);
    205194    }
    206195
    207196    protected override void OnInterfaceChanged() {
    208       PortConnectionValid = CanConnectToPort(connectedPort);
     197      CheckPortConnection();
    209198      base.OnInterfaceChanged();
    210199    }
     
    224213    }
    225214    protected virtual void ConnectedPort_InterfaceChanged(object sender, EventArgs e) {
    226       OnInterfaceChanged();
     215      CheckPortConnection();
    227216    }
    228217    protected virtual void ConnectedPort_MessageSent(object sender, EventArgs<IMessage, CancellationToken> e) {
     
    232221
    233222    #region Helpers
     223    protected virtual void CheckPortConnection() {
     224      PortConnectionValid = (ConnectedPort == null) ||
     225                            (ParametersCompatibleToTarget(Parameters, ConnectedPort.Parameters) &&
     226                             ParametersCompatibleToTarget(ConnectedPort.Parameters, Parameters));
     227    }
    234228    protected virtual bool ParametersCompatibleToTarget(IEnumerable<IPortParameter> source, IEnumerable<IPortParameter> target) {
    235229      // checks if the source parameters are compatible to the input parameters of the target
Note: See TracChangeset for help on using the changeset viewer.