NAME

POEx::ProxySession::Server - Hosts published sessions and routes proxy message

VERSION

version 1.102760

SYNOPSIS

class Flarg { with 'POEx::Role::SessionInstantiation';

after _start(@args) is Event
{
    POEx::ProxySession::Server->new
    (
        listen_ip   => '127.0.0.1',
        listen_port => 56789,
        alias       => 'Server',
        options     => { trace => 1, debug => 1 },
    );
}
}

DESCRIPTION

POEx::ProxySession::Server is a lightweight network server that handles storage and listing of published sessions, and routing of proxied messages between connected clients.

PROTECTED_ATTRIBUTES

sessions

This attribute is used to store the published sessions.

Access these sessions through the following methods:

The stored structure looks like the following:

Session =>
{
    name    => isa SessionAlias,
    methods => isa HashRef,
    id      => isa WheelID,
}

delivered_store

delivered_store holds the wheel ids that are awaiting a response from some other client.

Access to these ids is provided through the following methods:

handles     => 
{
    get_delivered        => 'get',
    set_delivered        => 'set',
    delete_delivered     => 'delete',
    count_delivereds     => 'count',
    all_delivered_keys   => 'keys',
    all_delivered_values => 'values',
    has_delivered        => 'exists',
}

PROTECTED_METHODS

handle_inbound_data

(ProxyMessage $data, WheelID $id) is Event

Our implementation of handle_inbound_data expects a ProxyMessage as data. Here is where the handling and routing of messages lives. The following types of messages are handled here: publish, rescind, listing, subscribe, deliver, and result.

rescind_session

(ProxyMessage $data, WheelID $id) is Event

This handles rescinding of a published session. No payload on success.

publish_session

(ProxyMessage $data, WheelID $id) is Event

This method handles session publication. Payload on success is the session alias

subscribe_session

(ProxyMessage $data, WheelID $id) is Event

This method handles subscription requests. Payload on success is a hashref:

Payload =>
{
    session => isa SessionAlias,
    methods => HashRef,
}

deliver_message

(ProxyMessage $data, WheelID $id) is Event

This method does message delivery by doing a lookup of the alias to the real session name, and rewriting the message header to point to that session, then sends it on to that session's connection. Sets a delivered message.

handle_delivered

(ProxyMessage $data, WheelID $id) is Event

This method handles result messages from delivered messages. All messages that go through the system are expected to return a result message indicating success or failure.

get_listing

(ProxyMessage $data, WheelID $id) is Event

This method handles listing requests from clients. Should always succeed. Payload is an ArrayRef[SessionAlias].

PRIVATE_METHODS

after _start

(@args) is Event

The _start method is advised to hardcode the filter to use as a POE::Filter::Reference instance.

AUTHOR

Nicholas Perez <nperez@cpan.org>

COPYRIGHT AND LICENSE

This software is copyright (c) 2010 by Nicholas Perez.

This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.