Example #1
0
        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);
        }
Example #2
0
 /// <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);
 }
Example #3
0
 public void ExecuteSubProtocol(Protocol subProtocol)
 {
     Me.ExecuteSubProtocol(this, subProtocol);
 }
Example #4
0
 public void Multicast(Protocol protocol, Msg msg, IEnumerable<int> toIds, int delay = 0)
 {
     NetSimulator.Multicast(Id, protocol.ProtocolId, toIds, msg, delay);
 }
Example #5
0
 public void Broadcast(Protocol protocol, Msg msg, int delay = 0)
 {
     NetSimulator.Broadcast(Id, protocol.ProtocolId, msg, delay);
 }
Example #6
0
 public void ExecuteSubProtocol(Protocol current, Protocol child)
 {
     ExecuteSubProtocols(current, new Protocol[] { child });
 }
Example #7
0
        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);
        }
Example #8
0
 public void Send(Protocol protocol, ICollection<Msg> msgs, ICollection<int> recipients, int delay = 0)
 {
     NetSimulator.Send(Id, protocol.ProtocolId, msgs, recipients, delay);
 }
Example #9
0
 /// <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);
 }
Example #10
0
 public void Send(Protocol protocol, int toId, Msg msg, int delay = 0)
 {
     NetSimulator.Send(Id, toId, protocol.ProtocolId, msg, delay);
 }
Example #11
0
        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);
            }
        }