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