CommonClient: implement active keep-alive
This commit is contained in:
parent
494cfb3c04
commit
b1196885d7
|
@ -17,6 +17,7 @@ logger = logging.getLogger("Client")
|
|||
|
||||
gui_enabled = Utils.is_frozen() or "--nogui" not in sys.argv
|
||||
|
||||
|
||||
class ClientCommandProcessor(CommandProcessor):
|
||||
def __init__(self, ctx: CommonContext):
|
||||
self.ctx = ctx
|
||||
|
@ -86,11 +87,12 @@ class ClientCommandProcessor(CommandProcessor):
|
|||
|
||||
|
||||
class CommonContext():
|
||||
starting_reconnect_delay = 5
|
||||
current_reconnect_delay = starting_reconnect_delay
|
||||
command_processor = ClientCommandProcessor
|
||||
game: None
|
||||
ui: None
|
||||
starting_reconnect_delay: int = 5
|
||||
current_reconnect_delay: int = starting_reconnect_delay
|
||||
command_processor: int = ClientCommandProcessor
|
||||
game = None
|
||||
ui = None
|
||||
keep_alive_task = None
|
||||
|
||||
def __init__(self, server_address, password):
|
||||
# server state
|
||||
|
@ -127,6 +129,9 @@ class CommonContext():
|
|||
self.jsontotextparser = JSONtoTextParser(self)
|
||||
self.set_getters(network_data_package)
|
||||
|
||||
# execution
|
||||
self.keep_alive_task = asyncio.create_task(keep_alive(self))
|
||||
|
||||
async def connection_closed(self):
|
||||
self.auth = None
|
||||
self.items_received = []
|
||||
|
@ -219,6 +224,16 @@ class CommonContext():
|
|||
pass
|
||||
|
||||
|
||||
async def keep_alive(ctx: CommonContext):
|
||||
""" some ISPs/network configurations drop TCP connections if no payload is sent (ignore TCP-keep-alive)
|
||||
so we send a payload to prevent drop and if we were dropped anyway this will cause a reconnect."""
|
||||
while not ctx.exit_event.is_set():
|
||||
await asyncio.sleep(100)
|
||||
if ctx.server and ctx.slot:
|
||||
await ctx.send_msgs([{"cmd": "Bounce", "slots": [ctx.slot]}])
|
||||
logger.info("Bouncy")
|
||||
|
||||
|
||||
async def server_loop(ctx: CommonContext, address=None):
|
||||
cached_address = None
|
||||
if ctx.server and ctx.server.socket:
|
||||
|
|
Loading…
Reference in New Issue