#!/usr/bin/perl
use threads;
use threads::shared;
use CORBA::omniORB ids => [ 'IDL:Callback:1.0' => undef, 'IDL:Sender:1.0' => undef ];
package Worker;
sub _run
{
my ($callback, $mess) = @_;
while(1) {
print "sending reply ``$mess'' to the client.\n";
$callback->reply($mess);
sleep 1;
}
}
# Implementation for interface Sender
package Sender_impl;
@Sender_impl::ISA = qw(POA_Sender);
use Error qw(:try);
sub new
{
my $class = shift;
bless {}, $class;
}
sub message
{
my ($self, $obj, $msg) = @_;
print "client send message ``$msg''\n";
threads->new(\&Worker::_run, $obj, $msg);
}
package main;
$orb = CORBA::ORB_init("omniORB4");
$poa = $orb->resolve_initial_references("RootPOA");
my $servant = new Sender_impl;
#my $ref = $poa->servant_to_reference ($servant);
my $id = $poa->activate_object($servant);
my $ref = $poa->create_reference_with_id($id, $servant->_pomni_repoid);
open (OUT, ">object.ref"); print OUT $orb->object_to_string ($ref); close OUT;
$poa->_get_the_POAManager->activate;
print "server started.\n";
$orb->run ();
exit(0);