|
@@ -30,6 +30,7 @@ import traceback
|
|
|
|
|
|
import blinker
|
|
import blinker
|
|
import curio
|
|
import curio
|
|
|
|
+import digilib.misc
|
|
|
|
|
|
lclient = logging.getLogger(__name__+".client")
|
|
lclient = logging.getLogger(__name__+".client")
|
|
lserver = logging.getLogger(__name__+".server")
|
|
lserver = logging.getLogger(__name__+".server")
|
|
@@ -82,14 +83,14 @@ class ConnHandlerBase(object):
|
|
lserver.error(e, exc_info=True)
|
|
lserver.error(e, exc_info=True)
|
|
return False
|
|
return False
|
|
|
|
|
|
- def close(self):
|
|
|
|
|
|
+ async def close(self):
|
|
self.status = "closed"
|
|
self.status = "closed"
|
|
try:
|
|
try:
|
|
- self.socket.shutdown(0)
|
|
|
|
|
|
+ await self.socket.shutdown(0)
|
|
except:
|
|
except:
|
|
lserver.debug("error during socket shutdown")
|
|
lserver.debug("error during socket shutdown")
|
|
try:
|
|
try:
|
|
- self.socket.close()
|
|
|
|
|
|
+ await self.socket.close()
|
|
except:
|
|
except:
|
|
lserver.debug("error closing socket")
|
|
lserver.debug("error closing socket")
|
|
|
|
|
|
@@ -137,7 +138,7 @@ class Server(object):
|
|
self.read_sockets_expected = [self.socket]
|
|
self.read_sockets_expected = [self.socket]
|
|
atexit.register(self.shutdown)
|
|
atexit.register(self.shutdown)
|
|
|
|
|
|
- def make_socket(self):
|
|
|
|
|
|
+ def make_socket(self):
|
|
lserver.debug("making a {} socket".format(self.af_family))
|
|
lserver.debug("making a {} socket".format(self.af_family))
|
|
if self.af_family == "AF_INET":
|
|
if self.af_family == "AF_INET":
|
|
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
|
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
|
|
@@ -203,7 +204,7 @@ class Server(object):
|
|
# up a second time when the program exits
|
|
# up a second time when the program exits
|
|
atexit.unregister(self.shutdown)
|
|
atexit.unregister(self.shutdown)
|
|
lserver.info("shutting down server")
|
|
lserver.info("shutting down server")
|
|
- error_handler(self.handle_tasks.cancel,log_text="handler cancel")
|
|
|
|
|
|
+ error_handler(self.handle_tasks.cancel_remaining,log_text="handler cancel")
|
|
if self.socket:
|
|
if self.socket:
|
|
error_handler(self.socket.shutdown,log_text="socket shutdown")
|
|
error_handler(self.socket.shutdown,log_text="socket shutdown")
|
|
error_handler(self.socket.close,log_text="socket close")
|
|
error_handler(self.socket.close,log_text="socket close")
|
|
@@ -228,12 +229,12 @@ class Server(object):
|
|
handler = self.make_handler(conn, addr)
|
|
handler = self.make_handler(conn, addr)
|
|
self.register_conn(conn, addr)
|
|
self.register_conn(conn, addr)
|
|
self.register_handler(handler, conn)
|
|
self.register_handler(handler, conn)
|
|
- await self.handle_task.spawn(self.wait_for_client(conn,handler))
|
|
|
|
|
|
+ await self.handle_tasks.spawn(self.handle_client(conn,handler))
|
|
|
|
|
|
async def handle_client(self,socket,handler):
|
|
async def handle_client(self,socket,handler):
|
|
- _append_task()
|
|
|
|
- # while True:
|
|
|
|
- for i in range(1):
|
|
|
|
|
|
+ # _append_task()
|
|
|
|
+ while True:
|
|
|
|
+ # for i in range(1):
|
|
try:
|
|
try:
|
|
if self.log_ip:
|
|
if self.log_ip:
|
|
lserver.debug("waiting for {} to send something"
|
|
lserver.debug("waiting for {} to send something"
|
|
@@ -249,7 +250,8 @@ class Server(object):
|
|
lserver.info("the connection to the client was closed")
|
|
lserver.info("the connection to the client was closed")
|
|
self.unregister_handler(handler, socket)
|
|
self.unregister_handler(handler, socket)
|
|
self.unregister_conn(socket)
|
|
self.unregister_conn(socket)
|
|
- handler.close()
|
|
|
|
|
|
+ await handler.close()
|
|
|
|
+ break
|
|
else:
|
|
else:
|
|
lschat.info("Client:"+data.strip())
|
|
lschat.info("Client:"+data.strip())
|
|
coro = handler.handle(data)
|
|
coro = handler.handle(data)
|
|
@@ -259,8 +261,9 @@ class Server(object):
|
|
lserver.error(e, exc_info=True)
|
|
lserver.error(e, exc_info=True)
|
|
# saver to use time.sleep
|
|
# saver to use time.sleep
|
|
time.sleep(0.1)
|
|
time.sleep(0.1)
|
|
- digilib.misc.fake_wait_task()
|
|
|
|
- _tasks.remove(cur_task)
|
|
|
|
|
|
+ cur_task = await curio.current_task()
|
|
|
|
+ await curio.ignore_after(0,cur_task.join)
|
|
|
|
+ # _tasks.remove(cur_task)
|
|
|
|
|
|
|
|
|
|
class Client(threading.Thread):
|
|
class Client(threading.Thread):
|