Class: Slack::RealTime::Socket
- Inherits:
-
Object
- Object
- Slack::RealTime::Socket
show all
- Defined in:
- lib/slack/real_time/socket.rb
Instance Attribute Summary collapse
Instance Method Summary
collapse
Constructor Details
#initialize(url, options = {}) ⇒ Socket
Returns a new instance of Socket.
10
11
12
13
14
15
16
|
# File 'lib/slack/real_time/socket.rb', line 10
def initialize(url, options = {})
@url = url
@options = options
@driver = nil
@logger = options.delete(:logger) || Slack::RealTime::Config.logger || Slack::Config.logger
@last_message_at = nil
end
|
Instance Attribute Details
#driver ⇒ Object
Returns the value of attribute driver.
6
7
8
|
# File 'lib/slack/real_time/socket.rb', line 6
def driver
@driver
end
|
#options ⇒ Object
Returns the value of attribute options.
5
6
7
|
# File 'lib/slack/real_time/socket.rb', line 5
def options
@options
end
|
#url ⇒ Object
Returns the value of attribute url.
4
5
6
|
# File 'lib/slack/real_time/socket.rb', line 4
def url
@url
end
|
Instance Method Details
#close ⇒ Object
75
76
77
|
# File 'lib/slack/real_time/socket.rb', line 75
def close
@driver = nil
end
|
#connect! {|driver| ... } ⇒ Object
28
29
30
31
32
33
34
35
36
37
38
39
|
# File 'lib/slack/real_time/socket.rb', line 28
def connect!
return if connected?
connect
logger.debug("#{self.class}##{__method__}") { driver.class }
driver.on :message do
@last_message_at = current_time
end
yield driver if block_given?
end
|
#connected? ⇒ Boolean
45
46
47
|
# File 'lib/slack/real_time/socket.rb', line 45
def connected?
!driver.nil?
end
|
#current_time ⇒ Object
71
72
73
|
# File 'lib/slack/real_time/socket.rb', line 71
def current_time
Process.clock_gettime(Process::CLOCK_MONOTONIC)
end
|
#disconnect! ⇒ Object
41
42
43
|
# File 'lib/slack/real_time/socket.rb', line 41
def disconnect!
driver.close
end
|
#restart_async(_client, _url) ⇒ Object
61
62
63
|
# File 'lib/slack/real_time/socket.rb', line 61
def restart_async(_client, _url)
raise NotImplementedError, "Expected #{self.class} to implement #{__method__}."
end
|
#send_data(message) ⇒ Object
18
19
20
21
22
23
24
25
26
|
# File 'lib/slack/real_time/socket.rb', line 18
def send_data(message)
logger.debug("#{self.class}##{__method__}") { message }
case message
when Numeric then driver.text(message.to_s)
when String then driver.text(message)
when Array then driver.binary(message)
else false
end
end
|
#start_async(_client) ⇒ #join
57
58
59
|
# File 'lib/slack/real_time/socket.rb', line 57
def start_async(_client)
raise NotImplementedError, "Expected #{self.class} to implement #{__method__}."
end
|
#start_sync(client) ⇒ Object
49
50
51
52
53
54
|
# File 'lib/slack/real_time/socket.rb', line 49
def start_sync(client)
thread = start_async(client)
thread.join if thread
rescue Interrupt
thread.exit if thread
end
|
#time_since_last_message ⇒ Object
65
66
67
68
69
|
# File 'lib/slack/real_time/socket.rb', line 65
def time_since_last_message
return 0 unless @last_message_at
current_time - @last_message_at
end
|