mirror of
https://github.com/brmlab/brmdoor.git
synced 2025-06-08 11:44:01 +02:00
brmd status_update, record_update: Transform to events, introduce event registration
This commit is contained in:
parent
dbdd8e706b
commit
69cdcabd1e
1 changed files with 35 additions and 12 deletions
47
brmd/brmd.pl
47
brmd/brmd.pl
|
@ -18,15 +18,18 @@ my $stream = brmd::Stream->new();
|
||||||
|
|
||||||
POE::Session->create(
|
POE::Session->create(
|
||||||
package_states => [
|
package_states => [
|
||||||
main => [ qw(_default _start) ],
|
main => [ qw(_default _start
|
||||||
|
status_update record_update) ],
|
||||||
],
|
],
|
||||||
heap => { irc => $irc, web => $web, stream => $stream },
|
heap => { irc => $irc, web => $web, door => $door, stream => $stream },
|
||||||
);
|
);
|
||||||
|
|
||||||
$poe_kernel->run();
|
$poe_kernel->run();
|
||||||
|
|
||||||
|
|
||||||
sub _start {
|
sub _start {
|
||||||
|
$poe_kernel->post($_[HEAP]->{web}, 'register');
|
||||||
|
$poe_kernel->post($_[HEAP]->{door}, 'register');
|
||||||
}
|
}
|
||||||
|
|
||||||
sub _default {
|
sub _default {
|
||||||
|
@ -53,14 +56,14 @@ sub record_str {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub status_update {
|
sub status_update {
|
||||||
my ($newstatus) = @_;
|
my ($self, $newstatus) = @_[OBJECT, ARG0];
|
||||||
$status = $newstatus;
|
$status = $newstatus;
|
||||||
my $st = status_str();
|
my $st = status_str();
|
||||||
$poe_kernel->post( $irc, 'notify_update', 'brmstatus', $st );
|
$poe_kernel->post( $irc, 'notify_update', 'brmstatus', $st );
|
||||||
}
|
}
|
||||||
|
|
||||||
sub record_update {
|
sub record_update {
|
||||||
my ($newrecord) = @_;
|
my ($self, $newrecord) = @_[OBJECT, ARG0];
|
||||||
$record = $newrecord;
|
$record = $newrecord;
|
||||||
if ($record) {
|
if ($record) {
|
||||||
$poe_kernel->post( $stream, 'stream_start' );
|
$poe_kernel->post( $stream, 'stream_start' );
|
||||||
|
@ -88,7 +91,7 @@ sub new {
|
||||||
|
|
||||||
POE::Session->create(
|
POE::Session->create(
|
||||||
object_states => [
|
object_states => [
|
||||||
$self => [ qw(_start _default
|
$self => [ qw(_start _default register
|
||||||
serial_input serial_error) ],
|
serial_input serial_error) ],
|
||||||
],
|
],
|
||||||
);
|
);
|
||||||
|
@ -125,6 +128,13 @@ sub _default {
|
||||||
print join ' ', @output, "\n";
|
print join ' ', @output, "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub register {
|
||||||
|
my ($self, $sender) = @_[OBJECT, SENDER];
|
||||||
|
my $sid = $sender->ID;
|
||||||
|
$poe_kernel->refcount_increment($sid, 'observer_WWW'); # XXX: No decrement
|
||||||
|
push (@{$self->{'observers'}}, $sid);
|
||||||
|
}
|
||||||
|
|
||||||
sub serial_open {
|
sub serial_open {
|
||||||
my ($device) = @_;
|
my ($device) = @_;
|
||||||
# Open a serial port, and tie it to a file handle for POE.
|
# Open a serial port, and tie it to a file handle for POE.
|
||||||
|
@ -142,15 +152,19 @@ sub serial_open {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub serial_input {
|
sub serial_input {
|
||||||
my ($input) = ($_[ARG0]);
|
my ($self, $input) = @_[OBJECT, ARG0];
|
||||||
print ((scalar localtime)." $input\n");
|
print ((scalar localtime)." $input\n");
|
||||||
$input =~ /^(\d) (\d) (.*)$/ or return;
|
$input =~ /^(\d) (\d) (.*)$/ or return;
|
||||||
my ($cur_status, $cur_record, $brm) = ($1, $2, $3);
|
my ($cur_status, $cur_record, $brm) = ($1, $2, $3);
|
||||||
if ($cur_status != $status) {
|
if ($cur_status != $status) {
|
||||||
status_update($cur_status);
|
foreach (@{$self->{observers}}) {
|
||||||
|
$poe_kernel->post($_, 'status_update', $cur_status);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($cur_record != $record) {
|
if ($cur_record != $record) {
|
||||||
record_update($cur_record);
|
foreach (@{$self->{observers}}) {
|
||||||
|
$poe_kernel->post($_, 'record_update', $cur_record);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if ($brm =~ s/^CARD //) {
|
if ($brm =~ s/^CARD //) {
|
||||||
print "from door: $input\n";
|
print "from door: $input\n";
|
||||||
|
@ -188,7 +202,7 @@ sub new {
|
||||||
"/brmstatus.js" => \&web_brmstatus_js,
|
"/brmstatus.js" => \&web_brmstatus_js,
|
||||||
"/brmstatus.png" => \&web_brmstatus_png,
|
"/brmstatus.png" => \&web_brmstatus_png,
|
||||||
"/brmstatus.txt" => \&web_brmstatus_txt,
|
"/brmstatus.txt" => \&web_brmstatus_txt,
|
||||||
"/brmstatus-switch" => \&web_brmstatus_switch,
|
"/brmstatus-switch" => sub { $self->web_brmstatus_switch(@_) },
|
||||||
"/" => \&web_index
|
"/" => \&web_index
|
||||||
},
|
},
|
||||||
Headers => {Server => 'brmd/xxx'},
|
Headers => {Server => 'brmd/xxx'},
|
||||||
|
@ -196,7 +210,7 @@ sub new {
|
||||||
|
|
||||||
POE::Session->create(
|
POE::Session->create(
|
||||||
object_states => [
|
object_states => [
|
||||||
$self => [ qw(_start _default) ],
|
$self => [ qw(_start _default register) ],
|
||||||
],
|
],
|
||||||
heap => { web => $web },
|
heap => { web => $web },
|
||||||
);
|
);
|
||||||
|
@ -223,6 +237,13 @@ sub _default {
|
||||||
print join ' ', @output, "\n";
|
print join ' ', @output, "\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sub register {
|
||||||
|
my ($self, $sender) = @_[OBJECT, SENDER];
|
||||||
|
my $sid = $sender->ID;
|
||||||
|
$poe_kernel->refcount_increment($sid, 'observer_WWW'); # XXX: No decrement
|
||||||
|
push (@{$self->{'observers'}}, $sid);
|
||||||
|
}
|
||||||
|
|
||||||
sub disable_caching {
|
sub disable_caching {
|
||||||
my ($response) = @_;
|
my ($response) = @_;
|
||||||
$response->push_header("Cache-Control", "no-cache, must-revalidate");
|
$response->push_header("Cache-Control", "no-cache, must-revalidate");
|
||||||
|
@ -345,7 +366,7 @@ sub web_brmstatus_png {
|
||||||
}
|
}
|
||||||
|
|
||||||
sub web_brmstatus_switch {
|
sub web_brmstatus_switch {
|
||||||
my ($request, $response) = @_;
|
my ($self, $request, $response) = @_;
|
||||||
|
|
||||||
my $q = new CGI($request->content);
|
my $q = new CGI($request->content);
|
||||||
my $nick = $q->param('nick');
|
my $nick = $q->param('nick');
|
||||||
|
@ -356,7 +377,9 @@ sub web_brmstatus_switch {
|
||||||
$serial->flush();
|
$serial->flush();
|
||||||
|
|
||||||
$poe_kernel->post($irc, 'notify_manual_update', 'brmstatus', $nick );
|
$poe_kernel->post($irc, 'notify_manual_update', 'brmstatus', $nick );
|
||||||
main::status_update($newstatus);
|
foreach (@{$self->{observers}}) {
|
||||||
|
$poe_kernel->post($_, 'status_update', $newstatus);
|
||||||
|
}
|
||||||
|
|
||||||
$response->protocol("HTTP/1.1");
|
$response->protocol("HTTP/1.1");
|
||||||
$response->code(302);
|
$response->code(302);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue