Method: #receive_msg
- Defined in:
- lib/easel/websocket.rb
#receive_msg(socket) ⇒ Object
receive_msg
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
# File 'lib/easel/websocket.rb', line 128 def receive_msg socket # Check first two bytes byte1 = socket.getbyte byte2 = socket.getbyte if byte1 == 0x88 # Client is requesting that we close the connection. # TODO: Unsure how to properly handle this case. Right now the socket will close and # everything here will shut down - eventually? Kill all child threads first? log_info "Client requested the websocket be closed." socket.close return end fin = byte1 & 0b10000000 opcode = byte1 & 0b00001111 msg_size = byte2 & 0b01111111 is_masked = byte2 & 0b10000000 unless fin and opcode == 1 and is_masked and msg_size < MAX_WS_FRAME_SIZE log_error "Invalid websocket message received. #{byte1}-#{byte2}" puts socket.gets msg_size.times.map { socket.getbyte } # Read message from socket. return end # Get message mask = 4.times.map { socket.getbyte } msg = msg_size.times.map { socket.getbyte }.each_with_index.map { |byte, i| byte ^ mask[i % 4] }.pack('C*').force_encoding('utf-8').inspect msg[1..-2] # Remove quotation marks from message end |