39 lines
663 B
Crystal
39 lines
663 B
Crystal
|
|
require "http"
|
|
require "http/web_socket/protocol"
|
|
|
|
|
|
class WebSocket < HTTP::WebSocket
|
|
getter? closed = false
|
|
|
|
def read
|
|
size = 0
|
|
begin
|
|
info = @ws.receive(@buffer)
|
|
size = info.size
|
|
rescue IO::EOFError
|
|
close
|
|
return nil
|
|
end
|
|
|
|
case info.opcode
|
|
when Protocol::Opcode::TEXT
|
|
return @buffer[0..size-1]
|
|
when Protocol::Opcode::BINARY
|
|
return @buffer[0..size-1]
|
|
when Protocol::Opcode::CLOSE
|
|
begin
|
|
close
|
|
rescue e
|
|
puts "\033[31mwebsocket failed to close properly\033[00m #{e}"
|
|
end
|
|
return nil
|
|
end
|
|
end
|
|
|
|
def finalize
|
|
# puts "WrappedTCPFileDescriptor garbage collection!!"
|
|
# super
|
|
end
|
|
end
|