class Lita::CommanderMiddleware
Attributes
env[R]
open_sockets[R]
Public Class Methods
build(open_sockets:)
click to toggle source
START:initialize
# File lib/lita/commander_middleware.rb, line 3 def self.build(open_sockets:) new(open_sockets: open_sockets).build end
new(open_sockets:)
click to toggle source
# File lib/lita/commander_middleware.rb, line 9 def initialize(open_sockets:) @open_sockets = open_sockets end
Public Instance Methods
build()
click to toggle source
START:socket_building
# 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)
click to toggle source
# 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)
click to toggle source
# 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()
click to toggle source
START:request_handlers
# File lib/lita/commander_middleware.rb, line 53 def handle_env_has_socket ws = build_socket(env) send_welcome_message(ws) ws.on(:message) { |event| handle_message(ws, event) } ws.on(:close) { |event| close_socket(ws, event) } # Return async Rack response ws.rack_response end
handle_message(ws, event)
click to toggle source
# File lib/lita/commander_middleware.rb, line 40 def handle_message(ws, event) ws.send({ message: "ACK: #{event.data}" }.to_json) end
http_explainer_payload()
click to toggle source
# 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)
click to toggle source
START:event_handlers
# File lib/lita/commander_middleware.rb, line 35 def send_welcome_message(ws) payload = { message: 'Welcome to Lita Sonos Commander!', command: 'echo' } ws.send(payload.to_json) end