Mercurial > touhou
diff pytouhou/network.py @ 487:711c75115675
Various netplay-related fixes.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Sat, 28 Sep 2013 20:11:41 +0200 |
parents | c099802e2435 |
children | d1f0bb0b7a17 |
line wrap: on
line diff
--- a/pytouhou/network.py +++ b/pytouhou/network.py @@ -1,9 +1,13 @@ import socket -import struct +from struct import Struct from select import select -import time +from time import time + +from pytouhou.utils.helpers import get_logger -MSG_STRUCT = struct.Struct('!HHH') +logger = get_logger(__name__) + +MSG_STRUCT = Struct('!HHH') class Network(object): def __init__(self, port=8080, dest=None, selected_player=0): @@ -22,10 +26,10 @@ class Network(object): def read_message(self): message = None - start_time = time.time() + start_time = time() delta = 1./60. - rlist, wlist, xlist = select([self.sock], [], [], delta) + rlist, _, _ = select([self.sock], [], [], delta) while rlist: msg, addr = rlist[0].recvfrom(MSG_STRUCT.size) # Check whether the message comes from the right address @@ -38,20 +42,19 @@ class Network(object): if frame in (self.frame, self.frame + 1): message = (frame, keystate, old_keystate) else: - print('Mismatch', self.remote_addr, addr) + logger.error('Mismatch, got a message from %s, waiting for %s.', self.remote_addr, addr) # If no valid message has been read, wait for one as long as possible # else, read as much as we can without blocking. - delta = 0 if message else max(0, 1./60. - (time.time() - start_time)) - rlist, wlist, xlist = select(rlist, [], [], delta) + delta = 0 if message else max(0, 1./60. - (time() - start_time)) + rlist, _, _ = select(rlist, [], [], delta) return message def send_message(self): - frame, keystate, old_keystate = self.frame, self.keystate, self.old_keystate if self.remote_addr is not None: - self.sock.sendto(MSG_STRUCT.pack(frame, keystate, old_keystate), self.remote_addr) + self.sock.sendto(MSG_STRUCT.pack(self.frame, self.keystate, self.old_keystate), self.remote_addr) def run_game_iter(self, game, keystate, other_keystate): @@ -85,6 +88,6 @@ class Network(object): raise Exception #TODO self.run_game_iter(game, self.keystate, self.remote_keystate) elif game.frame > 2: - print('ARGH') + logger.warn('Message not received in time, dropping frame.')