BACnet

 view release on metacpan or  search on metacpan

lib/BACnet/Socket.pm  view on Meta::CPAN

        if (
            defined $self->{reader_of}
            { $addr . ':' . $packet->{payload}{invoke_id} }{on_response} )
        {
            $self->{reader_of}{ $addr . ':' . $packet->{payload}{invoke_id} }
              {on_response}
              ->( $self->{device}, $packet->{payload}, $port, $ip );
        }
        my $r = delete $self->{reader_of}
          { $addr . ':' . $packet->{payload}{invoke_id} };
        $self->loop->unwatch_time( $r->{timer} );

        if ( defined $r->{future} ) {
            $r->{future}->done($packet);
        }

        return;
    }

    $self->{device}->_react( $packet, $port, $ip );
}

lib/BACnet/Socket.pm  view on Meta::CPAN

        my $f  = $self->loop->new_future;
        my $id = $self->loop->watch_time(
            after => $args{timeout} // $self->{timeout},
            code  => sub {
                delete $self->{reader_of}{ $addr . ':' . $args{invoke_id} };
                $ok = 0;
                $f->fail("no response from $ip:$port");
            },
        );
        $self->{reader_of}{ $addr . ':' . $args{invoke_id} } = {
            timer       => $id,
            future      => $f,
            packet      => $packet,
            on_response => $args{on_response}
        };
        return $f->get if ( $f->await->is_done && $ok );
    }

    $self->_unlock_adr( $lock, $addr . ':' . $args{invoke_id} );

    return undef;



( run in 0.586 second using v1.01-cache-2.11-cpan-0d24bc4d141 )