home *** CD-ROM | disk | FTP | other *** search
/ Netrunner 2004 October / NETRUNNER0410.ISO / regular / ActivePerl-5.8.4.810-MSWin32-x86.msi / _5010f378ee443083bbc4c00f64381ce7 < prev    next >
Encoding:
Text File  |  2004-06-01  |  3.2 KB  |  130 lines

  1. # ======================================================================
  2. #
  3. # Copyright (C) 2000-2001 Paul Kulchenko (paulclinger@yahoo.com)
  4. # SOAP::Lite is free software; you can redistribute it
  5. # and/or modify it under the same terms as Perl itself.
  6. #
  7. # $Id: IO.pm,v 1.3 2001/08/11 19:09:57 paulk Exp $
  8. #
  9. # ======================================================================
  10.  
  11. package SOAP::Transport::IO;
  12.  
  13. use strict;
  14. use vars qw($VERSION);
  15. $VERSION = sprintf("%d.%s", map {s/_//g; $_} q$Name: release-0_55-public $ =~ /-(\d+)_([\d_]+)/);
  16.  
  17. use IO::File;
  18. use SOAP::Lite;
  19.  
  20. # ======================================================================
  21.  
  22. package SOAP::Transport::IO::Server;
  23.  
  24. use strict;
  25. use Carp ();
  26. use vars qw(@ISA);
  27. @ISA = qw(SOAP::Server);
  28.  
  29. sub new {
  30.   my $self = shift;
  31.     
  32.   unless (ref $self) {
  33.     my $class = ref($self) || $self;
  34.     $self = $class->SUPER::new(@_);
  35.   }
  36.   return $self;
  37. }
  38.  
  39. sub BEGIN {
  40.   no strict 'refs';
  41.   my %modes = (in => '<', out => '>');
  42.   for my $method (keys %modes) {
  43.     my $field = '_' . $method;
  44.     *$method = sub {
  45.       my $self = shift->new;
  46.       return $self->{$field} unless @_;
  47.  
  48.       my $file = shift;
  49.       if (defined $file && !ref $file && !defined fileno($file)) {
  50.         my $name = $file;
  51.         open($file = new IO::File, $modes{$method} . $name) or Carp::croak "$name: $!";
  52.       }
  53.       $self->{$field} = $file;
  54.       return $self;
  55.     }
  56.   }
  57. }
  58.  
  59. sub handle {
  60.   my $self = shift->new;
  61.  
  62.   $self->in(*STDIN)->out(*STDOUT) unless defined $self->in;
  63.   my $in = $self->in;
  64.   my $out = $self->out;
  65.  
  66.   my $result = $self->SUPER::handle(join '', <$in>);
  67.   no strict 'refs'; print {$out} $result if defined $out;
  68. }
  69.  
  70. # ======================================================================
  71.  
  72. 1;
  73.  
  74. __END__
  75.  
  76. =head1 NAME
  77.  
  78. SOAP::Transport::IO - Server side IO support for SOAP::Lite
  79.  
  80. =head1 SYNOPSIS
  81.  
  82.   use SOAP::Transport::IO;
  83.  
  84.   SOAP::Transport::IO::Server
  85.  
  86.     # you may specify as parameters for new():
  87.     # -> new( in => 'in_file_name' [, out => 'out_file_name'] )
  88.     # -> new( in => IN_HANDLE      [, out => OUT_HANDLE] )
  89.     # -> new( in => *IN_HANDLE     [, out => *OUT_HANDLE] )
  90.     # -> new( in => \*IN_HANDLE    [, out => \*OUT_HANDLE] )
  91.   
  92.     # -- OR --
  93.     # any combinations
  94.     # -> new( in => *STDIN, out => 'out_file_name' )
  95.     # -> new( in => 'in_file_name', => \*OUT_HANDLE )
  96.   
  97.     # -- OR --
  98.     # use in() and/or out() methods
  99.     # -> in( *STDIN ) -> out( *STDOUT )
  100.   
  101.     # -- OR --
  102.     # use default (when nothing specified):
  103.     #      in => *STDIN, out => *STDOUT
  104.   
  105.     # don't forget, if you want to accept parameters from command line
  106.     # \*HANDLER will be understood literally, so this syntax won't work 
  107.     # and server will complain
  108.   
  109.     -> new(@ARGV)
  110.   
  111.     # specify path to My/Examples.pm here
  112.     -> dispatch_to('/Your/Path/To/Deployed/Modules', 'Module::Name', 'Module::method') 
  113.     -> handle
  114.   ;
  115.  
  116. =head1 DESCRIPTION
  117.  
  118. =head1 COPYRIGHT
  119.  
  120. Copyright (C) 2000-2001 Paul Kulchenko. All rights reserved.
  121.  
  122. This library is free software; you can redistribute it and/or modify
  123. it under the same terms as Perl itself.
  124.  
  125. =head1 AUTHOR
  126.  
  127. Paul Kulchenko (paulclinger@yahoo.com)
  128.  
  129. =cut
  130.