Class: RJR::Nodes::UnixConnection

Inherits:
EventMachine::Connection
  • Object
show all
Defined in:
lib/rjr/nodes/unix.rb

Overview

Helper class intialized by eventmachine encapsulating a unix socket connection

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ UnixConnection

UnixConnection intializer

Specify the Unix Node establishing the connection and optionaly socketname which this connection is connected to



30
31
32
33
34
35
36
# File 'lib/rjr/nodes/unix.rb', line 30

def initialize(args = {})
  @rjr_node   = args[:rjr_node]
  @socketname = args[:socketname]

  @send_lock = Mutex.new
  @data      = ""
end

Instance Attribute Details

#socketnameObject (readonly)

Returns the value of attribute socketname.



24
25
26
# File 'lib/rjr/nodes/unix.rb', line 24

def socketname
  @socketname
end

Instance Method Details

#receive_data(data) ⇒ Object

EventMachine::Connection#receive_data callback, handle request / response messages



39
40
41
42
43
44
45
46
47
48
# File 'lib/rjr/nodes/unix.rb', line 39

def receive_data(data)
  # a large json-rpc message may be split over multiple packets
  #   (invocations of receive_data)
  # and multiple messages may be concatinated into one packet
  @data += data
  while extracted = MessageUtil.retrieve_json(@data)
    msg, @data = *extracted
    @rjr_node.send(:handle_message, msg, self) # XXX private method
  end
end

#send_msg(data) ⇒ Object

Send data safely using local connection



51
52
53
54
55
# File 'lib/rjr/nodes/unix.rb', line 51

def send_msg(data)
  @send_lock.synchronize{
    Unix.em.schedule { send_data(data) }
  }
end