Class: RailsLiveReload::WebSocket::Base

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_live_reload/web_socket/base.rb

Overview

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(server, request) ⇒ Base

Returns a new instance of Base.



11
12
13
14
15
16
# File 'lib/rails_live_reload/web_socket/base.rb', line 11

def initialize(server, request)
  @server, @request = server, request
  @env = request.env
  @websocket = RailsLiveReload::WebSocket::Wrapper.new(env, self, event_loop)
  @message_buffer = RailsLiveReload::WebSocket::MessageBuffer.new(self)
end

Instance Attribute Details

#dtObject (readonly)

Returns the value of attribute dt.



7
8
9
# File 'lib/rails_live_reload/web_socket/base.rb', line 7

def dt
  @dt
end

#envObject (readonly)

Returns the value of attribute env.



6
7
8
# File 'lib/rails_live_reload/web_socket/base.rb', line 6

def env
  @env
end

#filesObject (readonly)

Returns the value of attribute files.



7
8
9
# File 'lib/rails_live_reload/web_socket/base.rb', line 7

def files
  @files
end

#protocolObject (readonly)

Returns the value of attribute protocol.



6
7
8
# File 'lib/rails_live_reload/web_socket/base.rb', line 6

def protocol
  @protocol
end

#requestObject (readonly)

Returns the value of attribute request.



6
7
8
# File 'lib/rails_live_reload/web_socket/base.rb', line 6

def request
  @request
end

#serverObject (readonly)

Returns the value of attribute server.



6
7
8
# File 'lib/rails_live_reload/web_socket/base.rb', line 6

def server
  @server
end

Instance Method Details

#beatObject



59
60
61
# File 'lib/rails_live_reload/web_socket/base.rb', line 59

def beat
  transmit type: RailsLiveReload::INTERNAL[:message_types][:ping], message: Time.now.to_i
end

#close(reason: nil) ⇒ Object



51
52
53
54
55
56
57
# File 'lib/rails_live_reload/web_socket/base.rb', line 51

def close(reason: nil)
  transmit({
    type: RailsLiveReload::INTERNAL[:message_types][:disconnect],
    reason: reason
  })
  websocket.close
end

#handle_channel_command(payload) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/rails_live_reload/web_socket/base.rb', line 32

def handle_channel_command(payload)
  case payload['event']
  when 'setup'
    setup payload['options']
  else
    raise NotImplementedError
  end
end

#on_close(reason, code) ⇒ Object



79
80
81
# File 'lib/rails_live_reload/web_socket/base.rb', line 79

def on_close(reason, code)
  server.remove_connection(self)
end

#on_error(message) ⇒ Object



75
76
77
# File 'lib/rails_live_reload/web_socket/base.rb', line 75

def on_error(message)
  raise message
end

#on_message(message) ⇒ Object



71
72
73
# File 'lib/rails_live_reload/web_socket/base.rb', line 71

def on_message(message)
  message_buffer.append message
end

#on_openObject



63
64
65
66
67
68
69
# File 'lib/rails_live_reload/web_socket/base.rb', line 63

def on_open
  @protocol = websocket.protocol
  send_welcome_message

  message_buffer.process!
  server.add_connection(self)
end

#processObject



18
19
20
21
22
23
24
# File 'lib/rails_live_reload/web_socket/base.rb', line 18

def process
  if websocket.possible?
    respond_to_successful_request
  else
    respond_to_invalid_request
  end
end

#receive(websocket_message) ⇒ Object



26
27
28
29
30
# File 'lib/rails_live_reload/web_socket/base.rb', line 26

def receive(websocket_message)
  if websocket.alive?
    handle_channel_command decode(websocket_message)
  end
end

#reloadObject



41
42
43
44
45
# File 'lib/rails_live_reload/web_socket/base.rb', line 41

def reload
  return if dt.nil? || files.nil? || RailsLiveReload::Checker.scan(dt, files).size.zero?

  transmit({command: "RELOAD"})
end

#transmit(cable_message) ⇒ Object



47
48
49
# File 'lib/rails_live_reload/web_socket/base.rb', line 47

def transmit(cable_message)
  websocket.transmit encode(cable_message)
end