Improve API arguments checking

This commit is contained in:
Loic Guegan 2022-06-23 11:52:00 +02:00
parent 0daa96651f
commit b81ea45bd3

View file

@ -50,7 +50,15 @@ class Node:
value=self.chest[key]=value
self.chest_lock.release()
def abort(self,reason):
self.rargs=reason
self["request"]="abort"
self["state"]="call"
while True: continue
def log(self,msg):
if type(msg) != str:
self.abort("log() called with a non-string argument")
self.rargs=msg
self["request"]="log"
self["state"]="call"
@ -90,6 +98,8 @@ class Node:
self.wait_ack(["turn_on"])
def send(self, interface, data, datasize, dst):
if interface not in self["interfaces"]:
self.abort("send() called with an unknown interface \""+interface+"\"")
self.plugin_notify("send_call",(interface,data,datasize,dst))
self.rargs=(interface, data, datasize, dst)
self["request"]="send"
@ -98,16 +108,9 @@ class Node:
self.plugin_notify("send_return",(interface,data,datasize,dst,ack[1]))
return ack[1]
def receive(self,interface):
self["request"]="receive"
self.rargs=interface
self["state"]="request"
self.wait_ack(["receive"])
data,start_at,end_at=self["interfaces"][interface].get()
self.plugin_notify("receive_return",(interface,data,start_at,end_at))
return (0,data)
def sendt(self, interface, data, datasize, dst, timeout):
if interface not in self["interfaces"]:
self.abort("sendt() called with an unknown interface \""+interface+"\"")
self.rargs=timeout
self["request"]="timeout_add"
self["state"]="call"
@ -125,8 +128,21 @@ class Node:
self["state"]="call"
self.wait_ack(["timeout_remove"])
return ack[1]
def receive(self,interface):
if interface not in self["interfaces"]:
self.abort("receive() called with an unknown interface \""+interface+"\"")
self["request"]="receive"
self.rargs=interface
self["state"]="request"
self.wait_ack(["receive"])
data,start_at,end_at=self["interfaces"][interface].get()
self.plugin_notify("receive_return",(interface,data,start_at,end_at))
return (0,data)
def receivet(self,interface, timeout):
if interface not in self["interfaces"]:
self.abort("receivet() called with an unknown interface \""+interface+"\"")
self.rargs=timeout
self["request"]="timeout_add"
self["state"]="call"
@ -284,7 +300,7 @@ class Simulator:
"""
node=Node(src, self.netmat.keys())
self.nodes.append(node)
thread=threading.Thread(target=node.run, daemon=False,args=[args])
thread=threading.Thread(target=node.run, daemon=True,args=[args])
thread.start()
def log(self,msg,node=None):
@ -322,6 +338,9 @@ class Simulator:
self.events=self.events[~np.array(selector)]
node["state"]="running"
node.rqueue.put(("timeout_remove",0))
elif node["request"] == "abort":
self.log("Simulation aborted: "+node.rargs,node=node.node_id)
exit(1)
elif node["request"] == "read":
node["state"]="running"
if node.rargs == "clock":