diff --git a/src/server.py b/src/server.py --- a/src/server.py +++ b/src/server.py @@ -33,11 +33,17 @@ class Miniserver: self._ss.listen(1) def serve(self): - while True: - with Connection(self._ss,self._ssl) as c: - p=multiprocessing.Process(target=Server.run,args=(c,self._filename,self._treeFile)) + p=None + with self._ss: + while True: + connection=Connection(self._ss,self._ssl) + if p and p.is_alive(): + with connection as c: + c[0].readMsg() + c[1].writeMsg({"command":"deny"}) + continue + p=multiprocessing.Process(target=Server.run,args=(connection,self._filename,self._treeFile)) p.start() - p.join() class Server(NetNode): @@ -51,9 +57,10 @@ class Server(NetNode): self._dataFileHandle=None @staticmethod - def run(*args): - s=Server(*args) - s.serve() + def run(connection,*args): + with connection as c: + s=Server(c,*args) + s.serve() @property def _dataFile(self): @@ -75,6 +82,8 @@ class Server(NetNode): self._outcoming.writeMsg({"command":"deny"}) if jsonData["action"]=="pull" and self.isLocked(): self._outcoming.writeMsg({"command":"deny"}) + if jsonData["action"]=="push" and not self.isLocked(): + self._lock() self._outcoming.writeMsg({"command":"init", "version":conf.version})