lib/ruboty/slack_rtm/client.rb in ruboty-slack_rtm-2.2.0 vs lib/ruboty/slack_rtm/client.rb in ruboty-slack_rtm-2.3.0
- old
+ new
@@ -8,18 +8,28 @@
@client = create_client(websocket_url.to_s)
@queue = Queue.new
end
- def send(data)
+ def send_message(data)
data[:id] = Time.now.to_i * 10 + rand(10)
@queue.enq(data.to_json)
end
- def on(event, &block)
- @client.on(event) do |message|
- block.call(JSON.parse(message.data))
+ def on_text(&block)
+ @client.on(:message) do |message|
+ case message.type
+ when :ping
+ Ruboty.logger.debug("#{Client.name}: Received ping message")
+ send('', type: 'pong')
+ when :pong
+ Ruboty.logger.debug("#{Client.name}: Received pong message")
+ when :text
+ block.call(JSON.parse(message.data))
+ else
+ Ruboty.logger.warn("#{Client.name}: Received unknown message type=#{message.type}: #{message.data}")
+ end
end
end
def main_loop
keep_connection
@@ -31,21 +41,21 @@
end
private
def create_client(url)
- WebSocket::Client::Simple.connect(url).tap do |client|
+ WebSocket::Client::Simple.connect(url, verify_mode: OpenSSL::SSL::VERIFY_PEER).tap do |client|
client.on(:error) do |err|
Ruboty.logger.error("#{err.class}: #{err.message}\n#{err.backtrace.join("\n")}")
end
end
end
def keep_connection
Thread.start do
loop do
sleep(30)
- @client.send(type: 'ping')
+ @client.send('', type: 'ping')
end
end
end
end
end