require 'reciver' require 'drb' class EvalServer attr_reader :lambdas_hash def initialize(eval_class, local, *eval_args) @lambdas_hash = {} @r = Reciver.new(eval_class, *eval_args) @gil = Mutex.new begin @local = DRb.start_service(local, self, nil) rescue Exception raise end end def prepare_lambda(code, hash) raise(RuntimeError, "lambda didn't pass sanity check") unless @r.check_sexp(code) @lambdas_hash[hash] = @r.sexp_to_lambda(code) end def call(lambda, *args) result = nil @gil.synchronize do result = @lambdas_hash[lambda].call(*args) end result end def ping "pong" end end