Class: Nobject::Local
- Inherits:
-
Object
- Object
- Nobject::Local
- Defined in:
- lib/nobject/local.rb
Overview
this class is used by the client application, wraps a local object, pushes it to a Nobject::Serve4r, which will then send method calls to a matching Nobject::Remote object
Defined Under Namespace
Classes: InvalidMethod, MethodRequestFailure, MethodResponseFailure, UnknownReturnDataType
Instance Method Summary collapse
-
#!~(other) ⇒ Object
method overridden from Object class.
- #<=>(other) ⇒ Object
- #===(other) ⇒ Object
-
#initialize(host, port, obj) ⇒ Local
constructor
host: the hostname of the server to push obj to port: the port number of the server to push obj to obj: the obj to store over the network.
- #inspect ⇒ Object
- #is_a?(klass) ⇒ Boolean
- #method_missing(method, *args, **kwargs, &block) ⇒ Object
- #to_s ⇒ Object
Constructor Details
#initialize(host, port, obj) ⇒ Local
host: the hostname of the server to push obj to port: the port number of the server to push obj to obj: the obj to store over the network
ex:
# this will create a new Nobject::Local, then push it to the specified
server Nobject::Local.new('localhost', 1234, <object>)
15 16 17 18 19 20 21 22 23 |
# File 'lib/nobject/local.rb', line 15 def initialize(host, port, obj) @msg_counter = 0 @socket = TCPSocket.new(host, port) obj_bytes = Marshal.dump(obj) File.open('/tmp/nobject.log', 'a') {|f| f.puts "L:#{@msg_counter += 1} #{obj_bytes.length}"; f.flush } @socket.send([obj_bytes.length].pack('Q>'), 0) @socket.send(obj_bytes, 0) end |
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(method, *args, **kwargs, &block) ⇒ Object
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/nobject/local.rb', line 25 def method_missing(method, *args, **kwargs, &block) msg = { method: method, args: args } msg_bytes = Marshal.dump(msg) begin @socket.send([msg_bytes.length].pack('Q>'), 0) File.open('/tmp/nobject.log', 'a') {|f| f.puts " LMS:#{@msg_counter += 1} #{msg_bytes.length}"; f.flush } @socket.send(msg_bytes, 0) rescue Exception raise Local::MethodRequestFailure.new("did not receive response from call to `#{method}' over the network") end return_data = begin Marshal.load( @socket.recv( @socket.recv(8).unpack('Q>').first ) ) rescue Exception raise Local::MethodResponseFailure.new("did not receive response from call to `#{method}' over the network") end case return_data.first when :ok then return_data.last when :raise then raise return_data.last else raise Local::UnknownReturnDataType.new("unknown data type '#{return_data.first}' within Nobject::Local (Nobject::Local::UnknownReturnDataType)") end end |
Instance Method Details
#!~(other) ⇒ Object
method overridden from Object class
58 |
# File 'lib/nobject/local.rb', line 58 def !~(other); method_missing(:is_a?, other); end |
#<=>(other) ⇒ Object
59 |
# File 'lib/nobject/local.rb', line 59 def <=>(other); method_missing(:<=>, other); end |
#===(other) ⇒ Object
60 |
# File 'lib/nobject/local.rb', line 60 def ===(other); method_missing(:<=>, other); end |
#inspect ⇒ Object
62 |
# File 'lib/nobject/local.rb', line 62 def inspect; method_missing(:inspect); end |
#is_a?(klass) ⇒ Boolean
61 |
# File 'lib/nobject/local.rb', line 61 def is_a?(klass); method_missing(:is_a?, klass); end |
#to_s ⇒ Object
63 |
# File 'lib/nobject/local.rb', line 63 def to_s; method_missing(:to_s); end |