Example #1
0
 /// <summary>
 /// Dequeues a single message and sends it immediately
 /// </summary>
 private void MessageSendCallback(object state)
 {
     lock (_messagequeue)
     {
         if (_messagequeue.Count > 0)
         {
             DirectIM message = _messagequeue.Dequeue();
             // Turn off the timer while a message is being sent, it...could take a while
             _messagetimer.Change(Timeout.Infinite, Timeout.Infinite);
             SendPacket(message.ToByteArray(), new AsyncCallback(
                            delegate
             {
                 // If the message has attachments, start a writer to spool out the data, reset the timer when it's done
                 if (message.Attachments.Count > 0)
                 {
                     DirectIMDataWriter writer =
                         new DirectIMDataWriter(this,
                                                message);
                     writer.DataWriterComplete +=
                         new DataWriterCompleteHandler(
                             delegate
                     {
                         _messagetimer.Change
                             (500, 500);
                     });
                     writer.Write();
                 }
                 else
                 {
                     // Reset the timer right away
                     _messagetimer.Change(500, 500);
                 }
             }));
         }
     }
 }