Пример #1
0
        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> >();
        }
Пример #2
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);
        }
Пример #3
0
 public void Broadcast(Protocol protocol, Msg msg, int delay = 0)
 {
     NetSimulator.Broadcast(Id, protocol.ProtocolId, msg, delay);
 }
Пример #4
0
 public void Multicast(Protocol protocol, Msg msg, IEnumerable <int> toIds, int delay = 0)
 {
     NetSimulator.Multicast(Id, protocol.ProtocolId, toIds, msg, delay);
 }
Пример #5
0
 public void Send(Protocol protocol, ICollection <Msg> msgs, ICollection <int> recipients, int delay = 0)
 {
     NetSimulator.Send(Id, protocol.ProtocolId, msgs, recipients, delay);
 }
Пример #6
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);
 }
Пример #7
0
 public void Send(Protocol protocol, int toId, Msg msg, int delay = 0)
 {
     NetSimulator.Send(Id, toId, protocol.ProtocolId, msg, delay);
 }