120: def receive(element)
121: while @threadBlocks.size==0 && @filters.size==0
122: sleep 0.1
123: end
124: Jabber::DEBUG && puts("RECEIVED:\n#{element.to_s}")
125: @threadBlocks.each do |thread, proc|
126: begin
127: proc.call(element)
128: if element.element_consumed?
129: @threadBlocks.delete(thread)
130: thread.wakeup if thread.alive?
131: return
132: end
133: rescue Exception => error
134: puts error.to_s
135: puts error.backtrace.join("\n")
136: end
137: end
138: @filters.each_value do |proc|
139: begin
140: proc.call(element)
141: return if element.element_consumed?
142: rescue Exception => error
143: puts error.to_s
144: puts error.backtrace.join("\n")
145: end
146: end
147: end