| POE-Component-IKC documentation | Contained in the POE-Component-IKC distribution. |
POE::Component::IKC::Specifier - IKC event specifer
use POE;
use POE::Component::IKC::Specifier;
$state=specifier_parse('poe://*/timeserver/connect');
print 'The foreign state is '.specifier_name($state);
This is a helper module that encapsulates POE IKC specifiers. An IKC specifier is a way of designating either a kernel, a session or a state within a IKC cluster.
IKC specifiers have the folloing format :
poe:://kernel/session/state
kernel may a kernel name, a kernel ID, blank (for local kernel), a '*' (all known foreign kernels) or host:port (not currently supported).
session may be any session alias that has been published by the foreign kernel.
state is a state that has been published by a foreign session.
Examples :
poe://Pulse/timeserver/connectState 'connect' in session 'timeserver' on kernel 'Pulse'.
poe:/timeserver/connectState 'connect' in session 'timeserver' on the local kernel.
poe://*/timeserver/connectState 'connect' in session 'timeserver' on any known foreign kernel.
poe://Billy/bob/Session 'bob' on foreign kernel 'Billy'.
specifier_parse($spec)Turn a specifier into the internal representation (hash ref). Returns undef() if the specifier wasn't valid.
print Dumper specifer_parse('poe://Pulse/timeserver/time');
would print
$VAR1 = {
kernel => 'Pulse',
session => 'timeserver',
state => 'time',
};
Note : the internal representation might very well change some day.
specifier_name($spec)Turns a specifier into a string.
Philip Gwyn, <perl-ikc at pied.nu>
Copyright 1999-2009 by Philip Gwyn. All rights reserved.
This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
| POE-Component-IKC documentation | Contained in the POE-Component-IKC distribution. |
package POE::Component::IKC::Specifier; ############################################################ # $Id: Specifier.pm 494 2009-05-08 18:36:12Z fil $ # # Copyright 1999-2009 Philip Gwyn. All rights reserved. # This program is free software; you can redistribute it and/or modify # it under the same terms as Perl itself. # # Contributed portions of IKC may be copyright by their respective # contributors. use strict; use vars qw($VERSION @ISA @EXPORT @EXPORT_OK); use Carp; require Exporter; @ISA = qw(Exporter); @EXPORT = qw( specifier_parse specifier_name specifier_part); $VERSION = '0.2200'; sub DEBUG { 0 } #---------------------------------------------------- # Turn an specifier into a hash ref sub specifier_parse ($) { my($specifier)=@_; return if not $specifier; my $kernelRE = q((?:\*) | (?:[-. \w]+) | (?:[a-zA-Z0-9][-.a-zA-Z0-9]+:\d+) | (?:unix:[-.\w]+(?::\d+-\d+)?) ); unless(ref $specifier) { if($specifier=~m(^poe: (?: (//) ($kernelRE)? )? (?: (/) ([- \w]+) )? (?: (/)? ([- \w]*) )? (?: \x3f (\w+) )? $)x) { $specifier={kernel=>$2, session=>$4, state=>$6}; $specifier->{args}=$7 if $7; } elsif( $specifier =~ m(^ (?:(?://)($kernelRE)/)? (?:([- \w]+)/)? (?:([- \w]+))? (?: \x3f (\w+) )? $)x ) { $specifier = { kernel=>$1, session=>$2, state=>$3 }; $specifier->{args} = $4 if $4; } else { return; } } elsif('HASH' ne ref $specifier) { # carp "Why is specifier a ", ref $specifier; return; } $specifier->{kernel}||=''; $specifier->{session}||=''; $specifier->{state}||=''; return $specifier; } sub specifier_part ($$) { my($specifier, $part)=@_; return if not $specifier; $specifier="poe://$specifier" unless ref $specifier or $specifier=~/^poe:/; $specifier=specifier_parse $specifier; return if not $specifier; return $specifier->{$part}; } #---------------------------------------------------- # Turn an specifier into a string sub specifier_name ($) { my($specifier)=@_; return $specifier unless(ref $specifier); if(ref($specifier) eq 'ARRAY') { $specifier={kernel=>'', session=>$specifier->[0], state=>$specifier->[1], }; } my $name='poe:'; if($specifier->{kernel}) { $name.='//'; $name.=$specifier->{kernel}; } if($specifier->{session}) { $name.='/'.$specifier->{session}; } $name.="/$specifier->{state}" if $specifier->{state}; return $name; } 1; __END__