Sha256: 636712e6a7ba46330822eccbfa2612651a7c11d2a6ac28e53994a19f703967b1

Contents?: true

Size: 1.25 KB

Versions: 3

Compression:

Stored size: 1.25 KB

Contents

module Angelo

  class WebsocketResponder < Responder

    class << self

      attr_writer :on_pong

      def on_pong
        @on_pong ||= ->(e){}
      end

    end

    def params
      @params ||= parse_query_string
      @params
    end

    def request= request
      @params = nil
      @request = request
      @websocket = @request.websocket
      handle_request
    end

    def handle_request
      begin
        if @response_handler
          Angelo.log @connection, @request, @websocket, :switching_protocols
          @bound_response_handler ||= @response_handler.bind @base
          @websocket.on_pong &WebsocketResponder.on_pong
          @base.before if @base.respond_to? :before
          @bound_response_handler[@websocket]
          @base.after if @base.respond_to? :after
        else
          raise NotImplementedError
        end
      rescue IOError => ioe
        warn "#{ioe.class} - #{ioe.message}"
        close_websocket
      rescue => e
        error e.message
        ::STDERR.puts e.backtrace
        begin
          @connection.close
        rescue Reel::StateError => rcse
          close_websocket
        end
      end
    end

    def close_websocket
      @websocket.close
      @base.websockets.remove_socket @websocket
    end

  end

end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
angelo-0.1.14 lib/angelo/responder/websocket.rb
angelo-0.1.13 lib/angelo/responder/websocket.rb
angelo-0.1.12 lib/angelo/responder/websocket.rb