Sugaring for spawning a new server without manual Relp::Engine init
# File lib/relp/server.rb, line 42 def self.bind(port, cb = nil) engine = Relp::Engine.new server = new(engine) server.bind(port) server.on_receive(cb) if cb engine.run # we only get here in exceptional cases, return a Relp::Server instance for API compat with Relp::Client server end
Allocates a new Relp::Server instance and registers low level command callbacks with the engine.
engine = Relp::Engine.new => Relp::Engine server = Relp::Server.new(engine) => Relp::Server
static VALUE rb_relp_server_s_new(VALUE klass, VALUE engine_obj) { VALUE obj; relp_server_wrapper *server = NULL; relpRetVal ret; RelpGetEngine(engine_obj); obj = Data_Make_Struct(rb_cRelpServer, relp_server_wrapper, 0, rb_relp_free_server_gc, server); ret = relpEngineSetSyslogRcv2(engine->engine, rb_relp_on_receive_callback); RelpAssert(ret); server->engine = engine->engine; server->callback = Qnil; rb_obj_call_init(obj, 0, NULL); return obj; }
Binds a Relp engine listner to a given port. Note that this only binds to a port and doesn't start any message exchange yet.
engine = Relp::Engine.new => Relp::Engine server = Relp::Server.new(engine) => Relp::Server server.bind(518) => true
static VALUE rb_relp_server_bind(VALUE obj, VALUE port) { relpRetVal ret; RelpGetServer(obj); port = rb_obj_as_string(port); Check_Type(port, T_STRING); ret = relpEngineAddListner2(server->engine, (unsigned char*)StringValueCStr(port), (void *)obj); RelpAssert(ret); server->flags |= RELP_SERVER_BOUND; return Qtrue; }
API compat with Relp::Client and Relp::Engine - noop. This is a low level API.
engine = Relp::Engine.new => Relp::Engine server = Relp::Server.new(engine) => Relp::Server server.destroy => nil
static VALUE rb_relp_server_destroy(VALUE obj) { RelpGetServer(obj); return Qnil; }
Registers an on_receive callback for this Relp::Server instance. Accepts a Proc with an arity of 3 for host, ip and message arguments respectively.
engine = Relp::Engine.new => Relp::Engine server = Relp::Server.new(engine) => Relp::Server server.bind(518) => true server.on_receive Proc.new{|host,ip,msg| p "got #{msg} from #{ip}" } => true
static VALUE rb_relp_server_on_receive(VALUE obj, VALUE callback) { RelpGetServer(obj); /* XXX: validate for arity + #call contract */ server->callback = callback; return Qtrue; }