    # File lib/rbot/ircsocket.rb, line 147
        def initialize
          # a MessageQueue is an array of QueueRings
          # rings have decreasing priority, so messages in ring 0
          # are more important than messages in ring 1, and so on
          @rings = Array.new(3) { |i|
            if i > 0
              QueueRing.new
            else
              # ring 0 is special in that if it's not empty, it will
              # be popped. IOW, ring 0 can starve the other rings
              # ring 0 is strictly FIFO and is therefore implemented
              # as an array
              Array.new
            end
          }
          # the other rings are satisfied round-robin
          @last_ring = 0
          self.extend(MonitorMixin)
          @non_empty = self.new_cond
        end