public Party() { Id = idGen++; NetSimulator.RegisterParty(this); SafeRandGen = new SafeRandom(); RegisteredProtocols = new Dictionary <ulong, Protocol>(); ParentProtocols = new Dictionary <ulong, ulong>(); ChildProtocolOutstandingCount = new Dictionary <ulong, int>(); ChildProtocolCompletedMsg = new Dictionary <ulong, SortedDictionary <ulong, object> >(); ChildProtocolSubmissionOrder = new Dictionary <ulong, List <ulong> >(); }
private void CheckCompleted(Protocol protocol) { if (!protocol.IsCompleted) { return; } RegisteredProtocols.Remove(protocol.ProtocolId); protocol.Teardown(); if (!ParentProtocols.ContainsKey(protocol.ProtocolId)) { return; } Protocol parent = RegisteredProtocols[ParentProtocols[protocol.ProtocolId]]; ParentProtocols.Remove(protocol.ProtocolId); if (!ChildProtocolCompletedMsg.ContainsKey(parent.ProtocolId)) { ChildProtocolCompletedMsg[parent.ProtocolId] = new SortedDictionary <ulong, object>(); } ChildProtocolOutstandingCount[parent.ProtocolId]--; ChildProtocolCompletedMsg[parent.ProtocolId][protocol.ProtocolId] = protocol.RawResult; if (ChildProtocolOutstandingCount[parent.ProtocolId] > 0) { return; } // all subprotocols are completed //Send(parent, Id, new SubProtocolCompletedMsg(ChildProtocolCompletedMsgs[parent.ProtocolId])); NetSimulator.Loopback(Id, parent.ProtocolId, new SubProtocolCompletedMsg(ChildProtocolCompletedMsg[parent.ProtocolId], ChildProtocolSubmissionOrder[parent.ProtocolId])); ChildProtocolCompletedMsg.Remove(parent.ProtocolId); ChildProtocolSubmissionOrder.Remove(parent.ProtocolId); }
public void Broadcast(Protocol protocol, Msg msg, int delay = 0) { NetSimulator.Broadcast(Id, protocol.ProtocolId, msg, delay); }
public void Multicast(Protocol protocol, Msg msg, IEnumerable <int> toIds, int delay = 0) { NetSimulator.Multicast(Id, protocol.ProtocolId, toIds, msg, delay); }
public void Send(Protocol protocol, ICollection <Msg> msgs, ICollection <int> recipients, int delay = 0) { NetSimulator.Send(Id, protocol.ProtocolId, msgs, recipients, delay); }
/// <summary> /// Sends the i-th message to the i-th party. /// </summary> public void Send(Protocol protocol, ICollection <Msg> msgs, int delay = 0) { Debug.Assert(NetSimulator.PartyCount == msgs.Count, "Not enough recipients/messages to send!"); NetSimulator.Send(Id, protocol.ProtocolId, msgs, delay); }
public void Send(Protocol protocol, int toId, Msg msg, int delay = 0) { NetSimulator.Send(Id, toId, protocol.ProtocolId, msg, delay); }