X-Git-Url: https://git.novaco.in/?a=blobdiff_plain;f=transports%2Fstratum_tcp.py;h=4bcefabb145e353f41987a09873126276bf642ec;hb=f67ae92c742e2583f61684f15899e973d45dc804;hp=ab6c5c3bf948f8ee7d3af7fbd47d0b3480ae0c69;hpb=5ee042c213baa4ae8a0f538de64644ae9abe7b36;p=electrum-server.git diff --git a/transports/stratum_tcp.py b/transports/stratum_tcp.py index ab6c5c3..4bcefab 100644 --- a/transports/stratum_tcp.py +++ b/transports/stratum_tcp.py @@ -4,15 +4,15 @@ import threading import time import Queue as queue -from processor import Session, Dispatcher +from processor import Session, Dispatcher, timestr class TcpSession(Session): def __init__(self, connection, address): - self._connection = connection - self.address = address Session.__init__(self) - print "New session", address + self._connection = connection + self.address = address[0] + self.name = "TCP" def connection(self): if self.stopped(): @@ -22,18 +22,20 @@ class TcpSession(Session): def stop(self): self._connection.close() - print "Terminating connection:", self.address[0] + #print "Terminating connection:", self.address with self.lock: self._stopped = True def send_response(self, response): - raw_response = json.dumps(response) + data = json.dumps(response) + "\n" # Possible race condition here by having session # close connection? # I assume Python connections are thread safe interfaces try: connection = self.connection() - connection.send(raw_response + "\n") + while data: + l = connection.send(data) + data = data[l:] except: self.stop() @@ -53,6 +55,8 @@ class TcpClientRequestor(threading.Thread): if not self.update(): break + self.session.time = time.time() + while self.parse(): pass @@ -68,7 +72,7 @@ class TcpClientRequestor(threading.Thread): def receive(self): try: - return self.session.connection().recv(1024) + return self.session.connection().recv(2048) except: return '' @@ -121,11 +125,8 @@ class TcpServer(threading.Thread): sock.listen(1) while not self.shared.stopped(): session = TcpSession(*sock.accept()) - client_req = TcpClientRequestor(self.dispatcher, session) - client_req.start() self.dispatcher.add_session(session) self.dispatcher.collect_garbage() - - - + client_req = TcpClientRequestor(self.dispatcher, session) + client_req.start()