#!/usr/local/bin/perl5 use GlueLogic; &GlueLogicParseArgs(); &GlueLogicConnect("agent#", undef, "foobar"); &GlueLogicAccess("$GlueLogicAnchor.IN=UNBOUND", "$GlueLogicAnchor.OUT=UNBOUND"); &GlueLogicAccess("!AddInformTo $GlueLogicAnchor.IN $GlueLogicAgent/BINDING"); while (1){ &GlueLogicWaitForMessage() unless @GlueLogicMessageQueue; &GlueLogicEnqueueMessage(); next unless @GlueLogicMessageQueue; last unless defined ( $_ = shift(@GlueLogicMessageQueue) ); next unless ( $_ eq "Changed $GlueLogicAnchor.IN" ); ( $_ ) = &GlueLogicAccess( "$GlueLogicAnchor.IN?" ); ( $vv, $v, $a ) = /^[^=]+=(.(\S+))\s*(.*)$/o; if ( $vv eq 'UNBOUND' ) { &GlueLogicAccess( "$GlueLogicAnchor.OUT=UNBOUND" ); next; } $OUT = "Unknown Message Selector"; if ( $v eq 'a' ) { $OUT = &ProcessEventA ($a); } elsif ( $v eq 'bb' ) { $OUT = &ProcessEventBB($a); } elsif ( $v eq 'zzz' ) { last; } &GlueLogicAccess( "$GlueLogicAnchor.OUT=\"$OUT" ); } &GlueLogicAccess("!DelInformTo $GlueLogicAnchor.IN $GlueLogicAgent/BINDING"); &GlueLogicDisconnect(); exit 0;
&GlueLogicAccess("!AddInformTo $Target.IN $GlueLogicAgent/BINDING"); &GlueLogicAccess("!AddInformTo $Target.OUT $GlueLogicAgent/BINDING"); { @ans = &GlueLogicAccess( "$Target.IN:UNBOUND", "$Target.OUT:UNBOUND", "$Target.IN=\"$MessageText" ); last unless $ans[0] =~ /^!/o; &GlueLogicWaitForChanged( "$Target.IN", "$Target.OUT" ) || die( "Disconnected\n" ); &GlueLogicDequeueChanged( "$Target.IN", "$Target.OUT" ); redo; } &GlueLogicWaitForChanged( "$Target.OUT" ) || die( "Disconnected\n" ); &GlueLogicDequeueChanged( "$Target.IN", "$Target.OUT" ); ( $ReturnValue ) = &GlueLogicAccess( "$Target.OUT?" ); &GlueLogicAccess("!DelInformTo $Target.IN $GlueLogicAgent/BINDING"); &GlueLogicAccess("!DelInformTo $Target.OUT $GlueLogicAgent/BINDING"); &GlueLogicAccess( "$Target.IN=UNBOUND" ); $ReturnValue =~ s/^[^=]+="//o;但し、ごく稀に、原因は不確定ながらおそらくは UNIX と TCP/IP のバッファリングの影響で、 サーバから送られた変更通知メッセージが エージェントまでの通信路のどこかに引っかかってしまうことがある。