Sha256: 619f39b6caacdbd4f95b920a816c3f9e930075a07e7b15e034f66759a4e80d19
Contents?: true
Size: 1.75 KB
Versions: 2
Compression:
Stored size: 1.75 KB
Contents
module WebSocket class Driver class Server < Driver EVENTS = %w[open message error close] def initialize(socket, options = {}) super @http = HTTP::Request.new end def env @http.complete? ? @http.env : nil end def url return nil unless e = env url = "ws://#{e['HTTP_HOST']}" url << e['PATH_INFO'] url << "?#{e['QUERY_STRING']}" unless e['QUERY_STRING'] == '' url end %w[set_header start state frame text binary ping close].each do |method| define_method(method) do |*args| if @delegate @delegate.__send__(method, *args) else @queue << [method, args] true end end end %w[protocol version].each do |method| define_method(method) do @delegate && @delegate.__send__(method) end end def parse(buffer) return @delegate.parse(buffer) if @delegate @http.parse(buffer) return fail_request('Invalid HTTP request') if @http.error? return unless @http.complete? @delegate = Driver.rack(self, @options) @delegate.on(:open) { open } EVENTS.each do |event| @delegate.on(event) { |e| emit(event, e) } end emit(:connect, ConnectEvent.new) end def write(data) @socket.write(Driver.encode(data, :binary)) end private def fail_request emit(:error, ProtocolError.new(message)) emit(:close, CloseEvent.new(Hybi::ERRORS[:protocol_error], message)) end def open @queue.each do |message| @delegate.__send__(message[0], *message[1]) end @queue = [] end end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
websocket-driver-0.3.4-java | lib/websocket/driver/server.rb |
websocket-driver-0.3.4 | lib/websocket/driver/server.rb |