class SardonyxRing::Services::SlackSocketClient
Constants
- SLACK_API_ORIGIN
Public Class Methods
new(options = {})
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 8 def initialize(options = {}) @app_client = SlackAppClient.new(token: options[:token]) @logger = options[:logger] @handler = nil @ws = nil end
Public Instance Methods
connect!()
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 19 def connect! require 'faye/websocket' open_resp = @app_client.request('apps.connections.open') raise open_resp unless open_resp.ok url = "#{open_resp.url}#{debug? ? '&debug_reconnects=true' : ''}" @ws = Faye::WebSocket::Client.new(url) @ws.on(:open, &method(:on_ws_open)) @ws.on(:message, &method(:on_ws_message)) @ws.on(:close, &method(:on_ws_close)) end
on_message(&block)
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 15 def on_message(&block) @handler = block end
Private Instance Methods
debug?()
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 35 def debug? ENV['DEBUG'].to_i != 0 end
on_ws_close(event)
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 57 def on_ws_close(event) @logger.info "close socket mode (#{event.code}#{event.reason ? " / #{event.reason}" : ''})" connect! end
on_ws_message(event)
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 43 def on_ws_message(event) return unless @handler data = parse_response(event.data) @ws.send({ envelope_id: data.envelope_id }.to_json) if data.envelope_id case data.type when 'events_api', 'interactive' @handler.call(data.payload) when 'disconnect' @ws.close end end
on_ws_open(_event)
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 39 def on_ws_open(_event) @logger.info 'connect socket mode' end
parse_response(response_body)
click to toggle source
# File lib/sardonyx_ring/services/slack_socket_client.rb, line 62 def parse_response(response_body) JSON.parse(response_body, object_class: OpenStruct) end