Class: Irc::MessageQueue
- Inherits:
-
Object
- Object
- Irc::MessageQueue
- Defined in:
- /home/apoc/projects/ruby/rbot/lib/rbot/ircsocket.rb
Instance Method Summary (collapse)
- - (Object) clear
-
- (MessageQueue) initialize
constructor
A new instance of MessageQueue.
- - (Object) push(mess, chan = nil, cring = 0)
- - (Object) shift(tmout = nil)
Constructor Details
- (MessageQueue) initialize
Returns a new instance of MessageQueue
153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/ircsocket.rb', line 153 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 |
Instance Method Details
- (Object) clear
174 175 176 177 178 179 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/ircsocket.rb', line 174 def clear self.synchronize do @rings.each { |r| r.clear } @last_ring = 0 end end |
- (Object) push(mess, chan = nil, cring = 0)
181 182 183 184 185 186 187 188 189 190 191 192 193 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/ircsocket.rb', line 181 def push(mess, chan=nil, cring=0) ring = cring self.synchronize do if ring == 0 warning "message #{mess} at ring 0 has channel #{chan}: channel will be ignored" if !chan.nil? @rings[0] << mess else error "message #{mess} at ring #{ring} must have a channel" if chan.nil? @rings[ring].push mess, chan end @non_empty.signal end end |
- (Object) shift(tmout = nil)
195 196 197 198 199 200 |
# File '/home/apoc/projects/ruby/rbot/lib/rbot/ircsocket.rb', line 195 def shift(tmout = nil) self.synchronize do @non_empty.wait(tmout) if self.empty? return unsafe_shift end end |