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;
}