sub process_request { my $self = shift; my $fh = $self->{server}->{client}; my $select = IO::Select->new(); $select->add($fh); my $last = 1; while ($last) { my $subroutineCall; my $command; my $completeLine = ""; # check if anything is ready to be received from client my @ready = $select->can_read(.1); next unless (@ready); # loop while receiving from the client untill a full msg has been received as identified by our flags while ( defined( my $line = <$fh> ) ) { if ( $line =~ /\*\*\* CLOSE_CONNECTION_CLIENT \*\*\*\n$/ ) { $logger->info("Client closed connection to the server"); $last = 0; $selSock->remove($fh); shutdown( $fh, 2 ); close $fh; last; } $completeLine .= $line; if ( $completeLine =~ /(.+) \*\*\* COMMAND_INPUT \*\*\* (.+) \*\*\* COMMAND_INPUT_END \*\*\*\n$/is ) { $subroutineCall = $1; $command = $2; $logger->info( "Processing message \"" . $command . "\"" ); last; } } if ($last) { #checking if the subroutine call is defined, if not, it kills that client connection (for cases of closing out of a client window and it sending the empty string ) if ( defined($subroutineCall) ) { $logger->debug("Calling subroutine '${subroutineCall}'"); my ($string) = executeCommand( subCall => $subroutineCall, command => $command ); send( $fh, "$string\n*** ZERO_BYTES_LEFT ***", 0 ); } else { $logger->info( "Undefined subroutine passed, closing client connection." ); $last = 0; $selSock->remove($fh); shutdown( $fh, 2 ); close $fh; last; } } } }