Author: bdonlan
Date: 2004-06-29 15:17:06 -0400 (Tue, 29 Jun 2004)
New Revision: 280
Modified:
trunk/main/client/lib/Haver/Client/POE.pm
Log:
* main/client/lib/Haver/Client/POE.pm:
- Use POE::Session::EventSource for event broadcasting
- Retrofit for POE::Session::Inheritable
- Use $self instead of $heap
Modified: trunk/main/client/lib/Haver/Client/POE.pm
===================================================================
--- trunk/main/client/lib/Haver/Client/POE.pm 2004-06-29 19:14:28 UTC (rev
279)
+++ trunk/main/client/lib/Haver/Client/POE.pm 2004-06-29 19:17:06 UTC (rev
280)
@@ -53,7 +53,7 @@
use Haver::Formats::Error;
use Carp;
use Digest::SHA1 qw(sha1_base64);
-require Exporter;
+use base 'POE::Session::EventSource';
our $VERSION = 0.06;
@@ -73,93 +73,85 @@
printf STDERR $fmt, @text;
}
+sub _object_states {
+ my ($self, $ehash) = @_;
+ $ehash = {(map {$_ => $_} qw{
+ _start
+ setoptions
-### SETUP
+ dispatch
+ dispatch_ref
-=head2 new($Z<>alias [, option => value ...])
+ connect
+ connected
+ connectfail
-Creates a new Haver::Client::POE session with alias $alias, and optionally
-sets one or more options (see C<setoptions>)
+ input
+ send_raw
+ send
+ _flush_msgq
+ net_error
-=cut
+ destroy
+ disconnect
+ force_close
+ flushed
+ cleanup
-sub new {
- my ($class, $alias, @options) = @_;
- carp "Can't call ->new on a ".(ref $class)." instance" if ref $class;
- #carp "Haver::Client can't be subclassed" if ($class ne __PACKAGE__);
- ## This is stupid restriction.
- POE::Session->create(package_states =>
- [ __PACKAGE__,
- [qw{
- _start
- setoptions
+ login
+ join
+ part
+ msg
+ pmsg
+ users
+ make
+ chans
- register
- unregister
- dispatch
- dispatch_ref
+ event_WANT
+ event_ACCEPT
+ event_REJECT
+ event_PING
+ event_CLOSE
+ event_IN
+
+ event_JOIN
+ event_PART
+ event_MSG
+ event_USERS
+ event_BYE
+ event_QUIT
+ event_CHANS
+ event_WARN
+ event_DIE
- connect
- connected
- connectfail
+ _default
+ }), %$ehash};
+ return $self->SUPER::_object_states($ehash);
+}
- input
- send_raw
- send
- _flush_msgq
- net_error
+### SETUP
- destroy
- disconnect
- force_close
- flushed
- cleanup
- _stop
+=head2 new($Z<>alias [, option => value ...])
- login
- join
- part
- msg
- pmsg
- users
- make
- chans
+Creates a new Haver::Client::POE session with alias $alias, and optionally
+sets one or more options (see C<setoptions>)
- event_WANT
- event_ACCEPT
- event_REJECT
- event_PING
- event_CLOSE
- event_IN
-
- event_JOIN
- event_PART
- event_MSG
- event_USERS
- event_BYE
- event_QUIT
- event_CHANS
- event_WARN
- event_DIE
+=cut
- _default
-
- }]],
- args => [$alias, @options]
- );
+sub new {
+ my ($class, $alias, %options) = @_;
+ my $self = $class->SUPER::new(prefix => delete($options{prefix}) ||
'haver_', args => [$alias, %options]);
return 1;
}
sub _start {
- my ($kernel, $heap, $session, $alias, @args) =
@_[KERNEL,HEAP,SESSION,ARG0..$#_];
- $kernel->alias_set($alias);
- %$heap = (alias => $alias,
- registrations => {},
- scope => undef,
- debug => 0,
- autorespond => { 'PING?' => 1, 'TIME?' => 1 },
- version => "Haver::Client::POE/$VERSION",
- );
+ my ($kernel, $self, $session, $alias, @args) =
@_[KERNEL,OBJECT,SESSION,ARG0..$#_];
+ $self->{alias} = $alias;
+ $kernel->alias_set($self->{alias});
+ $self->{scope} = undef;
+ $self->{debug} = 0;
+ $self->{autorespond} = { 'PING?' => 1, 'TIME?' => 1 };
+ $self->{version} = "Haver::Client::POE/$VERSION";
if (@args) {
_call('setoptions', @args);
}
@@ -186,11 +178,11 @@
=cut
sub setoptions {
- my ($kernel, $heap, %args) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, %args) = @_[KERNEL,OBJECT,ARG0..$#_];
my %setters = (
- debug => sub { $heap->{debug} = $_[0]; },
- autorespond => sub { $heap->{autorespond} = map { ($_ => 1) }
@_ },
- version => sub { $heap->{version} = $_[0]; },
+ debug => sub { $self->{debug} = $_[0]; },
+ autorespond => sub { $self->{autorespond} = map { ($_ => 1) }
@_ },
+ version => sub { $self->{version} = $_[0]; },
);
for (keys %args) {
$setters{$_}->($args{$_}) if exists $setters{$_};
@@ -205,39 +197,15 @@
the calling session as 'haver_eventname'. The special event name 'all' may be
specified to register for all
events. A given event will not be sent to any given session more than once.
-=cut
-
-sub register {
- my ($kernel, $heap, $sender, @events) =
@_[KERNEL,HEAP,SENDER,ARG0..$#_];
- for(@events) {
- if (!exists $heap->{registrations}->{$_}->{$sender->ID}) {
- $heap->{registrations}->{$_}->{$sender->ID} =
$heap->{alias} . "##$_";
- $kernel->refcount_increment($sender->ID, $heap->{alias}
. "##$_");
- }
- }
-}
-
=head2 unregister($Z<>event1 [,...])
Unregisters from the specified event. Events registered using 'all' must be
unregistered using 'all'.
=cut
-sub unregister {
- my ($kernel, $heap, $sender, @events) =
@_[KERNEL,HEAP,SENDER,ARG0..$#_];
- for(@events) {
- if (exists $heap->{registrations}->{$_}->{$sender->ID}) {
- delete $heap->{registrations}->{$_}->{$sender->ID};
- $kernel->refcount_decrement($sender->ID, $heap->{alias}
. "##$_");
- }
- }
-}
-
sub dispatch_ref {
- my ($kernel, $heap, $event, $args) = @_[KERNEL,HEAP,ARG0,ARG1];
- my %targets = (map { $_ => 1 }
(keys(%{$heap->{registrations}->{$event}}),
-
keys(%{$heap->{registrations}->{all}})));
- $kernel->post($_, "haver_$event", $args, $heap->{scope}) for keys
%targets;
+ my ($kernel, $self, $event, $args) = @_[KERNEL,OBJECT,ARG0,ARG1];
+ $kernel->yield('_dispatch', $event, $args, $self->{scope});
}
sub dispatch {
@@ -259,23 +227,23 @@
=cut
sub connect {
- my ($kernel, $heap, %args) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, %args) = @_[KERNEL,OBJECT,ARG0..$#_];
# XXX: Better error reporting
croak "Missing required parameter Host" unless exists $args{Host};
- if (exists $heap->{conn}) {
- $kernel->yield('disconnect') unless exists
$heap->{pending_connection};
- $heap->{pending_connection} = [%args];
+ if (exists $self->{conn}) {
+ $kernel->yield('disconnect') unless exists
$self->{pending_connection};
+ $self->{pending_connection} = [%args];
return;
}
- $heap->{UID} = $args{UID};
- $heap->{PASS} = $args{Password};
- $heap->{Host} = $args{Host};
- undef $heap->{want};
- $heap->{enabled} = 1; # Set to 0 when graceful shutdown
begins, to block user input
- $heap->{accepted} = 0; # Set to 1 when login is successful
- $heap->{dead} = 0; # Set to 1 when the socket
fails, to drop messages
+ $self->{UID} = $args{UID};
+ $self->{PASS} = $args{Password};
+ $self->{Host} = $args{Host};
+ undef $self->{want};
+ $self->{enabled} = 1; # Set to 0 when graceful shutdown
begins, to block user input
+ $self->{accepted} = 0; # Set to 1 when login is successful
+ $self->{dead} = 0; # Set to 1 when the socket
fails, to drop messages
$args{Port} ||= 7070;
- $heap->{connect_wheel} =
+ $self->{connect_wheel} =
POE::Wheel::SocketFactory->new(
RemoteAddress => $args{Host},
RemotePort => $args{Port},
@@ -292,11 +260,11 @@
=cut
sub disconnect {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
- $heap->{enabled} = 0;
- return if $heap->{closing};
- $heap->{closing} = 1;
- if ($heap->{want}) {
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
+ $self->{enabled} = 0;
+ return if $self->{closing};
+ $self->{closing} = 1;
+ if ($self->{want}) {
$kernel->yield('cleanup');
} else {
$kernel->yield('send', 'QUIT');
@@ -305,15 +273,15 @@
}
sub connected {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
my ($handle, $id) = @_[ARG0,ARG3];
- if (!exists $heap->{connect_wheel} ||
- $heap->{connect_wheel}->ID() != $id){
+ if (!exists $self->{connect_wheel} ||
+ $self->{connect_wheel}->ID() != $id){
close $handle;
return;
}
binmode $handle, ':utf8';
- $heap->{conn} =
+ $self->{conn} =
POE::Wheel::ReadWrite->new(
Handle => $handle,
Driver => POE::Driver::SysRW->new(),
@@ -322,19 +290,19 @@
FlushedEvent => 'flushed',
ErrorEvent => 'net_error'
);
- delete $heap->{connect_wheel};
- $heap->{flushed} = 1;
+ delete $self->{connect_wheel};
+ $self->{flushed} = 1;
_call('dispatch', 'connected');
}
sub connectfail {
- my ($kernel, $heap, $enum, $estr) = @_[KERNEL,HEAP,ARG1,ARG2];
+ my ($kernel, $self, $enum, $estr) = @_[KERNEL,OBJECT,ARG1,ARG2];
_call('dispatch', 'connect_fail', $enum, $estr);
- delete $heap->{connect_wheel};
+ delete $self->{connect_wheel};
}
sub net_error {
- my ($kernel, $heap, $enum, $estr) = @_[KERNEL,HEAP,ARG1,ARG2];
+ my ($kernel, $self, $enum, $estr) = @_[KERNEL,OBJECT,ARG1,ARG2];
_call('dispatch', 'disconnected', $enum, $estr);
$kernel->yield('cleanup');
}
@@ -342,10 +310,10 @@
### IO
sub input {
- my ($kernel, $heap, $event) = @_[KERNEL,HEAP,ARG0];
- _dprint 1, "S: ", join("\t", @$event), "\n" unless defined
$heap->{scope};
+ my ($kernel, $self, $event) = @_[KERNEL,OBJECT,ARG0];
+ _dprint 1, "S: ", join("\t", @$event), "\n" unless defined
$self->{scope};
my $ename = shift @$event;
- _call('dispatch', 'raw_in', $ename, @$event) unless defined
$heap->{scope};
+ _call('dispatch', 'raw_in', $ename, @$event) unless defined
$self->{scope};
_call("event_$ename", @$event);
}
@@ -356,44 +324,44 @@
=cut
sub send_raw {
- my ($kernel, $heap, @message) = @_[KERNEL,HEAP,ARG0..$#_];
- return if ($heap->{dead});
- eval { $heap->{conn}->put([EMAIL PROTECTED]); };
+ my ($kernel, $self, @message) = @_[KERNEL,OBJECT,ARG0..$#_];
+ return if ($self->{dead});
+ eval { $self->{conn}->put([EMAIL PROTECTED]); };
if ($@) {
# Ack, lost connection unexpectedly!
# Hopefully we get net_error soon
- $heap->{dead} = 1;
+ $self->{dead} = 1;
return;
}
_dprint 1, "C: ", join("\t", map { defined($_) ? $_ : '~UNDEF~' }
@message), "\n";
_call('dispatch', 'raw_out', @message);
- $heap->{flushed} = 0;
+ $self->{flushed} = 0;
}
sub send {
- my ($kernel, $heap, @message) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, @message) = @_[KERNEL,OBJECT,ARG0..$#_];
my $block = 0;
- if (!$heap->{enabled}) {
+ if (!$self->{enabled}) {
$block = 1;
- } elsif ($heap->{accepted} && !$heap->{want}) {
+ } elsif ($self->{accepted} && !$self->{want}) {
$block = 0;
- } elsif (!$heap->{want}) {
+ } elsif (!$self->{want}) {
# Before we get a S: ACCEPT we can't send anything not in
response to a S: WANT
$block = 1;
} elsif ($message[0] eq 'CANT') {
- $block = ($message[1] ne $heap->{want});
- } elsif ($message[0] ne $heap->{want}) {
+ $block = ($message[1] ne $self->{want});
+ } elsif ($message[0] ne $self->{want}) {
$block = 1;
}
if ($block) {
_dprint 1, "(blocked) C: ", join("\t", @message), "\n";
- push @{$heap->{messageq} ||= []}, [EMAIL PROTECTED];
+ push @{$self->{messageq} ||= []}, [EMAIL PROTECTED];
return;
}
- delete $heap->{want};
+ delete $self->{want};
$kernel->yield('send_raw', @message);
@@ -401,12 +369,12 @@
}
sub _flush_msgq {
- my ($kernel, $heap) = @_[KERNEL,HEAP];
- if (exists $heap->{messageq}) {
- for (@{$heap->{messageq}}) {
+ my ($kernel, $self) = @_[KERNEL,OBJECT];
+ if (exists $self->{messageq}) {
+ for (@{$self->{messageq}}) {
$kernel->yield('send', @$_);
}
- delete $heap->{messageq};
+ delete $self->{messageq};
}
}
@@ -417,12 +385,12 @@
# hmm, I reformatted this a bit so it is possible
# to easily edit in vim. :P (dylan)
sub event_WANT {
- my ($kernel, $heap, $wanted, @arg) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $wanted, @arg) = @_[KERNEL,OBJECT,ARG0,ARG1];
$wanted = uc $wanted;
- $heap->{want} = $wanted;
+ $self->{want} = $wanted;
my %wants = (
IDENT => sub {
- $kernel->yield('send', 'IDENT', $heap->{UID}, 'user',
$heap->{version});
+ $kernel->yield('send', 'IDENT', $self->{UID}, 'user',
$self->{version});
},
AUTH => sub {
# XXX: More extensible AUTH system later too
@@ -433,12 +401,12 @@
return;
}
$kernel->yield('send', 'AUTH', 'pass');
- $heap->{auth} = 'pass';
+ $self->{auth} = 'pass';
},
'AUTH:PASS' => sub {
# XXX: Better support for namespaces
- if($heap->{PASS}) {
- $kernel->yield('login', $heap->{PASS});
+ if($self->{PASS}) {
+ $kernel->yield('login', $self->{PASS});
return;
}
$kernel->yield('dispatch', 'login_request');
@@ -452,73 +420,73 @@
}
sub event_ACCEPT {
- my ($kernel, $heap) = @_[KERNEL,HEAP];
- $heap->{logged_in} = 1;
- $heap->{accepted} = 1;
+ my ($kernel, $self) = @_[KERNEL,OBJECT];
+ $self->{logged_in} = 1;
+ $self->{accepted} = 1;
_call('dispatch', 'login');
$kernel->yield('_flush_msgq');
}
sub event_REJECT {
- my ($kernel, $heap, $uid, $err) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $uid, $err) = @_[KERNEL,OBJECT,ARG0,ARG1];
my $e = new Haver::Formats::Error;
_call('dispatch', 'login_fail',
$err,
$e->get_short_desc($err),
$e->format( $e->get_long_desc($err), $uid )
);
- delete $heap->{UID};
- delete $heap->{PASS};
- $heap->{want} = 'UID';
+ delete $self->{UID};
+ delete $self->{PASS};
+ $self->{want} = 'UID';
}
sub event_PING {
- my ($kernel, $heap, @junk) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, @junk) = @_[KERNEL,OBJECT,ARG0..$#_];
$kernel->yield('send', 'PONG', @junk);
}
sub event_CLOSE {
- my ($kernel, $heap, $etyp, $estr) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $etyp, $estr) = @_[KERNEL,OBJECT,ARG0,ARG1];
_call('dispatch', 'close', $etyp, $estr);
}
sub event_JOIN {
- my ($kernel, $heap, $uid) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $uid) = @_[KERNEL,OBJECT,ARG0,ARG1];
_call('dispatch', ($uid eq '.' ||
- $uid eq $heap->{UID}) ? 'joined' : 'join',
+ $uid eq $self->{UID}) ? 'joined' : 'join',
$uid);
}
sub event_PART {
- my ($kernel, $heap, $uid) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $uid) = @_[KERNEL,OBJECT,ARG0,ARG1];
_call('dispatch', ($uid eq '.' ||
- $uid eq $heap->{UID}) ? 'parted' : 'part',
+ $uid eq $self->{UID}) ? 'parted' : 'part',
$uid);
}
my %autorespond = (
'PING?' => sub {
- my ($kernel, $heap, $who, @junk) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, $who, @junk) = @_[KERNEL,OBJECT,ARG0..$#_];
if ([EMAIL PROTECTED]) {
@junk = (''); # This silences a warning elsewhere
}
$kernel->yield('pmsg', 'PING', $who, @junk);
},
'TIME?' => sub {
- my ($kernel, $heap, $who) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $who) = @_[KERNEL,OBJECT,ARG0];
$kernel->yield('pmsg', 'TIME', $who, format_datetime(time()));
},
);
sub event_MSG {
- my ($kernel, $heap, $uid, $type, @text) = @_[KERNEL,HEAP,ARG0..$#_];
- if ($heap->{autorespond}->{$type} && exists $autorespond{$type}) {
+ my ($kernel, $self, $uid, $type, @text) = @_[KERNEL,OBJECT,ARG0..$#_];
+ if ($self->{autorespond}->{$type} && exists $autorespond{$type}) {
$autorespond{$type}->(@_[0..ARG0-1], $uid, @text);
}
# I can't help but feel that argument order of msg and pmsg
# should better match reality.... (dylan)
- if ($heap->{scope}) {
+ if ($self->{scope}) {
_call('dispatch', 'msg', $type, $uid, @text);
} else {
_call('dispatch', 'pmsg', $type, $uid, @text);
@@ -527,23 +495,23 @@
}
sub event_USERS {
- my ($kernel, $heap, @who) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, @who) = @_[KERNEL,OBJECT,ARG0..$#_];
_call('dispatch_ref', 'users', [EMAIL PROTECTED]);
}
sub event_BYE {
- my ($kernel, $heap, $why) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $why) = @_[KERNEL,OBJECT,ARG0];
_call('dispatch', 'bye', $why);
}
sub event_QUIT {
- my ($kernel, $heap, $who, $why) = @_[KERNEL,HEAP,ARG0,ARG1];
+ my ($kernel, $self, $who, $why) = @_[KERNEL,OBJECT,ARG0,ARG1];
_call('dispatch', 'quit', $who, $why);
}
sub event_CHANS {
- my ($kernel, $heap, @channels) = @_[KERNEL,HEAP,ARG0..$#_];
+ my ($kernel, $self, @channels) = @_[KERNEL,OBJECT,ARG0..$#_];
_call('dispatch', 'chans', @channels);
}
@@ -570,11 +538,11 @@
}
sub event_IN {
- my ($kernel, $heap, $scope, @cmd) = @_[KERNEL,HEAP,ARG0..$#_];
- my $save = $heap->{scope};
- $heap->{scope} = $scope;
+ my ($kernel, $self, $scope, @cmd) = @_[KERNEL,OBJECT,ARG0..$#_];
+ my $save = $self->{scope};
+ $self->{scope} = $scope;
_call('input', [EMAIL PROTECTED]);
- $heap->{scope} = $save;
+ $self->{scope} = $save;
}
### CLIENT EVENTS
@@ -587,11 +555,11 @@
=cut
sub login {
- my ($kernel, $heap, $pass) = @_[KERNEL,HEAP,ARG0,ARG1];
- $heap->{PASS} = $pass if $pass;
- if ($heap->{want} eq 'AUTH:PASS') {
- if (defined $heap->{PASS}) {
- $kernel->yield('send', 'AUTH:PASS',
sha1_base64($heap->{UID} . $heap->{PASS} . $heap->{Host}));
+ my ($kernel, $self, $pass) = @_[KERNEL,OBJECT,ARG0,ARG1];
+ $self->{PASS} = $pass if $pass;
+ if ($self->{want} eq 'AUTH:PASS') {
+ if (defined $self->{PASS}) {
+ $kernel->yield('send', 'AUTH:PASS',
sha1_base64($self->{UID} . $self->{PASS} . $self->{Host}));
} else {
$kernel->yield('send', 'CANT', 'AUTH:PASS');
}
@@ -605,7 +573,7 @@
=cut
sub join {
- my ($kernel, $heap, $where) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $where) = @_[KERNEL,OBJECT,ARG0];
$kernel->yield('send', 'JOIN', $where);
}
@@ -616,7 +584,7 @@
=cut
sub part {
- my ($kernel, $heap, $where) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $where) = @_[KERNEL,OBJECT,ARG0];
$kernel->yield('send', 'PART', $where);
}
@@ -627,7 +595,7 @@
=cut
sub make {
- my ($kernel, $heap, $cid) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $cid) = @_[KERNEL,OBJECT,ARG0];
$kernel->yield('send', 'MAKE', $cid);
}
@@ -638,7 +606,7 @@
=cut
sub msg {
- my ($kernel, $heap, $type, $where, $message) =
@_[KERNEL,HEAP,ARG0..ARG2];
+ my ($kernel, $self, $type, $where, $message) =
@_[KERNEL,OBJECT,ARG0..ARG2];
$kernel->yield('send', 'IN', $where, 'MSG', $type, $message);
}
@@ -649,7 +617,7 @@
=cut
sub pmsg {
- my ($kernel, $heap, $type, $where, $message) =
@_[KERNEL,HEAP,ARG0..ARG2];
+ my ($kernel, $self, $type, $where, $message) =
@_[KERNEL,OBJECT,ARG0..ARG2];
$kernel->yield('send', 'TO', $where, 'MSG', $type, $message);
}
@@ -660,7 +628,7 @@
=cut
sub users {
- my ($kernel, $heap, $where) = @_[KERNEL,HEAP,ARG0];
+ my ($kernel, $self, $where) = @_[KERNEL,OBJECT,ARG0];
$kernel->yield('send', 'IN', $where, 'USERS');
}
@@ -678,37 +646,37 @@
### SHUTDOWN
sub force_close {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
- return if $heap->{closing} == 3;
- if ($heap->{closing} == 2 || $heap->{flushed}){ # Flushed or flush
timeout
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
+ return if $self->{closing} == 3;
+ if ($self->{closing} == 2 || $self->{flushed}){ # Flushed or flush
timeout
$kernel->yield('cleanup');
_call('dispatch', 'disconnected', -1, 'Disconnected');
$kernel->delay('force_close');
- $heap->{closing} = 3;
+ $self->{closing} = 3;
return;
}
- $heap->{closing} = 2;
+ $self->{closing} = 2;
$kernel->delay('force_close', 5);
}
sub flushed {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
- if (defined $heap->{closing} && $heap->{closing} == 2) {
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
+ if (defined $self->{closing} && $self->{closing} == 2) {
$kernel->yield('force_close');
}
- $heap->{flushed} = 1;
+ $self->{flushed} = 1;
}
sub cleanup {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
- delete $heap->{$_} for qw(conn flushed closing UID PASS want messageq
enabled accepted dead);
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
+ delete $self->{$_} for qw(conn flushed closing UID PASS want messageq
enabled accepted dead);
$kernel->delay('force_close');
- if ($heap->{destroy_pending}) {
+ if ($self->{destroy_pending}) {
$kernel->yield('destroy');
- } elsif (exists $heap->{pending_connection}) {
- $kernel->yield('connect', @{$heap->{pending_connection}});
- delete $heap->{pending_connection};
+ } elsif (exists $self->{pending_connection}) {
+ $kernel->yield('connect', @{$self->{pending_connection}});
+ delete $self->{pending_connection};
}
}
@@ -721,29 +689,18 @@
=cut
sub destroy {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
+ my ($kernel, $self) = @_[KERNEL, OBJECT];
_dprint 1, "Destroying.\n";
- if (exists $heap->{conn}){
- $heap->{destroy_pending} = 1;
+ if (exists $self->{conn}){
+ $self->{destroy_pending} = 1;
$kernel->yield('disconnect');
- return;
+ return;
}
- $kernel->alias_remove($heap->{alias});
+ $kernel->alias_remove($self->{alias});
}
-sub _stop {
- my ($kernel, $heap) = @_[KERNEL, HEAP];
- foreach my $evt (keys %{$heap->{registrations}}) {
- my $ehash = $heap->{registrations}->{$evt};
- foreach my $session (keys %$ehash) {
- my $refcount = $ehash->{$session};
- $kernel->refcount_decrement($session, $refcount);
- }
- }
-}
-
sub _default {
- my ( $kernel, $state, $event, $args, $heap ) = @_[ KERNEL, STATE, ARG0,
ARG1, HEAP ];
+ my ( $kernel, $state, $event, $args, $self ) = @_[ KERNEL, STATE, ARG0,
ARG1, OBJECT ];
$args ||= []; # Prevents uninitialized-value warnings.
DEBUG: "default: $state = $event. Args:\n";
DUMP: $args;