Revise peer creation and exit

This commit is contained in:
Nguyễn Gia Phong 2019-10-03 13:27:36 +07:00
parent 2503006d07
commit 9a0a3ff3e0
3 changed files with 15 additions and 26 deletions

View File

@ -308,12 +308,7 @@ class Display(Peer):
@property
def is_running(self) -> bool:
"""GLFW window status."""
try:
window = getattr(self, 'window')
except AttributeError: # window is not yet created
return True
else:
return not glfw.window_should_close(window)
return not glfw.window_should_close(self.window)
@property
def fov(self) -> float:
@ -420,6 +415,6 @@ class Display(Peer):
glfw.set_window_title(self.window, '{} - axuy@{}:{} ({})'.format(
self.postr, *self.addr, self.fpstr))
def close(self):
"""Close window."""
def __exit__(self, exc_type, exc_value, traceback):
self.__exit__(self, exc_type, exc_value, traceback)
glfw.terminate()

View File

@ -18,7 +18,7 @@
__doc__ = 'Axuy peer'
__all__ = ['PeerConfig', 'Peer']
__version__ = '0.0.7'
__version__ = '0.0.8'
from abc import ABC, abstractmethod
from argparse import ArgumentParser, FileType, RawTextHelpFormatter
@ -147,6 +147,8 @@ class Peer(ABC):
who sent the raw data.
peers : List[Tuple[str, int], ...]
Addresses of connected peers.
mapid : List[int, ...]
Permutation of map building blocks.
space : numpy.ndarray of shape (12, 12, 9) of bools
3D array of occupied space.
pico : Pico
@ -165,19 +167,18 @@ class Peer(ABC):
self.q = Queue()
if config.seeder is None:
mapid, self.peers = mapidgen(), []
self.mapid, self.peers = mapidgen(), []
else:
client = socket()
client.connect(config.seeder)
mapid, self.peers = loads(client.recv(1024))
self.mapid, self.peers = loads(client.recv(1024))
self.space = mapgen(mapid)
self.space = mapgen(self.mapid)
self.pico = Pico(self.addr, self.space)
self.picos = {self.addr: self.pico}
self.last_time = self.get_time()
Thread(target=self.serve, args=(mapid,), daemon=True).start()
Thread(target=self.pull, daemon=True).start()
def __enter__(self): return self
@property
@abstractmethod
@ -206,7 +207,7 @@ class Peer(ABC):
def fps(self, fps):
self.pico.fps = fps
def serve(self, mapid):
def serve(self):
"""Initiate other peers."""
with socket() as server: # TCP server
server.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1)
@ -215,7 +216,7 @@ class Peer(ABC):
print('Axuy is listening at {}:{}'.format(*self.addr))
while self.is_running:
conn, addr = server.accept()
conn.send(dumps((mapid, self.peers+[self.addr])))
conn.send(dumps((self.mapid, self.peers+[self.addr])))
conn.close()
server.close()
@ -226,8 +227,6 @@ class Peer(ABC):
self.q.get()
self.q.task_done()
def __enter__(self): return self
@abstractmethod
def get_time(self) -> float:
"""Return the current time."""
@ -270,15 +269,10 @@ class Peer(ABC):
def run(self):
"""Start main loop."""
Thread(target=self.serve, daemon=True).start()
Thread(target=self.pull, daemon=True).start()
while self.is_running: self.update()
@abstractmethod
def close(self):
"""Explicitly terminate stuff in subclass
that cannot be garbage collected.
"""
def __exit__(self, exc_type, exc_value, traceback):
self.q.join()
self.sock.close()
self.close()

View File

@ -6,7 +6,7 @@ with open('README.md') as f:
setup(
name='axuy',
version='0.0.7',
version='0.0.8',
description='Minimalist first-person shooter',
long_description=long_description,
long_description_content_type='text/markdown',