3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-12-12 13:59:28 +01:00
pbot/modules/compiler_client.pl
2019-05-28 09:19:42 -07:00

54 lines
1.2 KiB
Perl
Executable File

#!/usr/bin/perl
# This Source Code Form is subject to the terms of the Mozilla Public
# License, v. 2.0. If a copy of the MPL was not distributed with this
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
# compiler_client.pl connects to compiler_server.pl hosted at PeerAddr/PeerPort below
# and sends a nick, language and code, then retreives and prints the compilation/execution output.
#
# this way we can run the compiler virtual machine on any remote server.
use warnings;
use strict;
use IO::Socket::INET;
use JSON;
my $sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 9000,
Proto => 'tcp');
if (not defined $sock) {
print "Fatal error compiling: $!; try again later\n";
die $!;
}
my $json = join ' ', @ARGV;
my $length = length $json;
print STDERR "got $length bytes of argv json: [$json]\n";
my $h = decode_json $json;
my $lang = $h->{lang} // "c11";
if ($h->{code} =~ s/-lang=([^ ]+)//) {
$lang = lc $1;
}
$h->{lang} = $lang;
$json = encode_json $h;
$length = length $json;
print STDERR "got $length bytes of json: [$json]\n";
syswrite($sock, "$json\n");
while (my $line = <$sock>) {
print "$line";
}
close $sock;