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



68
69
70
71
# File 'lib/dripdrop/handlers/websocket_server.rb', line 68

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

#on_open(&block) ⇒ Object



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

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

#on_receive(&block) ⇒ Object



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

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

#on_recv(&block) ⇒ Object



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

def on_recv(&block)
  $stderr.write "DripDrop Warning :on_recv is deprecated in favor of :on_receive"
  on_receive(&block)
end

#on_recv_raw(&block) ⇒ Object



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

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