package Test2::IPC::Driver::MyDriver;
    use base 'Test2::IPC::Driver';
    ...
 
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.
    use Test2::IPC::Driver::MyDriver;
    ...
 
    package Test2::IPC::Driver::MyDriver;
    use strict;
    use warnings;
    use base 'Test2::IPC::Driver';
    sub is_viable {
        return 0 if $^O eq 'win32'; # 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;
 
    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) = @_;
        ... # 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);
    }
If $global is true then the driver should send the event to all hubs in all processes and threads.
    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.
    }
This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
See http://dev.perl.org/licenses/