Parent Directory
|
Revision Log
XMLRPC server for the FIG.pm routines. Meant to be invoked as the backend to the FIG.py python interface.
# # XMLRPC server to provide network access to FIG routines. # # We create a single FIG instance to use for all calls. # # This is originally intended for the support of the Python interface. # package main; use FIG; require XMLRPC::Transport::HTTP; require XMLRPC::Lite; use IO::Select; use IO::Handle; my $server = XMLRPC::Transport::HTTP::Daemon->new(LocalAddr =>"127.0.0.1", ReuseAddr => 1); my $fig = new FIG; @d = (); for my $name (keys(%FIG::)) { next if $name !~ /^[a-zA-Z]/; next if $name eq "new"; my $glob = $FIG::{$name}; next unless defined(&$glob); # print "$name $glob\n"; my $methName = $name; # my $methName = "XMLPKG::$name"; *$methName = sub { shift if UNIVERSAL::isa($_[0] => __PACKAGE__); print "Args: ", map { "<$_>\n" } @_ , "\n"; print "name $name\n"; my @ret = $fig->$name(@_); print "Ret: @ret\n"; return map { ref($_) ? $_ : XMLRPC::Data->type("string", $_) } @ret; }; push(@d, $methName); } $server->dispatch_to(@d); #$server->dispatch_to('XMLPKG'); print $server->url, "\n"; STDOUT->autoflush(); # $server->handle; $s = $server->new(); $sel = IO::Select->new(); $sel->add($s->{_daemon}); my $stdin = \*STDIN; $sel->add($stdin); while (1) { @ready = $sel->can_read(); for my $fh (@ready) { if ($fh == $s->{_daemon}) { my $c = $s->accept; while (my $r = $c->get_request) { $s->request($r); $s->SOAP::Transport::HTTP::Server::handle; $c->send_response($s->response); } } elsif ($fh == $stdin) { my $n = sysread($stdin, $buf, 1); if ($n == 0) { print "Exiting due to closed stdin\n"; $sel->remove($stdin); #exit; } } } }
MCS Webmaster | ViewVC Help |
Powered by ViewVC 1.0.3 |