Rev 2101 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed
use IO::Select;use IO::Socket;sub atomd_connect{($host, $port) = @_;$socket = IO::Socket::INET->new(Proto => "tcp",PeerAddr => $host,PeerPort => $port,Blocking => 1,)or die "Error: Cannot connect to port $port at $host\n";return $socket;}# ----------------- Atom JS functions -----------------sub atomjs_read_line{($socket) = @_;# read linedefined( $result = <$socket> ) or die "Readline failed: $! \n";return $result;}sub atomjs_write{($socket, $command) = @_;print $socket $command;}#function atomjs_data_available($socket)#{# $read = array($socket);# $write = NULL;# $except = NULL;# if (false === ($num_changed_streams = stream_select($read, $write, $except, 0)))# {# throw new Exception("could not do select on socket");# }# return $num_changed_streams > 0;#}# ----------------- Atomic functions -----------------sub atomd_read_packet{($socket) = @_;$command="";read($socket, $command, 4);$payload_length="";read($socket, $payload_length, 4);$payload_length = int($payload_length);$payload="";if ($payload_length > 0){read($socket, $payload, $payload_length-1);}#Pad payload length with 0s$payload_length = sprintf("%04d", $payload_length-1);#print "areadpacket ".$command . $payload_length . $payload."\n";return $command . $payload_length . $payload;}sub atomd_write_packet{($socket, $command, $payload) = @_;#Pad payload length with 0s# $payload_length = sprintf("%04d", length($payload)+1);# $packet = $command.$payload_length.$payload.chr(0);$payload_length = sprintf("%04d", length($payload));$packet = $command.$payload_length.$payload;#print "awritepacket ".$packet."\n";print $socket $packet;}sub atomd_data_available{($socket) = @_;$s = IO::Select->new();$s->add($socket);@handles = $s->can_read(0.005);$has_data = 0;if (@handles){$has_data = 1;}return $has_data;}sub atomd_kill_promt{($socket) = @_;while (atomd_data_available($socket)){$packet = atomd_read_packet($socket); # Read prompt}}sub atomd_initialize{($host, $port) = @_;$socket = atomd_connect($host, $port);atomd_kill_promt($socket);return $socket;}sub atomd_send_command{($socket, $command) = @_;atomd_write_packet($socket, "RESP", $command);}sub atomd_read_command_response{($socket) = @_;$response = "";while (1){$packet = atomd_read_packet($socket);if (substr($packet, 0, 4) ne "TEXT"){last;}$packet =~ s/\n//g;# $response .= substr($packet, 8, -1);$response .= substr($packet, 8);$response .= "\n";}return $response;}# Perl trim function to remove whitespace from the start and end of the stringsub trim($){my $string = shift;$string =~ s/^\s+//;$string =~ s/\s+$//;return $string;}# Left trim function to remove leading whitespacesub ltrim($){my $string = shift;$string =~ s/^\s+//;return $string;}# Right trim function to remove trailing whitespacesub rtrim($){my $string = shift;$string =~ s/\s+$//;return $string;}# "return" 1 to not generate an error when loading file1;