Class: RJR::Nodes::TCPConnection

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

Overview

Helper class intialized by eventmachine encapsulating a tcp socket connection

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(args = {}) ⇒ TCPConnection

TCPConnection intializer

Specify the TCP Node establishing the connection and optionaly remote host/port which this connection is connected to



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

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

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

Instance Attribute Details

#hostObject (readonly)

Returns the value of attribute host.



22
23
24
# File 'lib/rjr/nodes/tcp.rb', line 22

def host
  @host
end

#portObject (readonly)

Returns the value of attribute port.



23
24
25
# File 'lib/rjr/nodes/tcp.rb', line 23

def port
  @port
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/tcp.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 = JSONParser.extract_json_from(@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/tcp.rb', line 51

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