Example #1
0
        private void SendDispatchLoop()
        {
            while (true)
            {
                if (scheduler.Verbose)
                {
                    Console.WriteLine("Waiting for the next send to dispatch");
                }

                SendTask sendTask = sendQueue.Receive();

                if (scheduler.Verbose)
                {
                    Console.WriteLine("Dispatching send of message of size {0} to {1}",
                                      sendTask.Message.Length, IoScheduler.PublicKeyToString(sendTask.DestinationPublicKey));
                }

                SenderThread senderThread = scheduler.FindSenderForDestinationPublicKey(sendTask.DestinationPublicKey);

                if (senderThread == null)
                {
                    senderThread = ClientSenderThread.Create(scheduler, sendTask.DestinationPublicKey);
                }

                senderThread.EnqueueSendTask(sendTask);
            }
        }
Example #2
0
 public void UnregisterSender(byte[] destinationPublicKey, SenderThread senderThread)
 {
     lock (destinationPublicKeyToSenderThreadMap)
     {
         destinationPublicKeyToSenderThreadMap[destinationPublicKey].Remove(senderThread);
     }
 }
Example #3
0
        ///////////////////////////////////
        // Extra API calls for client
        ///////////////////////////////////

        public void Connect(byte[] destinationPublicKey)
        {
            SenderThread senderThread = FindSenderForDestinationPublicKey(destinationPublicKey);

            if (senderThread == null)
            {
                senderThread = ClientSenderThread.Create(this, destinationPublicKey);
            }
        }
Example #4
0
        /////////////////////////////////////
        // SENDING
        /////////////////////////////////////

        public void RegisterSender(byte[] destinationPublicKey, SenderThread senderThread)
        {
            lock (destinationPublicKeyToSenderThreadMap)
            {
                if (destinationPublicKeyToSenderThreadMap.ContainsKey(destinationPublicKey))
                {
                    destinationPublicKeyToSenderThreadMap[destinationPublicKey].Insert(0, senderThread);
                }
                else
                {
                    destinationPublicKeyToSenderThreadMap[destinationPublicKey] = new List <SenderThread> {
                        senderThread
                    };
                }
            }
        }