Class: Lita::CommanderMiddleware
- Inherits:
-
Object
- Object
- Lita::CommanderMiddleware
- Defined in:
- lib/lita/commander_middleware.rb
Instance Attribute Summary collapse
-
#env ⇒ Object
readonly
Returns the value of attribute env.
-
#open_sockets ⇒ Object
readonly
Returns the value of attribute open_sockets.
Class Method Summary collapse
-
.build(open_sockets:) ⇒ Object
START:initialize.
Instance Method Summary collapse
-
#build ⇒ Object
START:socket_building.
- #build_socket(env) ⇒ Object
- #close_socket(ws, event) ⇒ Object
-
#handle_env_has_socket ⇒ Object
START:request_handlers.
- #handle_message(ws, event) ⇒ Object
- #http_explainer_payload ⇒ Object
-
#initialize(open_sockets:) ⇒ CommanderMiddleware
constructor
A new instance of CommanderMiddleware.
-
#send_welcome_message(ws) ⇒ Object
START:event_handlers.
Constructor Details
#initialize(open_sockets:) ⇒ CommanderMiddleware
Returns a new instance of CommanderMiddleware.
9 10 11 |
# File 'lib/lita/commander_middleware.rb', line 9 def initialize(open_sockets:) @open_sockets = open_sockets end |
Instance Attribute Details
#env ⇒ Object (readonly)
Returns the value of attribute env.
7 8 9 |
# File 'lib/lita/commander_middleware.rb', line 7 def env @env end |
#open_sockets ⇒ Object (readonly)
Returns the value of attribute open_sockets.
7 8 9 |
# File 'lib/lita/commander_middleware.rb', line 7 def open_sockets @open_sockets end |
Class Method Details
.build(open_sockets:) ⇒ Object
START:initialize
3 4 5 |
# File 'lib/lita/commander_middleware.rb', line 3 def self.build(open_sockets:) new(open_sockets: open_sockets).build end |
Instance Method Details
#build ⇒ Object
START:socket_building
15 16 17 18 19 20 21 22 23 24 |
# File 'lib/lita/commander_middleware.rb', line 15 def build lambda do |env| if Faye::WebSocket.websocket?(env) @env = env handle_env_has_socket else http_explainer_payload end end end |
#build_socket(env) ⇒ Object
26 27 28 29 30 31 |
# File 'lib/lita/commander_middleware.rb', line 26 def build_socket(env) ws = Faye::WebSocket.new(env) open_sockets << ws Lita.logger.debug "Sonos client count: #{open_sockets.count}" ws end |
#close_socket(ws, event) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/lita/commander_middleware.rb', line 44 def close_socket(ws, event) open_sockets.delete_if { |s| s == ws } Lita.logger.debug "Sonos client count: #{open_sockets.count}" Lita.logger.debug "Socket close: #{[:close, event.code, event.reason]}" ws = nil end |
#handle_env_has_socket ⇒ Object
START:request_handlers
53 54 55 56 57 58 59 60 61 62 63 |
# File 'lib/lita/commander_middleware.rb', line 53 def handle_env_has_socket ws = build_socket(env) (ws) ws.on(:message) { |event| (ws, event) } ws.on(:close) { |event| close_socket(ws, event) } # Return async Rack response ws.rack_response end |
#handle_message(ws, event) ⇒ Object
40 41 42 |
# File 'lib/lita/commander_middleware.rb', line 40 def (ws, event) ws.send({ message: "ACK: #{event.data}" }.to_json) end |
#http_explainer_payload ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/lita/commander_middleware.rb', line 65 def http_explainer_payload [ 200, { 'Content-Type' => 'text/plain' }, ['Hello from a Lita chatbot! Feed me a websocket connection!'] ] end |
#send_welcome_message(ws) ⇒ Object
START:event_handlers
35 36 37 38 |
# File 'lib/lita/commander_middleware.rb', line 35 def (ws) payload = { message: 'Welcome to Lita Sonos Commander!', command: 'echo' } ws.send(payload.to_json) end |