Class: WebSocket::Message

Inherits:
Object
  • Object
show all
Defined in:
lib/websocket/message.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(message = '', type = :text, status_code = nil) ⇒ Message

Returns a new instance of Message.



28
29
30
31
32
33
34
35
36
37
38
39
# File 'lib/websocket/message.rb', line 28

def initialize(message = '', type = :text, status_code = nil)
  @type = type

  @payload = if status_code
    @status_code    = status_code
    @status_message = message

    [status_code, message].pack('S<a*')
  else
    message.force_encoding("ASCII-8BIT") if message
  end
end

Instance Attribute Details

#mask_keyObject (readonly)

Returns the value of attribute mask_key.



3
4
5
# File 'lib/websocket/message.rb', line 3

def mask_key
  @mask_key
end

#payloadObject (readonly)

Returns the value of attribute payload.



3
4
5
# File 'lib/websocket/message.rb', line 3

def payload
  @payload
end

#status_codeObject (readonly)

Returns the value of attribute status_code.



3
4
5
# File 'lib/websocket/message.rb', line 3

def status_code
  @status_code
end

#status_messageObject (readonly)

Returns the value of attribute status_message.



3
4
5
# File 'lib/websocket/message.rb', line 3

def status_message
  @status_message
end

#typeObject (readonly)

Returns the value of attribute type.



3
4
5
# File 'lib/websocket/message.rb', line 3

def type
  @type
end

Class Method Details

.close(status_code = nil, reason = nil) ⇒ Object

Return a new close message



16
17
18
19
20
21
22
23
24
25
26
# File 'lib/websocket/message.rb', line 16

def self.close(status_code = nil, reason = nil)
  if status_code && STATUS_CODES[status_code] == nil
    raise ArgumentError.new('Invalid status')
  end

  if reason && status_code == nil
    raise ArgumentError.new("Can't set a status message without status code")
  end

  new(reason, :close, status_code)
end

.ping(payload = '') ⇒ Object

Return a new ping message



6
7
8
# File 'lib/websocket/message.rb', line 6

def self.ping(payload = '')
  new(payload, :ping)
end

.pong(payload = '') ⇒ Object

Return a new pong message



11
12
13
# File 'lib/websocket/message.rb', line 11

def self.pong(payload = '')
  new(payload, :pong)
end

Instance Method Details

#control_frame?Boolean

Returns:

  • (Boolean)


63
64
65
# File 'lib/websocket/message.rb', line 63

def control_frame?
  [:close, :ping, :pong].include?(type)
end

#mask!Object



41
42
43
44
45
# File 'lib/websocket/message.rb', line 41

def mask!
  @second_byte = second_byte | 0b10000000 # Set masked bit
  @mask_key = Random.new.bytes(4)
  @payload = WebSocket.mask(@payload, @mask_key)
end

#masked?Boolean

Returns:

  • (Boolean)


51
52
53
# File 'lib/websocket/message.rb', line 51

def masked?
  second_byte & 0b10000000 != 0
end

#payload_lengthObject



47
48
49
# File 'lib/websocket/message.rb', line 47

def payload_length
  @payload ? @payload.length : 0
end

#statusObject



67
68
69
# File 'lib/websocket/message.rb', line 67

def status
  STATUS_CODES[status_code]
end

#to_dataObject



55
56
57
# File 'lib/websocket/message.rb', line 55

def to_data
  to_a.pack(pack_format)
end

#write(io) ⇒ Object



59
60
61
# File 'lib/websocket/message.rb', line 59

def write(io)
  io << to_data
end