經過深思熟慮,原型設計和研究後,我終於實現了使用事件和代表的解決方案,它的工作非常好!
唯一的主要設計的問題是,會出現的情況下,如果,例如,3個分發節點是在三角形連接的消息將進入無限循環。或者,如果一個節點連接到自己或兩個連接到另一個節點的節點。 我介紹了每一種邊緣情況與事件監聽器連接一些簡單的邏輯:
public bool ConnectTo(Node peerNode)
{
EthernetPort peerPort = peerNode.GetFreePort();
EthernetPort myPort = this.GetFreePort();
// Perform a check for free ports for both peers:
if (peerPort == null || myPort == null)
return false; // Either myself or my peer do not have a spare port.
// Perform a check to make sure these nodes aren't already connected:
if (this.HasConnectedNode(peerNode))
return false;
// Connect the two ports:
myPort.Connect(peerNode, peerPort);
peerPort.Connect(this, myPort);
return true;
}
public bool HasConnectedNode(Node node) {
foreach (var port in ethernetSwitch.ethernetPorts)
{
if (port.peerNode == node)
return true; // Found a port already connected to this node.
}
return false; // No port has this node connected to it.
}
最後,以防萬一我錯過了什麼,或者只是覺得它的安全,我實現了自定義EventArgs
類型與int timeToLive
變量。每次節點處理消息時,該變量都會遞減,如果它達到0,則消息將被丟棄。
那麼大部分藍色箭頭都是網絡傳輸? – usr 2013-04-07 11:48:21
你的模擬時間有多重要?由於數據流節點大多是獨立的,通常不能保證時間。另外,功率單位是否是離散的?換句話說,一個節點可以請求0.5個單位嗎? – svick 2013-04-07 12:02:38
@usr所有的藍色箭頭都是'連接'。 – 2013-04-07 12:06:10