class Noam::Lemma
Attributes
listener[R]
name[R]
player[R]
speaks[R]
Public Class Methods
new(name, hears = [], speaks = [])
click to toggle source
# File lib/noam_lemma/lemma.rb, line 7 def initialize(name, hears = [], speaks = []) @name = name @speaks = speaks @player = nil @listener = nil initialize_message_filter(hears) end
Public Instance Methods
advertise(room_name)
click to toggle source
# File lib/noam_lemma/lemma.rb, line 16 def advertise(room_name) marco = Noam::Message::Marco.new(room_name, @name) polo = marco.start start(polo.host, polo.port) end
discover()
click to toggle source
# File lib/noam_lemma/lemma.rb, line 22 def discover advertise('') end
hear(event_name, &block)
click to toggle source
# File lib/noam_lemma/lemma.rb, line 26 def hear(event_name, &block) @message_filter.hear(event_name, &block) end
hears()
click to toggle source
# File lib/noam_lemma/lemma.rb, line 54 def hears @message_filter.hears end
listen()
click to toggle source
# File lib/noam_lemma/lemma.rb, line 39 def listen if @listener.connected? @message_filter.receive(@listener.take) else raise Noam::Disconnected.new("Listener disconnected") end end
speak(event, value)
click to toggle source
# File lib/noam_lemma/lemma.rb, line 30 def speak(event, value) if @player.connected? @player.put(Noam::Message::Playable.new(@name, event, value)) true else raise Noam::Disconnected.new("Player disconnected") end end
stop()
click to toggle source
# File lib/noam_lemma/lemma.rb, line 47 def stop @player.stop if @player @listener.stop if @listener @player = nil @listener = nil end
Private Instance Methods
initialize_message_filter(hears)
click to toggle source
# File lib/noam_lemma/lemma.rb, line 66 def initialize_message_filter(hears) @message_filter = MessageFilter.new hears.each do |event_name| @message_filter.hear(event_name) {} end end
start(host, port)
click to toggle source
# File lib/noam_lemma/lemma.rb, line 60 def start(host, port) @listener = Listener.new @player = Player.new(host, port) @player.put(Message::Register.new(@name, @listener.port, @message_filter.hears, @speaks)) end