8000 api.raw_eval and better error reporting · neumond/python-computer-craft@ad09602 · GitHub
[go: up one dir, main page]

Skip to content

Commit ad09602

Browse files
committed
api.raw_eval and better error reporting
1 parent 5b0ac96 commit ad09602

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

computercraft/back.lua

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ local url = 'http://127.0.0.1:4343/'
66
local tasks = {}
77

88
ws = http.websocket(url..'ws/')
9+
if ws == false then
10+
error('unable to connect to server '..url..'ws/')
11+
end
912
ws.send(textutils.serializeJSON{
1013
action='run',
1114
computer=os.getComputerID(),

computercraft/server.py

Lines changed: 13 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,18 +74,24 @@ def __init__(self, nid, program, cleanup_callback):
7474
self.window = WindowAPI(self) # TODO: unimplemented
7575

7676
async def prog_wrap():
77+
err = None
7778
try:
7879
await program(self)
7980
except asyncio.CancelledError:
8081
print('program {} cancelled'.format(self._id))
8182
print_exc()
83+
err = 'program has been cancelled'
8284
except Exception as e:
8385
print('program {} crashed: {} {}'.format(self._id, type(e), e))
8486
print_exc()
87+
err = type(e).__name__ + ': ' + str(e)
8588
else:
8689
print('program {} finished'.format(self._id))
8790
finally:
88-
await self._cmd.put({'action': 'close'})
91+
c = {'action': 'close'}
92+
if err is not None:
93+
c['error'] = err
94+
await self._cmd.put(c)
8995
cleanup_callback()
9096

9197
self._task = asyncio.create_task(prog_wrap())
@@ -95,17 +101,20 @@ def _new_task_id(self):
95101
self._task_autoid += 1
96102
return task_id
97103

98-
async def _send_cmd(self, lua):
104+
async def raw_eval(self, lua_code):
99105
task_id = self._new_task_id()
100106
self._result_locks[task_id] = asyncio.Event()
101107
await self._cmd.put({
102108
'action': 'task',
103109
'task_id': task_id,
104-
'code': lua,
110+
'code': lua_code,
105111
})
106112
await self._result_locks[task_id].wait()
107113
del self._result_locks[task_id]
108-
result = self._result_values.pop(task_id)
114+
return self._result_values.pop(task_id)
115+
116+
async def _send_cmd(self, lua):
117+
result = await self.raw_eval(lua)
109118
print('{} → {}'.format(lua, result))
110119
if not result[0]:
111120
raise LuaException(*result[1:])

0 commit comments

Comments
 (0)
0