Class: DripDrop::WebSocketHandler

Inherits:
BaseHandler show all
Defined in:
lib/dripdrop/handlers/websocket_server.rb

Defined Under Namespace

Classes: Connection, SocketError

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from BaseHandler

#handle_error, #on_error, #print_exception

Constructor Details

#initialize(address, opts = {}) ⇒ WebSocketHandler

Returns a new instance of WebSocketHandler.



10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/dripdrop/handlers/websocket_server.rb', line 10

def initialize(address,opts={})
  @opts = opts
  @raw           = false #Deal in strings or ZMQ::Message objects
  host, port     = address.host, address.port.to_i
  @message_class = @opts[:message_class] || DripDrop.default_message_class
  @debug         = @opts[:debug] || false

  EventMachine::WebSocket.start(:host => host,:port => port,:debug => @debug) do |ws|
    #A WebSocketHandler:Connection gets passed to all callbacks 
    dd_conn = Connection.new(ws)
      
    ws.onopen  { @onopen_handler.call(dd_conn) if @onopen_handler }
    ws.onclose { @onclose_handler.call(dd_conn) if @onclose_handler }
    ws.onerror {|reason|
      begin
        raise SocketError, reason
      rescue SocketError => e
        e.reason     = reason
        e.connection = dd_conn
        handle_error(e,dd_conn)
      end
    }
    
    ws.onmessage { |message|
      if @onmessage_handler
        begin
          message = @message_class.decode(message) unless @raw
          @onmessage_handler.call(message,dd_conn)
        rescue StandardError => e
          handle_error(e,dd_conn)
        end
      end
    }
  end
end

Instance Attribute Details

#addressObject (readonly)

Returns the value of attribute address.



8
9
10
# File 'lib/dripdrop/handlers/websocket_server.rb', line 8

def address
  @address
end

#threadObject (readonly)

Returns the value of attribute thread.



8
9
10
# File 'lib/dripdrop/handlers/websocket_server.rb', line 8

def thread
  @thread
end

#wsObject (readonly)

Returns the value of attribute ws.



8
9
10
# File 'lib/dripdrop/handlers/websocket_server.rb', line 8

def ws
  @ws
end

Instance Method Details

#on_close(&block) ⇒ Object



63
64
65
66
# File 'lib/dripdrop/handlers/websocket_server.rb', line 63

def on_close(&block)
  @onclose_handler = block
  self
end

#on_open(&block) ⇒ Object



58
59
60
61
# File 'lib/dripdrop/handlers/websocket_server.rb', line 58

def on_open(&block)
  @onopen_handler = block
  self
end

#on_recv(&block) ⇒ Object



46
47
48
49
50
# File 'lib/dripdrop/handlers/websocket_server.rb', line 46

def on_recv(&block)
  @raw = false
  @onmessage_handler = block
  self
end

#on_recv_raw(&block) ⇒ Object



52
53
54
55
56
# File 'lib/dripdrop/handlers/websocket_server.rb', line 52

def on_recv_raw(&block)
  @raw = true
  @onmessage_handler = block
  self
end