@@ -65,6 +65,7 @@ def connection_made(self, transport):
65
65
self .old_nickname = None
66
66
self .nickname = ""
67
67
self .server_supports = collections .defaultdict (lambda * _ : None )
68
+ self .queue = []
68
69
self .caps = set ()
69
70
70
71
signal ("connected" ).send (self )
@@ -87,19 +88,27 @@ def connection_lost(self, exc):
87
88
88
89
## Core helper functions
89
90
91
+ def process_queue (self ):
92
+ if self .queue :
93
+ self ._writeln (self .queue .pop (0 ))
94
+ loop .call_later (5 , self .process_queue )
95
+
90
96
def on (self , event ):
91
97
def process (f ):
92
98
self .logger .debug ("Registering function for event {}" .format (event ))
93
99
signal (event ).connect (f )
94
100
return f
95
101
return process
96
102
97
- def writeln (self , line ):
103
+ def _writeln (self , line ):
98
104
if not isinstance (line , bytes ):
99
105
line = line .encode ()
100
106
self .transport .get_extra_info ('socket' ).send (line + b"\r \n " )
101
107
signal ("irc-send" ).send (line .decode ())
102
108
109
+ def writeln (self , line ):
110
+ self .queue .append (line )
111
+
103
112
def register (self , nick , user , realname , mode = "+i" , password = None ):
104
113
if password :
105
114
self .writeln ("PASS {}" .format (password ))
@@ -161,12 +170,10 @@ def connect(server, port=6697, use_ssl=True):
161
170
return protocol .wrapper
162
171
163
172
def reconnect (client_wrapper ):
164
- loop .stop ()
165
- connector = loop .create_connection (IRCProtocol , ** client .server_info )
173
+ connector = loop .create_connection (IRCProtocol , ** client_wrapper .server_info )
166
174
transport , protocol = loop .run_until_complete (connector )
167
175
protocol .logger .critical ("Reconnecting..." )
168
176
client_wrapper .protocol = protocol
169
- loop .run_forever ()
170
177
171
178
signal ("connection-lost" ).connect (reconnect )
172
179
0 commit comments