Changeset 11538 for branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs
- Timestamp:
- 11/12/14 01:43:03 (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/OptimizationNetworks/HeuristicLab.Optimization.Networks/3.3/Core.Networks/MessagePort.cs
r11530 r11538 54 54 RegisterConnectedPortEvents(); 55 55 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; 58 66 } 59 67 } … … 71 79 } 72 80 [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 } 87 90 } 88 91 … … 93 96 connectedPort = cloner.Clone(original.connectedPort); 94 97 portConnectionValid = original.portConnectionValid; 95 logMessages = original.logMessages; 96 messages = cloner.Clone(original.messages); 98 lastMessage = null; 97 99 RegisterConnectedPortEvents(); 98 100 } … … 100 102 : base("MessagePort") { 101 103 portConnectionValid = true; 102 logMessages = false; 103 messages = new MessageCollection(); 104 lastMessage = null; 104 105 } 105 106 public MessagePort(string name) 106 107 : base(name) { 107 108 portConnectionValid = true; 108 logMessages = false; 109 messages = new MessageCollection(); 109 lastMessage = null; 110 110 } 111 111 public MessagePort(string name, string description) 112 112 : base(name, description) { 113 113 portConnectionValid = true; 114 logMessages = false; 115 messages = new MessageCollection(); 114 lastMessage = null; 116 115 } 117 116 … … 126 125 127 126 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); 139 128 } 140 129 … … 162 151 public void SendMessage(IMessage message, CancellationToken token) { 163 152 if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid"); 164 if (LogMessages) Messages.Add(message);153 LastMessage = message; 165 154 if (ConnectedPort != null) ConnectedPort.ReceiveMessage(message, token); 166 155 OnMessageSent(message, token); … … 180 169 public void ReceiveMessage(IMessage message, CancellationToken token) { 181 170 if (!PortConnectionValid) throw new InvalidOperationException("Port connection is not valid"); 182 if (LogMessages) Messages.Add(message);171 LastMessage = message; 183 172 OnMessageReceived(message, token); 184 173 } … … 199 188 if (handler != null) handler(this, EventArgs.Empty); 200 189 } 201 public event EventHandler L ogMessagesChanged;202 protected virtual void OnL ogMessagesChanged() {203 var handler = L ogMessagesChanged;190 public event EventHandler LastMessageChanged; 191 protected virtual void OnLastMessageChanged() { 192 var handler = LastMessageChanged; 204 193 if (handler != null) handler(this, EventArgs.Empty); 205 194 } 206 195 207 196 protected override void OnInterfaceChanged() { 208 PortConnectionValid = CanConnectToPort(connectedPort);197 CheckPortConnection(); 209 198 base.OnInterfaceChanged(); 210 199 } … … 224 213 } 225 214 protected virtual void ConnectedPort_InterfaceChanged(object sender, EventArgs e) { 226 OnInterfaceChanged();215 CheckPortConnection(); 227 216 } 228 217 protected virtual void ConnectedPort_MessageSent(object sender, EventArgs<IMessage, CancellationToken> e) { … … 232 221 233 222 #region Helpers 223 protected virtual void CheckPortConnection() { 224 PortConnectionValid = (ConnectedPort == null) || 225 (ParametersCompatibleToTarget(Parameters, ConnectedPort.Parameters) && 226 ParametersCompatibleToTarget(ConnectedPort.Parameters, Parameters)); 227 } 234 228 protected virtual bool ParametersCompatibleToTarget(IEnumerable<IPortParameter> source, IEnumerable<IPortParameter> target) { 235 229 // checks if the source parameters are compatible to the input parameters of the target
Note: See TracChangeset
for help on using the changeset viewer.