Class: Ferris::RTM

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

Defined Under Namespace

Classes: WebSocketWriter

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.



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

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



66
67
68
69
70
71
72
73
# File 'lib/ferris/rtm.rb', line 66

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



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

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

#killObject



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

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

#on(event, &block) ⇒ Object



46
47
48
49
50
51
52
53
54
# File 'lib/ferris/rtm.rb', line 46

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



57
58
59
60
61
62
63
# File 'lib/ferris/rtm.rb', line 57

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