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.