Sha256: bfa38bfaba89d842f853448c47e1948ff3cac99b317bf456137c13f5ef01e524

Contents?: true

Size: 1.99 KB

Versions: 1

Compression:

Stored size: 1.99 KB

Contents

module Rack
  module WebSocket
    module Handler
      class Base
                
        autoload :Connection, "#{ROOT_PATH}/websocket/handler/base/connection"

        def on_open
          set_parent_instance_variables
          @parent.on_open(@env)
        end # Fired when a client is connected.

        def on_message(msg)
          set_parent_instance_variables
          @parent.on_message(@env, msg)
        end # Fired when a message from a client is received.

        def on_close
          set_parent_instance_variables
          @parent.on_close(@env)
        end # Fired when a client is disconnected.

        def on_error(error)
          set_parent_instance_variables
          @parent.on_error(@env, error)
        end # Fired when error occurs.

        # Set application as parent and forward options
        def initialize(parent, options = {})
          @parent = parent
          @options = options[:backend] || {}
        end

        def set_parent_instance_variables
          set_env_instance_variable
          set_session_instance_variable
        end

        def set_env_instance_variable
          @parent.instance_variable_set("@env", @env)
        end

        def set_session_instance_variable
          session = Noodles.use_memached_as_session_storage ? Noodles::MemcachedSession.new(@env) : @env['rack.session']
          @parent.instance_variable_set("@session", session)
        end

        # Implemented in subclass
        def call(env)
          raise 'Not implemented'
        end

        # Implemented in subclass
        def send_data(data)
          raise 'Not implemented'
        end

        # Implemented in subclass
        def close_websocket
          raise 'Not implemented'
        end

        protected

        # Standard async response
        def async_response
          [-1, {}, []]
        end

        # Standard 400 response
        def failure_response
          [ 400, {'Content-Type' => 'text/plain'}, [ 'Bad request' ] ]
        end

      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
websocket-rack-noodles-0.4.2 lib/rack/websocket/handler/base.rb