AnyEvent-GPSD
view release on metacpan or search on metacpan
=cut
sub new {
my $class = shift;
my $self = bless {
@_,
interval => 1,
fix => { time => AnyEvent->now, mode => 1 },
}, $class;
$self->interval_timer;
$self->connect;
$self
}
sub DESTROY {
my ($self) = @_;
$self->record_log;
}
}
}
sub retry {
my ($self) = @_;
delete $self->{fh};
delete $self->{command};
Scalar::Util::weaken $self;
$self->{retry_w} = AnyEvent->timer (after => 1, cb => sub {
delete $self->{retry_w};
$self->connect;
});
}
# make sure we send "no fix" updates when we lose connectivity
sub interval_timer {
my ($self) = @_;
$self->{interval_w} = AnyEvent->timer (after => $self->{interval}, cb => sub {
if (AnyEvent->now - $self->{fix}{time} > $self->{interval} * 1.9) {
$self->{fix}{mode} = 1;
$self->event (fix => $self->{fix});
}
$self->interval_timer;
});
Scalar::Util::weaken $self;
}
sub connect {
my ($self) = @_;
return if $self->{fh};
}
if (
$type eq "start"
or ($self->{compress}
and $self->{fix} && ($self->{fix}{mode} < 2 || $self->{fix}{speed} < $self->{min_speed}))
) {
$self->{replay_now} = $time;
}
$self->{replay_timer} = AnyEvent->timer (after => $time - $self->{replay_now}, cb => sub {
$self->{replay_now} = $time;
$self->{command} = []; # no can do
$self->feed ($data[0]) if $type eq "raw";
$self->{replay_cb}();
});
}
};
$self->{replay_cb}();
} else {
delete $self->{stretch};
delete $self->{compress};
delete $self->{replay_timer};
delete $self->{replay_cb};
}
}
=back
=head1 SEE ALSO
L<AnyEvent>.
( run in 0.983 second using v1.01-cache-2.11-cpan-49f99fa48dc )