summaryrefslogtreecommitdiffstats
path: root/upstream/debian-unstable/man3/Test2::IPC::Driver.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/debian-unstable/man3/Test2::IPC::Driver.3perl')
-rw-r--r--upstream/debian-unstable/man3/Test2::IPC::Driver.3perl279
1 files changed, 279 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man3/Test2::IPC::Driver.3perl b/upstream/debian-unstable/man3/Test2::IPC::Driver.3perl
new file mode 100644
index 00000000..bcb6ba05
--- /dev/null
+++ b/upstream/debian-unstable/man3/Test2::IPC::Driver.3perl
@@ -0,0 +1,279 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "Test2::IPC::Driver 3perl"
+.TH Test2::IPC::Driver 3perl 2024-01-12 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+Test2::IPC::Driver \- Base class for Test2 IPC drivers.
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& package Test2::IPC::Driver::MyDriver;
+\&
+\& use base \*(AqTest2::IPC::Driver\*(Aq;
+\&
+\& ...
+.Ve
+.SH METHODS
+.IX Header "METHODS"
+.ie n .IP $self\->abort($msg) 4
+.el .IP \f(CW$self\fR\->abort($msg) 4
+.IX Item "$self->abort($msg)"
+If an IPC encounters a fatal error it should use this. This will print the
+message to STDERR with \f(CW\*(AqIPC Fatal Error: \*(Aq\fR prefixed to it, then it will
+forcefully exit 255. IPC errors may occur in threads or processes other than
+the main one, this method provides the best chance of the harness noticing the
+error.
+.ie n .IP $self\->abort_trace($msg) 4
+.el .IP \f(CW$self\fR\->abort_trace($msg) 4
+.IX Item "$self->abort_trace($msg)"
+This is the same as \f(CW\*(C`$ipc\->abort($msg)\*(C'\fR except that it uses
+\&\f(CW\*(C`Carp::longmess\*(C'\fR to add a stack trace to the message.
+.SH "LOADING DRIVERS"
+.IX Header "LOADING DRIVERS"
+Test2::IPC::Driver has an \f(CWimport()\fR method. All drivers inherit this import
+method. This import method registers the driver.
+.PP
+In most cases you just need to load the desired IPC driver to make it work. You
+should load this driver as early as possible. A warning will be issued if you
+load it too late for it to be effective.
+.PP
+.Vb 2
+\& use Test2::IPC::Driver::MyDriver;
+\& ...
+.Ve
+.SH "WRITING DRIVERS"
+.IX Header "WRITING DRIVERS"
+.Vb 3
+\& package Test2::IPC::Driver::MyDriver;
+\& use strict;
+\& use warnings;
+\&
+\& use base \*(AqTest2::IPC::Driver\*(Aq;
+\&
+\& sub is_viable {
+\& return 0 if $^O eq \*(Aqwin32\*(Aq; # Will not work on windows.
+\& return 1;
+\& }
+\&
+\& sub add_hub {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& ... # Make it possible to contact the hub
+\& }
+\&
+\& sub drop_hub {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& ... # Nothing should try to reach the hub anymore.
+\& }
+\&
+\& sub send {
+\& my $self = shift;
+\& my ($hid, $e, $global) = @_;
+\&
+\& ... # Send the event to the proper hub.
+\&
+\& # This may notify other procs/threads that there is a pending event.
+\& Test2::API::test2_ipc_set_pending($uniq_val);
+\& }
+\&
+\& sub cull {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& my @events = ...; # Here is where you get the events for the hub
+\&
+\& return @events;
+\& }
+\&
+\& sub waiting {
+\& my $self = shift;
+\&
+\& ... # Notify all listening procs and threads that the main
+\& ... # process/thread is waiting for them to finish.
+\& }
+\&
+\& 1;
+.Ve
+.SS "METHODS SUBCLASSES MUST IMPLEMENT"
+.IX Subsection "METHODS SUBCLASSES MUST IMPLEMENT"
+.ie n .IP $ipc\->is_viable 4
+.el .IP \f(CW$ipc\fR\->is_viable 4
+.IX Item "$ipc->is_viable"
+This should return true if the driver works in the current environment. This
+should return false if it does not. This is a CLASS method.
+.ie n .IP $ipc\->add_hub($hid) 4
+.el .IP \f(CW$ipc\fR\->add_hub($hid) 4
+.IX Item "$ipc->add_hub($hid)"
+This is used to alert the driver that a new hub is expecting events. The driver
+should keep track of the process and thread ids, the hub should only be dropped
+by the proc+thread that started it.
+.Sp
+.Vb 3
+\& sub add_hub {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& ... # Make it possible to contact the hub
+\& }
+.Ve
+.ie n .IP $ipc\->drop_hub($hid) 4
+.el .IP \f(CW$ipc\fR\->drop_hub($hid) 4
+.IX Item "$ipc->drop_hub($hid)"
+This is used to alert the driver that a hub is no longer accepting events. The
+driver should keep track of the process and thread ids, the hub should only be
+dropped by the proc+thread that started it (This is the drivers responsibility
+to enforce).
+.Sp
+.Vb 3
+\& sub drop_hub {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& ... # Nothing should try to reach the hub anymore.
+\& }
+.Ve
+.ie n .IP "$ipc\->send($hid, $event);" 4
+.el .IP "\f(CW$ipc\fR\->send($hid, \f(CW$event\fR);" 4
+.IX Item "$ipc->send($hid, $event);"
+.PD 0
+.ie n .IP "$ipc\->send($hid, $event, $global);" 4
+.el .IP "\f(CW$ipc\fR\->send($hid, \f(CW$event\fR, \f(CW$global\fR);" 4
+.IX Item "$ipc->send($hid, $event, $global);"
+.PD
+Used to send events from the current process/thread to the specified hub in its
+process+thread.
+.Sp
+.Vb 3
+\& sub send {
+\& my $self = shift;
+\& my ($hid, $e) = @_;
+\&
+\& ... # Send the event to the proper hub.
+\&
+\& # This may notify other procs/threads that there is a pending event.
+\& Test2::API::test2_ipc_set_pending($uniq_val);
+\& }
+.Ve
+.Sp
+If \f(CW$global\fR is true then the driver should send the event to all hubs in all
+processes and threads.
+.ie n .IP "@events = $ipc\->cull($hid)" 4
+.el .IP "\f(CW@events\fR = \f(CW$ipc\fR\->cull($hid)" 4
+.IX Item "@events = $ipc->cull($hid)"
+Used to collect events that have been sent to the specified hub.
+.Sp
+.Vb 3
+\& sub cull {
+\& my $self = shift;
+\& my ($hid) = @_;
+\&
+\& my @events = ...; # Here is where you get the events for the hub
+\&
+\& return @events;
+\& }
+.Ve
+.ie n .IP $ipc\->\fBwaiting()\fR 4
+.el .IP \f(CW$ipc\fR\->\fBwaiting()\fR 4
+.IX Item "$ipc->waiting()"
+This is called in the parent process when it is complete and waiting for all
+child processes and threads to complete.
+.Sp
+.Vb 2
+\& sub waiting {
+\& my $self = shift;
+\&
+\& ... # Notify all listening procs and threads that the main
+\& ... # process/thread is waiting for them to finish.
+\& }
+.Ve
+.SS "METHODS SUBCLASSES MAY IMPLEMENT OR OVERRIDE"
+.IX Subsection "METHODS SUBCLASSES MAY IMPLEMENT OR OVERRIDE"
+.ie n .IP $ipc\->driver_abort($msg) 4
+.el .IP \f(CW$ipc\fR\->driver_abort($msg) 4
+.IX Item "$ipc->driver_abort($msg)"
+This is a hook called by \f(CW\*(C`Test2::IPC::Driver\->abort()\*(C'\fR. This is your
+chance to cleanup when an abort happens. You cannot prevent the abort, but you
+can gracefully except it.
+.SH SOURCE
+.IX Header "SOURCE"
+The source code repository for Test2 can be found at
+\&\fIhttp://github.com/Test\-More/test\-more/\fR.
+.SH MAINTAINERS
+.IX Header "MAINTAINERS"
+.IP "Chad Granum <exodist@cpan.org>" 4
+.IX Item "Chad Granum <exodist@cpan.org>"
+.SH AUTHORS
+.IX Header "AUTHORS"
+.PD 0
+.IP "Chad Granum <exodist@cpan.org>" 4
+.IX Item "Chad Granum <exodist@cpan.org>"
+.PD
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright 2020 Chad Granum <exodist@cpan.org>.
+.PP
+This program is free software; you can redistribute it and/or
+modify it under the same terms as Perl itself.
+.PP
+See \fIhttp://dev.perl.org/licenses/\fR