Skip to content

Commit

Permalink
Simplified default callbacks that emit events. Added stubs for other …
Browse files Browse the repository at this point in the history
…necessary roles.
  • Loading branch information
rcaputo committed May 15, 2010
1 parent 7a303d3 commit b19db88
Show file tree
Hide file tree
Showing 12 changed files with 75 additions and 28 deletions.
1 change: 1 addition & 0 deletions eg/roles/Alarm.pm
@@ -0,0 +1 @@
# TODO - An absolute time alarm that can be snoozed, etc.
1 change: 1 addition & 0 deletions eg/roles/Connects.pm
@@ -0,0 +1 @@
# TODO - Makes a connection.
1 change: 1 addition & 0 deletions eg/roles/Datagrams.pm
@@ -0,0 +1 @@
# TODO - Interacts with datagram sockets.
24 changes: 24 additions & 0 deletions eg/roles/EmitHelper.pm
@@ -0,0 +1,24 @@
package EmitHelper;

use warnings;
use strict;

use Exporter;
use base 'Exporter';

our @EXPORT_OK = qw(default_emit);

# Helper function. Returns a role method that emits an event. Used
# as the default callback for many things.

sub default_emit {
my ($cb_name, $event) = @_;
return(
$cb_name => sub {
my ($self, $args) = @_;
$self->emit(event => $event, args => $args);
}
);
}

1;
1 change: 1 addition & 0 deletions eg/roles/Listens.pm
@@ -0,0 +1 @@
# TODO - Listens for new connections.
1 change: 1 addition & 0 deletions eg/roles/ReapsPids.pm
@@ -0,0 +1 @@
# TODO - Handle SIGCHLD
32 changes: 32 additions & 0 deletions eg/roles/Signal.pm
@@ -0,0 +1,32 @@
package Signal;
use MoseX::Role::Parameterized;

parameter signal => (
isa => 'Str',
required => 1,
);

parameter cb_signal => (
isa => 'Str',
default => sub {
my $self = shift;
"on_" . lc($self->signal()) . "_caught";
},
lazy => 1,
);

role {
after BUILD => sub {
# ... register the handler
};

method stop => sub {
# ... deregister the signal handler
};

after DEMOLISH => sub {
# ... make sure the signal is not watched anymore
};
};

1;
1 change: 1 addition & 0 deletions eg/roles/Signalable.pm
@@ -0,0 +1 @@
# TODO - Handle signals, generically.
32 changes: 6 additions & 26 deletions eg/roles/Stream.pm
Expand Up @@ -4,32 +4,12 @@ extends 'Reflex::Object';

has handle => ( is => 'rw', isa => 'FileHandle', required => 1 );

with 'Streamable' => { handle => 'handle' };
with 'Streamable' => {
handle => 'handle',

# TODO - Would be nice to alias put_handle() to put().
sub put {
my $self = shift;
$self->put_handle(@_);
}

# Default callback emits an event.
# TODO - Common convention. How to make this generic?
sub on_handle_data {
my ($self, $args) = @_;
$self->emit(
event => "data",
args => $args
);
}

# Default callback emits an event.
# TODO - Common convention. How to make this generic?
sub on_handle_error {
my ($self, $args) = @_;
$self->emit(
event => "data",
args => $args
);
}
# Expose put_handle() as put().
-alias => { put_handle => 'put' },
-excludes => 'put_handle',
};

1;
7 changes: 5 additions & 2 deletions eg/roles/Streamable.pm
@@ -1,5 +1,6 @@
package Streamable;
use MooseX::Role::Parameterized;
use EmitHelper qw(default_emit);

use Scalar::Util qw(weaken);

Expand Down Expand Up @@ -93,8 +94,6 @@ role {
errfun => "syswrite",
}
);

$self->_emit_failure("syswrite");
return;
}

Expand All @@ -115,6 +114,10 @@ role {
# Flushed it all. Yay!
return 0;
};

# Default callbacks that re-emit their parameters.
method default_emit($cb_data, "data");
method default_emit($cb_error, "error");
};

1;
1 change: 1 addition & 0 deletions eg/roles/Ticker.pm
@@ -0,0 +1 @@
# TODO - A periodic timer that throws repeating events.
1 change: 1 addition & 0 deletions eg/roles/Timeout.pm
@@ -0,0 +1 @@
# TODO - A delay-like timeout that can be reset.

0 comments on commit b19db88

Please sign in to comment.