Guest User

Untitled

a guest
Apr 22nd, 2018
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 4.81 KB | None | 0 0
  1. #!/usr/bin/perl -w
  2.  
  3. use strict;
  4. use Socket qw(inet_ntoa);
  5. use POE qw( Wheel::SocketFactory  Wheel::ReadWrite
  6.             Filter::Line          Driver::SysRW );
  7. use constant PORT => 4488;
  8. use constant PORTWEB => 4489;
  9.  
  10. POE::Session->create(
  11.   inline_states => {
  12.     _start => \&server_start,
  13.     accept_daisi_client => \&accept_daisi_client,
  14.     accept_failed => \&accept_failed,
  15.     _stop  => \&server_stop,
  16.   },
  17. );
  18.  
  19. $poe_kernel->run();
  20. exit;
  21.  
  22.  
  23. sub server_start {
  24.   $_[HEAP]->{listener} = new POE::Wheel::SocketFactory
  25.     ( BindPort     => PORT,
  26.       Reuse        => 'yes',
  27.       SuccessEvent => "accept_daisi_client",
  28.       FailureEvent => "accept_failed",
  29.     );
  30.   print "SERVER: Started listening for DAISI on port ", PORT, ".\n";
  31. }
  32.  
  33. sub accept_daisi_client {
  34.   my ($socket, $peeraddr, $peerport) = @_[ARG0 .. ARG2];
  35.   $peeraddr = inet_ntoa($peeraddr);
  36.  
  37.   POE::Session->create(
  38.     inline_states => {
  39.       _start      => \&daisi_start,
  40.       _stop       => \&daisi_stop,
  41.       daisi_input => \&daisi_input,
  42.       daisi_done  => \&daisi_done,
  43.       daisi_error => \&daisi_error,
  44.     },
  45.     args => [ $socket, $peeraddr, $peerport ],
  46.   );
  47.   print "SERVER: Got connection from DAISI $peeraddr:$peerport.\n";
  48. }
  49.  
  50. sub accept_failed {
  51.   my ($function, $error) = @_[ARG0, ARG2];
  52.  
  53.   delete $_[HEAP]->{listener};
  54.   print "SERVER: call to $function() failed: $error.\n";
  55. }
  56.  
  57. sub server_stop {
  58.   print "SERVER: Stopped.\n";
  59. }
  60. ##End Main Server Config
  61.  
  62. sub daisi_start {
  63.   my ($heap, $socket) = @_[HEAP, ARG0];
  64.  
  65.   $heap->{readwrite} = new POE::Wheel::ReadWrite
  66.     ( Handle => $socket,
  67.       Driver => new POE::Driver::SysRW (),
  68.       Filter => new POE::Filter::Line (),
  69.       InputEvent   => 'daisi_input',
  70.       ErrorEvent   => 'daisi_error',
  71.     );
  72.   $heap->{readwrite}->put( "Hello, client!" );
  73.  
  74.   $heap->{peername} = join ':', @_[ARG1, ARG2];
  75.   print "DAISI: Connected to $heap->{peername}.\n";
  76.  
  77.   POE::Session->create(
  78.     inline_states => {
  79.         _start => \&web_server_start,
  80.         accept_web_client => \&accept_web_client,
  81.         accept_failed => \&web_accept_failed,
  82.         _stop  => \&web_server_stop,
  83.         },
  84.   );
  85. }
  86.  
  87. sub daisi_stop {
  88.   print "DAISI: Stopped.\n";
  89. }
  90.  
  91. sub daisi_input {
  92.   my ($heap, $data) = @_[HEAP, ARG0];
  93.  
  94.   #$data =~ tr{0-9+*/()-}{}cd;
  95.   return unless length $data;
  96.   #my $result = eval $data;
  97.   chomp $data;
  98.   #$heap->{readwrite}->put("Confirm");
  99.   print "DAISI: Got input from peer: \"$data\" \n";
  100. }
  101.  
  102.  
  103. sub daisi_done {
  104.   delete $_[HEAP]->{readwrite};
  105.   print "DAISI: disconnected from ", $_[HEAP]->{peername}, ".\n";
  106. }
  107.  
  108.  
  109. sub daisi_error {
  110.   my ($function, $error) = @_[ARG0, ARG2];
  111.  
  112.   delete $_[HEAP]->{readwrite};
  113.   print "CHILD: call to $function() failed: $error.\n" if $error;
  114. }
  115. ###End Server Functions
  116.  
  117. ###Start Web Functions
  118. sub web_server_start {
  119.   $_[HEAP]->{weblistener} = new POE::Wheel::SocketFactory
  120.     ( BindPort     => PORTWEB,
  121.       Reuse        => 'yes',
  122.       SuccessEvent => "accept_web_client",
  123.       FailureEvent => "accept_web_failed",
  124.     );
  125.   print "WEB-SERVER: Started listening for Web Commands on port ", PORTWEB, ".\n";
  126. }
  127.  
  128. sub accept_web_client {
  129.   my ($websocket, $peeraddr, $peerport) = @_[ARG0 .. ARG2];
  130.   $peeraddr = inet_ntoa($peeraddr);
  131.  
  132.   POE::Session->create(
  133.     inline_states => {
  134.       _start      => \&web_start,
  135.       _stop       => \&web_stop,
  136.       web_input => \&web_input,
  137.       web_done  => \&web_done,
  138.       web_error => \&web_error,
  139.     },
  140.     args => [ $websocket, $peeraddr, $peerport ],
  141.   );
  142.   print "WEB-SERVER: Got connection from DAISI $peeraddr:$peerport.\n";
  143. }
  144.  
  145. sub accept_web_failed {
  146.   my ($function, $error) = @_[ARG0, ARG2];
  147.  
  148.   delete $_[HEAP]->{weblistener};
  149.   print "WEB-SERVER: call to $function() failed: $error.\n";
  150. }
  151.  
  152. sub web_start {
  153.   my ($heap, $websocket) = @_[HEAP, ARG0];
  154.  
  155.   $heap->{webreadwrite} = new POE::Wheel::ReadWrite
  156.     ( Handle => $websocket,
  157.       Driver => new POE::Driver::SysRW (),
  158.       Filter => new POE::Filter::Line (),
  159.       InputEvent   => 'web_input',
  160.       ErrorEvent   => 'web_error',
  161.     );
  162.   $heap->{webreadwrite}->put( "Hello, client!" );
  163.  
  164.   $heap->{webpeername} = join ':', @_[ARG1, ARG2];
  165.   print "WEB: Connected to $heap->{webpeername}.\n";
  166. }
  167.  
  168. sub web_stop {
  169.   print "WEB: Stopped.\n";
  170. }
  171.  
  172. sub web_input {
  173.   my ($heap, $data) = @_[HEAP, ARG0];
  174.  
  175.   #$data =~ tr{0-9+*/()-}{}cd;
  176.   return unless length $data;
  177.   #my $result = eval $data;
  178.   chomp $data;
  179.   $heap->{readwrite}->put($data);
  180.   print "WEB: Got input from peer: \"$data\" \n";
  181. }
  182.  
  183.  
  184. sub web_done {
  185.   delete $_[HEAP]->{webreadwrite};
  186.   print "WEB: disconnected from ", $_[HEAP]->{webpeername}, ".\n";
  187. }
  188.  
  189.  
  190. sub web_error {
  191.   my ($function, $error) = @_[ARG0, ARG2];
  192.  
  193.   delete $_[HEAP]->{readwrite};
  194.   print "WEB: call to $function() failed: $error.\n" if $error;
  195. }
Add Comment
Please, Sign In to add comment