public bool TryGetIncomingMessage(out IncomingMessage message)
 {
     message =
         (from m in this.messages
          select m).FirstOrDefault();
     bool result = message != null;
     if (result)
     {
         this.messages.Remove(message);
     }
     return result;
 }
 public bool TryGetMessageByType(out IncomingMessage message, params byte[] messageTypes)
 {
     message =
         (from m in this.messages
          where messageTypes.Contains(m.MessageType)
          select m).FirstOrDefault();
     bool result = message != null;
     if (result)
     {
         this.messages.Remove(message);
     }
     return result;
 }