Class: Ferris::RTM

Inherits:
Object
  • Object
show all
Defined in:
lib/ferris/rtm.rb

Constant Summary collapse

HTTPS_PORT =
443
SOCKET_READ_SIZE =
1024

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ RTM

Returns a new instance of RTM.



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/ferris/rtm.rb', line 17

def initialize options={}
  @id        = 0
  @jobs      = []
  @stopped   = false
  @callbacks = Hash.new { |h,k| h[k] = [] }
  @q         = Queue.new
  @qlock     = Mutex.new
  @token     = options.fetch :token
  @api_url   = options.fetch :api_url, 'https://slack.com/api'
  @logger    = options.fetch :logger, Slog.new
  @wss_uri   = construct_wss_uri @token, @api_url
  log.trace event: 'RTM client initialized', wss_uri: @wss_uri.to_s
end

Instance Method Details

#goObject



52
53
54
55
56
57
58
59
# File 'lib/ferris/rtm.rb', line 52

def go
  log.trace event: 'connecting'
  socket, driver = connect
  log.debug event: 'connected'
  @jobs << go_read_input(socket, driver)
  @jobs << go_write_output(socket, driver)
  @jobs
end

#joinObject



64
# File 'lib/ferris/rtm.rb', line 64

def join ; @jobs.map(&:join) end

#killObject



62
# File 'lib/ferris/rtm.rb', line 62

def kill ; @jobs.map(&:kill) end

#on(event, &block) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/ferris/rtm.rb', line 32

def on event, &block
  unless [ :open, :close, :error, :message ].include? event
    log.fatal event: 'invalid event', on_event: event
    raise ArgumentError
  end

  log.debug event: 'adding callback', on_event: event
  @callbacks[event] << block
end

#send(type, message = {}) ⇒ Object



43
44
45
46
47
48
49
# File 'lib/ferris/rtm.rb', line 43

def send type, message={}
  log.debug event: 'sending message', message: message
  message[:id] ||= next_id
  message[:type] = type
  enqueue message
  nil
end