@@ -9,7 +9,7 @@ class _KA:
9
9
attempts : int = 3
10
10
11
11
class KeepAlive (AbstractProtocol ):
12
- def __init__ (self , interval = 20 , timeout = 10 , submodule = None , callback : Callable [[tuple [str , int ], bytes ], None ] = lambda addr ,msg : ...):
12
+ def __init__ (self , interval = 20 , timeout = 5 , submodule = None , callback : Callable [[tuple [str , int ], bytes ], None ] = lambda addr ,msg : ...):
13
13
assert timeout < interval
14
14
self .keep_alives : dict [bytes ,_KA ] = dict ()
15
15
self .disconnected_callback = lambda * args : ...
@@ -47,10 +47,11 @@ def remove_peer(self, addr: tuple[str, int], node_id: bytes):
47
47
if self .keep_alives .get (node_id ) == None :
48
48
return
49
49
self .keep_alives [node_id ].attempts -= 1
50
-
50
+ if self .keep_alives [node_id ].attempts == 1 :
51
+ return asyncio .get_event_loop ().create_task (self .send_ping (addr ,lambda addr , id_node = node_id , self = self : self .resp (addr ,id_node ), lambda addr , id_node = node_id , self = self : self .remove_peer (addr , id_node ),self .timeout ))
51
52
if self .keep_alives [node_id ].attempts <= 0 :
52
- if self .a_to_n .get (self . keep_alives [ node_id ]. addr ) != None :
53
- del self .a_to_n [self . keep_alives [ node_id ]. addr ]
53
+ if self .a_to_n .get (addr ) != None :
54
+ del self .a_to_n [addr ]
54
55
del self .keep_alives [node_id ]
55
56
self .disconnected_callback (addr ,node_id )
56
57
def resp (self ,addr ,id_node ):
@@ -72,7 +73,9 @@ def datagram_received(self, addr: tuple[str, int], data: bytes):
72
73
def check_each (self ):
73
74
loop = asyncio .get_event_loop ()
74
75
for k ,v in self .keep_alives .items ():
75
-
76
+ if v .attempts <= 1 :
77
+ continue
78
+ v .attempts = 2
76
79
loop .create_task (self .send_ping (v .addr ,lambda addr , id_node = k , self = self : self .resp (addr ,id_node ), lambda addr , id_node = k , self = self : self .remove_peer (addr , id_node ),self .timeout ))
77
80
78
81
self .refresh_loop = loop .call_later (self .interval , self .check_each )
0 commit comments