From b668e7873d9ffcecbbd848c5a388dba0bf2e77ac Mon Sep 17 00:00:00 2001 From: etienne Date: Wed, 7 May 2003 15:37:23 +0000 Subject: Initial revision --- src/IvyIO.pm | 114 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 114 insertions(+) create mode 100644 src/IvyIO.pm (limited to 'src/IvyIO.pm') diff --git a/src/IvyIO.pm b/src/IvyIO.pm new file mode 100644 index 0000000..8283a02 --- /dev/null +++ b/src/IvyIO.pm @@ -0,0 +1,114 @@ +package IvyIO; + +use strict; +use Ivy; + + +my $ivy; + +# init an ivy bus +sub init { + my ($appname, $bus, $conncb, $disconncb) = @_; + Ivy->init(-loopMode => 'TK', + -appName => $appname, + -ivyBus => $bus, + ); + $ivy = Ivy->new(-statusFunc => sub {&_status($conncb, $disconncb, @_);}); + $ivy->start; + +} # end init + +# kill a named agent +sub kill { + my $appname = shift; + $ivy->sendDieTo($appname); + +} # end kill + + +sub _status { + my ($conncb, $disconncb, $ref_array_present, $ref_array_absent, + $ref_hash_present, $agent, $status, $host) = @_; + if ($status eq "new") { + &$conncb($agent, $host); + } elsif ($status eq "died") { + &$disconncb($agent, $host); + } + +} # end _status + +#------------------------------------------------------------------------ +# +# output +# +#------------------------------------------------------------------------ + +sub send_rate { + my ($rate) = shift; + return unless $ivy; + $ivy->sendMsgs("SetClock Rate=$rate"); + +} # end ivy_send_rate + + +sub send_time { + my ($time) = shift; + return unless $ivy; + $ivy->sendMsgs("SetClock Time=$time"); + +} # end send_time + + +sub send_pause { + return unless $ivy; + $ivy->sendMsgs("ClockStop"); + +} # end send_pause + + +sub send_play { + return unless $ivy; + $ivy->sendMsgs("ClockStart"); + +} # end send_play_command + + +#------------------------------------------------------------------------ +# +# input +# +#------------------------------------------------------------------------ + +sub bind_for_play_event { + my $cb = shift; + return unless $cb; + return unless $ivy; + $ivy->bindRegexp("ClockStart", [sub { shift; &$cb(); }]); + +} # end bind_for_play_event + + +sub bind_for_pause_event { + my $cb = shift; + return unless $cb; + return unless $ivy; + $ivy->bindRegexp("ClockStop", [sub { shift; &$cb(); }]); + + +} # end bind_for_pause_event + + +# execute the callback with arguments