AnyEvent-MQTT
view release on metacpan or search on metacpan
bin/anyevent-mqtt-monitor view on Meta::CPAN
sub insert {
my ($list, $row, $key, $first, $last) = @_;
$key = $row->[0] unless (defined $key);
$first = 0 unless (defined $first);
$last = (scalar @$list) - 1 unless (defined $last);
# print STDERR "insert: $first $last $key\n";
if ($last == -1) {
# print "inserting in empty list\n";
push @$list, $row;
return;
}
my $first_key = $list->[$first]->[0];
my $last_key = $list->[$last]->[0];
if ($first_key eq $key) {
# print "overwriting at ", $first, " c\n";
$list->[$first] = $row;
return;
}
if ($first_key gt $key) {
# print "inserting at ", $first, " c\n";
splice @$list, $first, 0, $row;
return;
}
if ($key eq $last_key) {
# print "overwriting at ", $last, " c\n";
$list->[$last] = $row;
return;
}
if ($key ge $last_key) {
# print "inserting at ", $last+1, " d\n";
splice @$list, $last+1, 0, $row;
return;
}
my $mid = $first + int(($last-$first)/2);
# print STDERR "insert: mid = $mid\n";
if ($mid == $first || $mid == $last) {
# print "inserting at ", $first+1, " e\n";
splice @$list, $first+1, 0, $row;
return;
}
my $mid_key = $list->[$mid]->[0];
# print "mid = $mid_key B\n";
if ($mid_key ge $key) {
return insert($list, $row, $key, $first, $mid);
} else {
return insert($list, $row, $key, $mid, $last);
}
}
sub button_press {
my ($widget, $event) = @_;
return unless (($event->button == 3) && ($event->type eq "button-press"));
my ($path) = $widget->get_path_at_pos($event->x, $event->y);
return 1 unless ($path);
my $row = $slist->get_row_data_from_path($path);
my $src = $row->[0];
return 1 unless ($src);
my $r = $d{src}->{$src};
return 1 unless ($r);
$d{selected} = $src;
$menu->popup(undef,undef,undef,undef, $event->button, $event->time);
return 1;
}
sub history_callback {
my $src = $d{selected} || return 1;
my @list;
$d{hist_row} = [];
foreach (@{$d{src}->{$src}->{hist}}) {
my ($msg, $t) = @$_;
push @list, [ strftime($timefmt, localtime($t)), $msg->string ];
push @{$d{hist_row}}, [$msg, $t];
}
@{$hist_list->{data}} = @list;
$dialog->show_all();
$dialog->resize(1, 1);
return 1;
}
sub hist_button_press {
my ($widget, $event) = @_;
return unless (($event->button == 3) && ($event->type eq "button-press"));
my ($path) = $widget->get_path_at_pos($event->x, $event->y);
return 1 unless ($path);
my $index = $path->to_string();
my $rec = $d{hist_row}->[$index];
return 1 unless ($rec);
$d{hist_selected} = $rec;
$hist_menu->popup(undef,undef,undef,undef, $event->button, $event->time);
return 1;
}
sub dump_callback {
print $d{hist_selected}->[0]->string, "\n";
}
__END__
=pod
=encoding UTF-8
=head1 NAME
anyevent-mqtt-sub - Perl script for subscribing to an MQTT topic
=head1 VERSION
version 1.212810
=head1 SYNOPSIS
anyevent-mqtt-sub [options] topic1 [topic2] [topic3] ...
=head1 DESCRIPTION
This script subscribes to one or more MQTT topics and prints any
messages that it receives to stdout.
=head1 OPTIONS
=over
=item B<-help>
Print a brief help message.
=item B<-man>
Print the manual page.
=item B<-host A.B.C.D>
The host running the MQTT service. The default is C<127.0.0.1>.
=item B<-port NNNNN>
The port of the running MQTT service. The default is 1883.
=item B<-qos N>
The QoS level for the published message. The default is
0 (C<MQTT_QOS_AT_MOST_ONCE>).
=item B<-verbose>
Include more verbose output.
=item B<-keepalive NNN>
( run in 1.563 second using v1.01-cache-2.11-cpan-54e63673c56 )