NAME

jQluster::Server - jQluster tranport server independent of underlying connection implementation

SYNOPSIS

my @logs = ();
my $server = jQluster::Server->new(
    logger => sub {  ## OPTIONAL
        my ($level, $msg) = @_;
        push(@logs, [$level, $msg]);
    }
);

$server->register(
    unique_id => "global unique ID for the connection",
    message => $registration_message,
    sender => sub {
        my ($message) = @_;
        $some_transport->send($message);
    }
);

$server->distribute($message);

$server->unregister($unique_id);

DESCRIPTION

jQluster::Server is part of jQluster project. To learn more about jQluster, visit https://github.com/debug-ito/jQluster.

jQluster::Server accepts connections from jQluster client nodes, receives messages from these nodes and distributes the messages to appropriate destination nodes.

jQluster::Server is independent of connection implementations. It just tells the destination connection's sender routine that it has incoming messages to the connection.

CLASS METHODS

$server = jQluster::Server->new(%args)

The constructor. Fields in %args are:

logger => CODE (optional, default: log nothing)

A subroutine reference that is called when the $server wants to log something.

The $logger is called like

$logger->($level, $message)

where $level is a log level string such as "info", "warning", "error" etc. $message is the log message string.

OBJECT METHODS

$server->register(%args)

Register a new jQluster connection to a client node.

Fields in %args are:

unique_id => ID (mandatory)

The ID for the new connection. The ID must be unique within the $server. If you try to register an ID that is already registered, it croaks.

message => jQluster MESSAGE HASH (mandatory)

A jQluster message for registration. The message is usually created by a jQluster client node.

sender => CODE (mandatory)

A subroutine reference that is called when the $server sends a message to this connection.

The $sender is called like

$sender->($jqluster_message)

where $jqluster_message is a jQluster message object. It's a plain hash-ref. It's up to the $sender how to deliver the message to the client node.

$server->distribute($message)

Distirbute the given jQluster message to destination nodes.

$message is a jQluster message object. It's a plain hash-ref.

$server->unregister($unique_id)

Unregister a connection to a client node.

$unique_id is the unique ID you give when calling register() method. If $unique_id is not registered, it does nothing.

AUTHOR

Toshio Ito toshioito [at] cpan.org