This commit is contained in:
62
server/netsim/netinterface.py
Normal file
62
server/netsim/netinterface.py
Normal file
@@ -0,0 +1,62 @@
|
||||
#!/usr/bin/env python3
|
||||
# netinterface.py
|
||||
|
||||
import os, time
|
||||
|
||||
|
||||
class network_interface:
|
||||
timeout = 0.800 # 800 millisec
|
||||
addr_space = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
|
||||
own_addr = ''
|
||||
net_path = ''
|
||||
last_read = -1
|
||||
|
||||
def __init__(self, path, addr):
|
||||
self.net_path = path
|
||||
self.own_addr = addr
|
||||
|
||||
addr_dir = self.net_path + self.own_addr
|
||||
if not os.path.exists(addr_dir):
|
||||
os.mkdir(addr_dir)
|
||||
os.mkdir(addr_dir + '/IN')
|
||||
os.mkdir(addr_dir + '/OUT')
|
||||
|
||||
in_dir = addr_dir + '/IN'
|
||||
msgs = sorted(os.listdir(in_dir))
|
||||
self.last_read = len(msgs) - 1
|
||||
|
||||
def send_msg(self, dst, msg):
|
||||
|
||||
out_dir = self.net_path + self.own_addr + '/OUT'
|
||||
msgs = sorted(os.listdir(out_dir))
|
||||
|
||||
if len(msgs) > 0:
|
||||
last_msg = msgs[-1].split('--')[0]
|
||||
next_msg = (int.from_bytes(bytes.fromhex(last_msg), byteorder='big') + 1).to_bytes(2, byteorder='big').hex()
|
||||
else:
|
||||
next_msg = '0000'
|
||||
|
||||
next_msg += '--' + dst
|
||||
with open(out_dir + '/' + next_msg, 'wb') as f:
|
||||
f.write(msg)
|
||||
|
||||
return True
|
||||
|
||||
def receive_msg(self, blocking=False):
|
||||
|
||||
in_dir = self.net_path + self.own_addr + '/IN'
|
||||
|
||||
status = False
|
||||
msg = b''
|
||||
|
||||
while True:
|
||||
msgs = sorted(os.listdir(in_dir))
|
||||
if len(msgs) - 1 > self.last_read:
|
||||
with open(in_dir + '/' + msgs[self.last_read + 1], 'rb') as f: msg = f.read()
|
||||
status = True
|
||||
self.last_read += 1
|
||||
|
||||
if not blocking or status:
|
||||
return status, msg
|
||||
else:
|
||||
time.sleep(self.timeout)
|
||||
Reference in New Issue
Block a user