from coapthon.server.coap import CoAP from coapthon.resources.resource import Resource import os import time def run_command(mtype:int, dest_addr:str) -> None: #ssh://server_one/home/osboxes/aioquic-explicit_UniPisa/experiment-scripts/migrate-server-console.py command = "python /home/osboxes/aioquic-explicit_UniPisa/experiment-scripts/migrate_from_shell.py python_bundle " + dest_addr if(mtype == 0): command = command + " false false" #cold migration elif(mtype == 1): command = command + " true false" #pre-copy migration elif(mtype == 2): command = command + " false true" #post-copy migration elif(mtype == 3): command = command + " true true" #hybrid migration #time.sleep(1) os.system(command) class BasicResource(Resource): def __init__(self, name="BasicResource", coap_server=None): super(BasicResource, self).__init__(name, coap_server, visible=True,observable=True, allow_children=True) self.payload = "Basic Resource" def render_GET(self, request): return self def render_PUT(self, request): print("ServerCoAP: starting to call the migration command") info = request.payload info = info.split(",") run_command(int(info[0]), info[1]) self.payload = "OK" #kill instance of migrate_from_shell.py to let migration be successful next time os.system("pkill -f migrate_from_shell.py") return self def render_POST(self, request): res = BasicResource() res.location_query = request.uri_query res.payload = request.payload return res def render_DELETE(self, request): return True class CoAPServer(CoAP): def __init__(self, host, port): CoAP.__init__(self, (host, port)) self.add_resource('basic/', BasicResource()) def main(): print("Before server starts listening") try: server = CoAPServer("0.0.0.0", 5683) print("After CoAP server declaration") except Exception as e: print(e) try: print("Before server listens") server.listen(10) print("After server listens") except Exception as e: print(e) except KeyboardInterrupt: print("Server Shutdown") server.close() print("Exiting...") if __name__ == '__main__': main()