Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/usr/bin/perl -w
- use strict;
- use Socket qw(inet_ntoa);
- use POE qw( Wheel::SocketFactory Wheel::ReadWrite
- Filter::Line Driver::SysRW );
- use constant PORT => 4488;
- use constant PORTWEB => 4489;
- POE::Session->create(
- inline_states => {
- _start => \&server_start,
- accept_daisi_client => \&accept_daisi_client,
- accept_failed => \&accept_failed,
- _stop => \&server_stop,
- },
- );
- $poe_kernel->run();
- exit;
- sub server_start {
- $_[HEAP]->{listener} = new POE::Wheel::SocketFactory
- ( BindPort => PORT,
- Reuse => 'yes',
- SuccessEvent => "accept_daisi_client",
- FailureEvent => "accept_failed",
- );
- print "SERVER: Started listening for DAISI on port ", PORT, ".\n";
- }
- sub accept_daisi_client {
- my ($socket, $peeraddr, $peerport) = @_[ARG0 .. ARG2];
- $peeraddr = inet_ntoa($peeraddr);
- POE::Session->create(
- inline_states => {
- _start => \&daisi_start,
- _stop => \&daisi_stop,
- daisi_input => \&daisi_input,
- daisi_done => \&daisi_done,
- daisi_error => \&daisi_error,
- },
- args => [ $socket, $peeraddr, $peerport ],
- );
- print "SERVER: Got connection from DAISI $peeraddr:$peerport.\n";
- }
- sub accept_failed {
- my ($function, $error) = @_[ARG0, ARG2];
- delete $_[HEAP]->{listener};
- print "SERVER: call to $function() failed: $error.\n";
- }
- sub server_stop {
- print "SERVER: Stopped.\n";
- }
- ##End Main Server Config
- sub daisi_start {
- my ($heap, $socket) = @_[HEAP, ARG0];
- $heap->{readwrite} = new POE::Wheel::ReadWrite
- ( Handle => $socket,
- Driver => new POE::Driver::SysRW (),
- Filter => new POE::Filter::Line (),
- InputEvent => 'daisi_input',
- ErrorEvent => 'daisi_error',
- );
- $heap->{readwrite}->put( "Hello, client!" );
- $heap->{peername} = join ':', @_[ARG1, ARG2];
- print "DAISI: Connected to $heap->{peername}.\n";
- POE::Session->create(
- inline_states => {
- _start => \&web_server_start,
- accept_web_client => \&accept_web_client,
- accept_failed => \&web_accept_failed,
- _stop => \&web_server_stop,
- },
- );
- }
- sub daisi_stop {
- print "DAISI: Stopped.\n";
- }
- sub daisi_input {
- my ($heap, $data) = @_[HEAP, ARG0];
- #$data =~ tr{0-9+*/()-}{}cd;
- return unless length $data;
- #my $result = eval $data;
- chomp $data;
- #$heap->{readwrite}->put("Confirm");
- print "DAISI: Got input from peer: \"$data\" \n";
- }
- sub daisi_done {
- delete $_[HEAP]->{readwrite};
- print "DAISI: disconnected from ", $_[HEAP]->{peername}, ".\n";
- }
- sub daisi_error {
- my ($function, $error) = @_[ARG0, ARG2];
- delete $_[HEAP]->{readwrite};
- print "CHILD: call to $function() failed: $error.\n" if $error;
- }
- ###End Server Functions
- ###Start Web Functions
- sub web_server_start {
- $_[HEAP]->{weblistener} = new POE::Wheel::SocketFactory
- ( BindPort => PORTWEB,
- Reuse => 'yes',
- SuccessEvent => "accept_web_client",
- FailureEvent => "accept_web_failed",
- );
- print "WEB-SERVER: Started listening for Web Commands on port ", PORTWEB, ".\n";
- }
- sub accept_web_client {
- my ($websocket, $peeraddr, $peerport) = @_[ARG0 .. ARG2];
- $peeraddr = inet_ntoa($peeraddr);
- POE::Session->create(
- inline_states => {
- _start => \&web_start,
- _stop => \&web_stop,
- web_input => \&web_input,
- web_done => \&web_done,
- web_error => \&web_error,
- },
- args => [ $websocket, $peeraddr, $peerport ],
- );
- print "WEB-SERVER: Got connection from DAISI $peeraddr:$peerport.\n";
- }
- sub accept_web_failed {
- my ($function, $error) = @_[ARG0, ARG2];
- delete $_[HEAP]->{weblistener};
- print "WEB-SERVER: call to $function() failed: $error.\n";
- }
- sub web_start {
- my ($heap, $websocket) = @_[HEAP, ARG0];
- $heap->{webreadwrite} = new POE::Wheel::ReadWrite
- ( Handle => $websocket,
- Driver => new POE::Driver::SysRW (),
- Filter => new POE::Filter::Line (),
- InputEvent => 'web_input',
- ErrorEvent => 'web_error',
- );
- $heap->{webreadwrite}->put( "Hello, client!" );
- $heap->{webpeername} = join ':', @_[ARG1, ARG2];
- print "WEB: Connected to $heap->{webpeername}.\n";
- }
- sub web_stop {
- print "WEB: Stopped.\n";
- }
- sub web_input {
- my ($heap, $data) = @_[HEAP, ARG0];
- #$data =~ tr{0-9+*/()-}{}cd;
- return unless length $data;
- #my $result = eval $data;
- chomp $data;
- $heap->{readwrite}->put($data);
- print "WEB: Got input from peer: \"$data\" \n";
- }
- sub web_done {
- delete $_[HEAP]->{webreadwrite};
- print "WEB: disconnected from ", $_[HEAP]->{webpeername}, ".\n";
- }
- sub web_error {
- my ($function, $error) = @_[ARG0, ARG2];
- delete $_[HEAP]->{readwrite};
- print "WEB: call to $function() failed: $error.\n" if $error;
- }
Add Comment
Please, Sign In to add comment