3
0
mirror of https://github.com/pragma-/pbot.git synced 2024-12-24 11:42:35 +01:00
pbot/applets/compiler_vm/host/bin/vm-client

53 lines
1.1 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env perl
# File: vm-client
#
# Purpose: Interfaces with the PBot virtual machine server hosted at
# PeerAddr/PeerPort defined below. This allows us to host instances of
# virtual machines on remote servers.
#
# This script is intended to be installed to PBot's applets directory
# and attached to a PBot command such as `cc`.
# SPDX-FileCopyrightText: 2021 Pragmatic Software <pragma78@gmail.com>
# SPDX-License-Identifier: MIT
# TODO: extend to take a list of server/ports to cycle for load-balancing
use warnings;
use strict;
use IO::Socket;
use JSON::XS;
use constant {
SERVER_PORT => $ENV{PBOTVM_SERVER} // 9000,
};
my $sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => SERVER_PORT,
2022-01-30 04:23:36 +01:00
Proto => 'tcp'
);
if (not defined $sock) {
print "Fatal error compiling: $!; try again later\n";
die $!;
}
2022-01-30 04:23:36 +01:00
my $json = join ' ', @ARGV;
my $h = decode_json $json;
2022-01-30 04:23:36 +01:00
my $lang = $h->{lang} // "c11";
2022-01-30 04:23:36 +01:00
if ($h->{code} =~ s/-lang=([^ ]+)//) { $lang = lc $1; }
2022-01-30 04:23:36 +01:00
$h->{lang} = $lang;
$json = encode_json $h;
2022-01-30 04:23:36 +01:00
print $sock "$json\n";
while (my $line = <$sock>) { print "$line"; }
close $sock;