1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- import asyncio
- import websockets
- import sys
- import json
- #import importlib
- #import pathlib
- import os
- import subprocess
- async def hello(websocket):
- #websocket is a WebSocketServerProtocol
- message = await websocket.recv()
- client=websocket.remote_address[0]
- host=websocket.local_address[0]
-
- #delegate parsing to subroutine
- #assume the message will be
- #pathToPythonCode:argument
- #where argument is some sort of a string or a number
- #pathToPythonCode can have replacementStrings
- #that reflect local software arrangement,
- #for example _softwareSrc_ will get replaced by
- #software/src directory from setup.json
- parts=message.split(':')
- message=':'.join([client,message])
- print(f"<<< FROM: {host}")
- print(f"<<< {message}")
- greeting = f"Hello {message}!"
-
- key=0
- try:
- key=int(parts[1])
- except ValueError:
- #only used for exit checking
- pass
- if client==host and parts[0]=="END" and key<0:
- print("Exit signal")
- websocket.ws_server.close()
- return
-
- run(message)
-
-
- #await websocket.send(greeting)
- #don't send anything, just log
- print(f">>> {greeting}")
- async def main():
- origins=["merlin","labkey-public","onko-nix",None]
- #server="vangogh.fmf.uni-lj.si"
- serverIP="193.2.68.227"
- print(f"Starting server at {serverIP}")
- async with websockets.serve(hello, serverIP, 8765,origins=origins) as server:
- #await asyncio.Future() # run forever
- await server.wait_closed()
- def run(message):
- args=message.split(':')
- scriptFile=args[1]
- fsetup=os.path.join(os.path.expanduser('~'),'.labkey','setup.json')
- with open(fsetup) as f:
- setup=json.load(f)
- parts=scriptFile.split('/')
- scriptDir=parts[-2]#one before last, last is the script name
- scriptFile=scriptFile.replace('_softwareSrc_',setup['paths']['softwareSrc'])
- venv=setup['venv'][scriptDir]
- pCall=os.path.join(venv,'bin','python')
- argsCall=[pCall,scriptFile,args[0],args[2]]
- subprocess.run(argsCall)
-
- #spath=pathlib.Path(scriptFile)
- #print('script: {} [{}]{}'.format(scriptFile,spath.parent,spath.stem))
- #sys.path.append(str(spath.parent))
- #print(sys.path)
- #module=importlib.import_module(spath.stem)
- #module.main(args[0],args[2])
-
- if __name__ == "__main__":
- asyncio.run(main())
|