public void ExecuteSubProtocols(Protocol current, IEnumerable<Protocol> subProtocols) { foreach (var subProtocol in subProtocols) { RegisterProtocol(current, subProtocol); subProtocol.Start(); } foreach (var subProtocol in subProtocols) CheckCompleted(subProtocol); }
/// <summary> /// Sends the i-th message to the i-th party. /// </summary> public void Send(Protocol protocol, ICollection<Msg> msgs, int delay = 0) { Me.Send(this, msgs, delay); }
public void ExecuteSubProtocol(Protocol subProtocol) { Me.ExecuteSubProtocol(this, subProtocol); }
public void Multicast(Protocol protocol, Msg msg, IEnumerable<int> toIds, int delay = 0) { NetSimulator.Multicast(Id, protocol.ProtocolId, toIds, msg, delay); }
public void Broadcast(Protocol protocol, Msg msg, int delay = 0) { NetSimulator.Broadcast(Id, protocol.ProtocolId, msg, delay); }
public void ExecuteSubProtocol(Protocol current, Protocol child) { ExecuteSubProtocols(current, new Protocol[] { child }); }
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 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); }
public void RegisterProtocol(Protocol parent, Protocol child) { if (Id == 1 && child.ProtocolId == 360287978779639809) Console.WriteLine("bye2"); Debug.Assert(parent == null || RegisteredProtocols.ContainsKey(parent.ProtocolId)); Debug.Assert(!RegisteredProtocols.ContainsKey(child.ProtocolId)); RegisteredProtocols[child.ProtocolId] = child; ChildProtocolOutstandingCount[child.ProtocolId] = 0; if (parent != null) { ParentProtocols[child.ProtocolId] = parent.ProtocolId; ChildProtocolOutstandingCount[parent.ProtocolId]++; if (!ChildProtocolSubmissionOrder.ContainsKey(parent.ProtocolId)) ChildProtocolSubmissionOrder[parent.ProtocolId] = new List<ulong>(); ChildProtocolSubmissionOrder[parent.ProtocolId].Add(child.ProtocolId); } }