NAME

Net::Object::Peer::Ephemeral - Proxy role for ephemeal peers

VERSION

version 0.05

DESCRIPTION

This role's sole purpose is to inform a subscriber that the emitter is ephemeral (e.g., will disappear without an additional reference) and it should keep track of it. Normally only weak references to emittes are kept, so as to prevent them outliving their intended scope.

Sometimes, however, it is necessary that the emitter outlive its scope. For example, assume that $subscriber expects event A to be emitted when some condition has been met by $emitter, but $emitter actually emits B. $subscriber could tie $emitter's B event to it's own B callback, but if $subscriber searches its subscriptions for A event emitters, it won't find this one.

One workaround is to create a proxy object which subscribes to $emitter's B event and re-emits it (with $emitter as the emitter) as event A. How does one keep that object alive? Typically it would be created on the fly when passed to the subscriber, e.g.

$subscriber->subscribe( Translator->new( emitter => $emitter,
                                    from => C<B>, to => C<A> ),
                                    C<A> );

If $subscriber doesn't hold on to the proxy object, it will be destroyed immediately after the subscription, and the whole process fails.

Instead, if Translator consumes the Net::Ojbect::Peer::Ephemeral role, $subscriber will ensure it is not destroyed by holding strong reference to it. In this example, Translator should subscribe to the $emitter's detach event so that it can detach itself from $subscriber and thus be destroyed.

SYNTAX

# in class which will act as an intermediate/proxy
package Ephemeral;
with 'Net::Object::Peer::Ephemeral';

[...]

AUTHOR

Diab Jerius <djerius@cpan.org>

COPYRIGHT AND LICENSE

This software is Copyright (c) 2016 by Smithsonian Astrophysical Observatory.

This is free software, licensed under:

The GNU General Public License, Version 3, June 2007