class Relp::Server

Public Class Methods

bind(port, cb = nil) click to toggle source

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
Relp::Server.new(engine) → Relp::Server click to toggle source
Allocates a new Relp::Server instance and registers low level command callbacks with the engine.

Examples

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

Public Instance Methods

bind(518) → boolean click to toggle source
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.

Examples

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;
}
destroy → nil click to toggle source
API compat with Relp::Client and Relp::Engine - noop. This is a low level API.

Examples

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;
}
on_receive Proc → boolean click to toggle source
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.

Examples

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