Skip to content

Instantly share code, notes, and snippets.

@rkh
Created March 10, 2009 15:45
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rkh/76943 to your computer and use it in GitHub Desktop.
Save rkh/76943 to your computer and use it in GitHub Desktop.
require "socket"
require "drb"
uri = ARGV.shift
# Socket overwrites send!
class Wrapper
include DRb::DRbUndumped
def initialize object
@object = object
end
def method_missing name, *args, &block
puts ">> #{name}(#{args.collect { |a| a.inspect }.join (",")}) #{"{ ... }" if block_given?}"
result = @object.method(name).call(*args, &block)
puts "=> #{result.inspect}"
result
end
def send_data *whatever
@object.send *whatever
end
public "method_missing"
end
module SharedSocket
def self.open
method_missing :open
end
def self.method_missing *args, &block
Wrapper.new UDPSocket.send(*args, &block)
end
end
DRb.start_service uri, SharedSocket
puts uri
sleep
require "snmp"
class UDPSocket
alias send_data send
end
module SNMP
def self.socket_class
@socket_class ||= UDPSocket
end
def self.socket_class= value
@socket_class = value
end
class UDPTransport
def initialize
@socket_class = SNMP.socket_class.open
end
def send(data, host, port)
@socket_class.send_data data, 0, host, port
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment