Class: ProxyNobject

Inherits:
Object
  • Object
show all
Defined in:
lib/proxy_nobject.rb

Overview

this is the class that accepts instantiated objects in the main program, and then pushes them to a remote server

Defined Under Namespace

Classes: InvalidMethod, UnknownReturnDataType

Instance Method Summary collapse

Constructor Details

#initialize(host, port, obj) ⇒ ProxyNobject

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



9
10
11
12
13
14
15
# File 'lib/proxy_nobject.rb', line 9

def initialize(host, port, obj)
  @socket = TCPSocket.new(host, port)
  obj_bytes = Marshal.dump(obj)

  @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



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/proxy_nobject.rb', line 17

def method_missing(method, *args, **kwargs, &block)
  msg = { method: method, args: args }
  msg_bytes = Marshal.dump(msg)

  @socket.send([msg_bytes.length].pack('Q>'), 0)
  @socket.send(msg_bytes, 0)

  return_size = @socket.recv(8).unpack('Q>').first
  return_data = Marshal.load(@socket.recv(return_size))

  case return_data.first
  when :ok then return_data.last
  when :raise then raise return_data.last
  else
    raise ProxyNobject::UnknownReturnDataType.new("unknown data type '#{return_data.first}' within ProxyNobject (ProxyNobject::UnknownReturnDataType)")
  end
end

Instance Method Details

#!~(other) ⇒ Object

method overridden from Object class



38
# File 'lib/proxy_nobject.rb', line 38

def !~(other);      method_missing(:is_a?, other);  end

#<=>(other) ⇒ Object



39
# File 'lib/proxy_nobject.rb', line 39

def <=>(other);     method_missing(:<=>, other);    end

#===(other) ⇒ Object



40
# File 'lib/proxy_nobject.rb', line 40

def ===(other);     method_missing(:<=>, other);    end

#inspectObject



42
# File 'lib/proxy_nobject.rb', line 42

def inspect;        method_missing(:inspect);       end

#is_a?(klass) ⇒ Boolean



41
# File 'lib/proxy_nobject.rb', line 41

def is_a?(klass);   method_missing(:is_a?, klass);  end

#object_idObject



43
# File 'lib/proxy_nobject.rb', line 43

def object_id;      method_missing(:object_id);     end