module Strelka::WebSocketServer::Routing

Frame routing logic for Strelka WebSocketServers.

For a protocol that defines its own opcodes:

class ChatServer < Strelka::WebSocketServer
    plugin :routing

    on_handshake do |request|
        # ...
    end
    on_text do |request|
        # ...
    end
end

class CustomChatServer < Strelka::WebSocketServer
    plugin :routing
    opcodes :nick => 7,
            :emote => 8

    on_nick do |request|
        nick = request.payload.read
        self.set_nick( request.socket_id, nick )
        return request.response( "Okay, nick set to #{nick}.", :text )
    end

    on_emote do |request|
        emote = request.payload.read
        nick = self.nick_for( request.socket_id )
        msg = "%s %s" % [ nick, emote ]
        self.broadcast( msg )
        return nil
    end
end

Public Instance Methods

handle_websocket_request( request ) click to toggle source

Dispatch the incoming frame to its handler based on its opcode

Calls superclass method
# File lib/strelka/websocketserver/routing.rb, line 131
def handle_websocket_request( request )
        self.log.debug "[:routing] Opcode map is: %p" % [ self.class.opcode_map ]
        opname = self.class.opcode_names[ request.numeric_opcode ]
        self.log.debug "[:routing] Routing request: %p" % [ opname ]

        handler = self.class.op_callbacks[ opname ] or return super

        return handler.bind( self ).call( request )
end