diff options
author | pzread <netfirewall@gmail.com> | 2013-05-26 02:58:29 +0800 |
---|---|---|
committer | pzread <netfirewall@gmail.com> | 2013-05-26 02:58:29 +0800 |
commit | 5c2764816a3db7a4a2a8d8099967abf5f9462ffe (patch) | |
tree | 029ec09ad4c321b8fb134a2f05931c8cbe2e3e57 /src/py/netio.py | |
parent | 3653c85804a25de0162064449b4585717af77557 (diff) | |
download | taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar.gz taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar.bz2 taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar.lz taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar.xz taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.tar.zst taiwan-online-judge-5c2764816a3db7a4a2a8d8099967abf5f9462ffe.zip |
Do file connection
Diffstat (limited to 'src/py/netio.py')
-rw-r--r-- | src/py/netio.py | 33 |
1 files changed, 22 insertions, 11 deletions
diff --git a/src/py/netio.py b/src/py/netio.py index c6aacbc..0e8cab1 100644 --- a/src/py/netio.py +++ b/src/py/netio.py @@ -16,35 +16,42 @@ def recv_pack(stream,callback): stream.read_bytes(8,_recv_size) class SocketConnection(Connection): - def __init__(self,linkclass,linkid,stream): + def __init__(self,linkclass,linkid,call_stream,file_stream = None): super().__init__(linkclass,linkid) - self.ioloop = tornado.ioloop.IOLoop.current() - self.stream = stream - self.stream.set_close_callback(self.close) + self._ioloop = tornado.ioloop.IOLoop.current() + self.call_stream = call_stream + self.call_stream.set_close_callback(self.close) + + if file_stream == None: + self.file_stream = None + + else: + self.file_stream = file_stream + self.file_stream.set_close_callback(self.close) self._start_ping() def send_msg(self,data): - self.stream.write(struct.pack('l',len(data)) + data) + self.call_stream.write(struct.pack('l',len(data)) + data) def start_recv(self,recv_callback): def _recv_size(data): size, = struct.unpack('l',data) if size > 0: - self.stream.read_bytes(size,_recv_data) + self.call_stream.read_bytes(size,_recv_data) else: if size == -1: #pong self._ping_delay = 0 - self.stream.read_bytes(8,_recv_size) + self.call_stream.read_bytes(8,_recv_size) def _recv_data(data): self._recv_callback(self,data) - self.stream.read_bytes(8,_recv_size) + self.call_stream.read_bytes(8,_recv_size) self._recv_callback = tornado.stack_context.wrap(recv_callback) - self.stream.read_bytes(8,_recv_size) + self.call_stream.read_bytes(8,_recv_size) def close(self): try: @@ -52,11 +59,15 @@ class SocketConnection(Connection): except AttributeError: pass + self.call_stream.close() + if self.file_stream != None: + self.file_stream.close() + super().close() def _start_ping(self): def __check(): - self.stream.write(struct.pack('l',-1)) + self.call_stream.write(struct.pack('l',-1)) self._ping_delay += 1 if self._ping_delay > 10: @@ -70,7 +81,7 @@ class WebSocketConnection(Connection): def __init__(self,linkclass,linkid,handler): super().__init__(linkclass,linkid) - self.ioloop = tornado.ioloop.IOLoop.current() + self._ioloop = tornado.ioloop.IOLoop.current() self.handler = handler def send_msg(self,data): |