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 )