slack-rtm-receiver 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1821e8e1626538c67c4d4decf64cd3535011a2af
4
- data.tar.gz: ab3b8e9761278e7988ecc4455d798f1522fa22c9
3
+ metadata.gz: 17f671256581c72171b3a58c97fc77da2da06320
4
+ data.tar.gz: 0183ff7477014ba33ed88078c0f222af1a12a52c
5
5
  SHA512:
6
- metadata.gz: 49680d9a6a7fd5221a7f5d5f904c0c401c65b719c018de616742cbff52dc6899e2a573f7b31bedbff5653e85d12d685aa68b5d6dc8ef59ca2a2b2c96ae0c27eb
7
- data.tar.gz: c4c5d3750d586452ef925e7cd0abaf5edb75934d8c8c2aaa57a441db00caaad2a1d2b2712e688ced049167f4e2a4746fa4aae901752a27b563c636e99441d7f3
6
+ metadata.gz: b4504c86920010d1e1f1d94c53ad7aad13df93d66d64db291b3bef15562e013a9283dd1610fc1754fb970d12c034869249a9ac4a5c2ef98ff237d9808c10966c
7
+ data.tar.gz: f530c30d2241548e823075f287ab60389c982738db526f0a8c05e95a6c4134b73ee3a301b8fb37727851645d2f43686781e60a8a3004f20d8cdda763b2f18d77
@@ -1,3 +1,4 @@
1
+ require 'json'
1
2
  require 'faye/websocket'
2
3
 
3
4
 
@@ -7,6 +8,7 @@ module SlackRTMReceiver
7
8
  class Session
8
9
 
9
10
  attr_reader :logger
11
+ attr_reader :self_uid
10
12
  attr_reader :websocket
11
13
  alias_method :ws, :websocket
12
14
  attr_reader :last_timestamp
@@ -15,6 +17,11 @@ module SlackRTMReceiver
15
17
  def initialize
16
18
  @logger = SlackRTMReceiver.logger
17
19
  logger.debug 'Initializing Session...'
20
+ reset_vars
21
+ end
22
+
23
+ def reset_vars
24
+ @self_uid = nil
18
25
  @websocket = nil
19
26
  @last_timestamp = nil
20
27
  @ping = nil
@@ -22,13 +29,18 @@ module SlackRTMReceiver
22
29
  end
23
30
 
24
31
  # Start RTM websocket session
25
- # @param url [String] websocket URL
32
+ # @param json [String] rtm.start response from Starter
26
33
  # @return [Boolean] false if a session is already up
27
- def start(url)
28
- return false if ws
29
- logger.debug "Connecting to websocket...\n URL: #{url}"
34
+ def start(json)
35
+ if ws
36
+ logger.info 'RTM session start requested, but already running. Ignoring...'
37
+ return false
38
+ end
39
+ h = parse_rtm_start_res(json)
40
+ @self_uid = h[:self_id]
41
+ logger.debug "I am Slack ID: #{self_uid}. Connecting to websocket...\n URL: #{h[:url]}"
30
42
  opts = {ping: 60}
31
- @websocket = Faye::WebSocket::Client.new(url, nil, opts)
43
+ @websocket = Faye::WebSocket::Client.new(h[:url], nil, opts)
32
44
 
33
45
  ws.on :open do
34
46
  logger.debug 'Websocket opened'
@@ -62,7 +74,7 @@ module SlackRTMReceiver
62
74
  # @param event [Hash] RTM event; 'id' will be added automatically
63
75
  # @return [Hash] the event that was sent
64
76
  def send_event(event)
65
- return nil unless ws
77
+ return nil unless alive?
66
78
  event[:id] = new_event_id
67
79
  ws.send(JSON.fast_generate(event))
68
80
  logger.info "Event sent with id: #{event[:id]} type: #{event[:type]}"
@@ -72,7 +84,6 @@ module SlackRTMReceiver
72
84
 
73
85
  # True if RTM session is alive
74
86
  def alive?
75
- # return true if ws && ts && Time.now - ts < 30
76
87
  return true if ws && ts
77
88
  return false
78
89
  end
@@ -141,6 +152,11 @@ module SlackRTMReceiver
141
152
 
142
153
  private
143
154
 
155
+ def parse_rtm_start_res(json)
156
+ hash = JSON.parse(json, {symbolize_names: true})
157
+ return {url: hash[:url], self_id: hash[:self][:id]}
158
+ end
159
+
144
160
  # Handle RTM hello
145
161
  def hello_handler(event)
146
162
  @stats[:hello_time] = Time.now
@@ -185,12 +201,8 @@ module SlackRTMReceiver
185
201
 
186
202
  # Reset instance variables
187
203
  def cleanup
188
- @hellotime = 0
189
- @websocket = nil
190
- @last_timestamp = nil
191
- @ping = nil
192
204
  stats({log: true})
193
- @stats = {}
205
+ reset_vars
194
206
  logger.warn 'RTM session closed'
195
207
  end
196
208
 
@@ -1,5 +1,4 @@
1
1
  require 'em-http'
2
- require 'json'
3
2
 
4
3
 
5
4
  module SlackRTMReceiver
@@ -63,7 +62,7 @@ module SlackRTMReceiver
63
62
  status = http.response_header.status
64
63
  raise "Web API rtm.start failed: received HTTP status code #{status}" unless status == 200
65
64
  logger.info 'Recived rtm.start response'
66
- session.start(JSON.parse(http.response)['url'])
65
+ session.start(http.response)
67
66
  end
68
67
 
69
68
  # EM::HttpRequest error callback handler
@@ -1,5 +1,5 @@
1
1
  module SlackRTMReceiver
2
2
 
3
- Version = '0.0.1'
3
+ Version = '0.0.2'
4
4
 
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack-rtm-receiver
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ken J.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-02-03 00:00:00.000000000 Z
11
+ date: 2016-02-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: eventmachine