our @ISA = qw(Exporter);
our @EXPORT = qw(
- new, request, register, unregister, streamed_request
+ new, request, register, unregister, event, streamed_request
);
our $VERSION = '0.9';
my $request = pack('CC/a*a*', CMD_REQUEST, $command, $out);
$self->{'Transport'}->send($request);
- my $response = $self->{'Transport'}->receive();
- my ($type, $data) = unpack('Ca*', $response);
-
- switch ($type)
+ while (1)
{
- case CMD_RESPONSE
- {
- return Vici::Message->from_data($data);
- }
- case CMD_UNKNOWN
- {
- die "unknown command '", $command, "'\n"
- }
- else
+ my $response = $self->{'Transport'}->receive();
+ my ($type, $data) = unpack('Ca*', $response);
+
+ switch ($type)
{
- die "invalid response type\n"
+ case CMD_RESPONSE
+ {
+ return Vici::Message->from_data($data);
+ }
+ case CMD_UNKNOWN
+ {
+ die "unknown command '", $command, "'\n"
+ }
+ else
+ {
+ #ignore, message might be for another thread
+ }
}
- };
+ }
}
sub register {
};
}
+sub event {
+ my $self = shift;
+
+ while (1)
+ {
+ my $response = $self->{'Transport'}->receive();
+ my ($type, $data) = unpack('Ca*', $response);
+ if ($type == EVENT)
+ {
+ (my $event_name, $data) = unpack('C/a*a*', $data);
+ my $msg = Vici::Message->from_data($data);
+ return ($event_name, $msg);
+ }
+ }
+}
+
sub streamed_request {
my ($self, $command, $event, $vars) = @_;
my $out = defined $vars ? $vars->encode() : '';
uninstall, list_sas, list_policies, list_conns, get_conns, list_certs,
list_authorities, get_authorities, load_conn, unload_conn, load_cert,
load_key, load_shared, clear_creds, load_authority, unload_authority,
- load_pool, unload_pool, get_pools
+ load_pool, unload_pool, get_pools, register_events, unregister_events,
+ listen_events
);
our $VERSION = '0.9';
return request('get-pools', @_);
}
+sub register_events {
+ my ($self, $events) = @_;
+ if (ref($events) eq 'ARRAY')
+ {
+ foreach my $event (@$events)
+ {
+ $self->{'Packet'}->register($event);
+ }
+ }
+ else
+ {
+ $self->{'Packet'}->register($events);
+ }
+}
+
+sub unregister_events {
+ my ($self, $events) = @_;
+ if (ref($events) eq 'ARRAY')
+ {
+ foreach my $event (@$events)
+ {
+ $self->{'Packet'}->register($event);
+ }
+ }
+ else
+ {
+ $self->{'Packet'}->register($events);
+ }
+}
+
+sub listen_events {
+ my ($self, $events) = @_;
+ return $self->{'Packet'}->event();
+}
+
# Private functions
sub request {