mirror of
https://github.com/erg-lang/erg.git
synced 2025-09-28 20:14:45 +00:00
46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
# Append __ to all variables to prevent name collisions in exec
|
|
# All strings must be quoted by single quotes to prevent shell interpretation
|
|
import socket as __socket
|
|
import sys as __sys
|
|
import importlib as __importlib
|
|
import io as __io
|
|
|
|
__server_socket = __socket.socket()
|
|
# DummyVM will replace this __PORT__ with free port
|
|
__server_socket.bind(('127.0.0.1', __PORT__))
|
|
__server_socket.listen(1)
|
|
(__client_socket, __client_address) = __server_socket.accept()
|
|
|
|
__already_loaded = False
|
|
__res = ''
|
|
|
|
while True:
|
|
try:
|
|
__order = __client_socket.recv(1024).decode()
|
|
except ConnectionResetError: # when the server was crashed
|
|
break
|
|
if __order == 'quit' or __order == 'exit': # when the server was closed successfully
|
|
__client_socket.send('closed'.encode())
|
|
break
|
|
elif __order == 'load':
|
|
__sys.stdout = __io.StringIO()
|
|
try:
|
|
if __already_loaded:
|
|
# __MODULE__ will be replaced with module name
|
|
__res = str(exec('__importlib.reload(__MODULE__)'))
|
|
else:
|
|
__res = str(exec('import __MODULE__'))
|
|
except SystemExit:
|
|
__client_socket.send('[Exception] SystemExit'.encode())
|
|
continue
|
|
except e:
|
|
__res = str(e)
|
|
__already_loaded = True
|
|
__out = __sys.stdout.getvalue()[:-1]
|
|
__res = __out + '\n' + __res
|
|
__client_socket.send(__res.encode())
|
|
else:
|
|
__client_socket.send('unknown operation'.encode())
|
|
|
|
__client_socket.close()
|
|
__server_socket.close()
|