Skip to content

Commit b7c5ea4

Browse files
committed
improve connection
1 parent 1791b81 commit b7c5ea4

File tree

4 files changed

+41
-13
lines changed

4 files changed

+41
-13
lines changed

wxagent/qirc.py

+20-8
Original file line numberDiff line numberDiff line change
@@ -60,13 +60,29 @@ def startup(self):
6060
return
6161

6262
def iterate(self):
63-
self._client.process_once(timeout=0)
63+
try:
64+
self._client.process_once(timeout=0)
65+
except irc.client.ServerNotConnectedError as ex:
66+
asyncio.get_event_loop().call_soon(self.reconnect)
6467
return
6568

6669
def reconnect(self):
6770
r = self._server.connect(self._host, self._port, self._user)
6871
return r
6972

73+
def tryReconnect(self):
74+
to = self.checkTimeout()
75+
reconn = False
76+
if to is True:
77+
reconn = True
78+
if self._server.is_connected() is False:
79+
qDebug('not connected. retry...')
80+
reconn = True
81+
82+
if reconn is True:
83+
self.reconnect()
84+
return
85+
7086
# use last_ping_time
7187
def checkTimeout(self):
7288
now = time.time()
@@ -147,6 +163,7 @@ def groupInvite(self, nick, channel):
147163
return
148164

149165
def sendMessage(self, msg):
166+
self.tryReconnect()
150167
if self._server.is_connected():
151168
ret = self._server.privmsg(self._peer_user, msg)
152169
qDebug(str(ret).encode())
@@ -155,7 +172,7 @@ def sendMessage(self, msg):
155172
return
156173

157174
def sendGroupMessage(self, msg, channel):
158-
to = self.checkTimeout()
175+
self.tryReconnect()
159176
if self._server.is_connected():
160177
if self.validName(channel):
161178
self.groupAdd(channel)
@@ -169,12 +186,7 @@ def sendGroupMessage(self, msg, channel):
169186
qDebug('Invalid channel name: {}'.format(channel).encode())
170187
return False
171188
else:
172-
qDebug('not connected. retry...')
173-
self.reconnect()
174-
if self._server.is_connected():
175-
return self.sendGroupMessage(msg, channel)
176-
else:
177-
return False
189+
qDebug('wtf')
178190
return True
179191

180192
def validName(self, name):

wxagent/qtoxkit.py

+13-5
Original file line numberDiff line numberDiff line change
@@ -571,10 +571,14 @@ def groupchatSendMessage(self, group_number, msg):
571571
# MAX_GROUP_MESSAGE_DATA_LEN
572572
mlen = 1371 - 10 # TODO 这应该是bytes,现在是以字符串方式处理,对于宽字符串可能能转为bytes后长度就超过了。
573573

574-
msg_inbytes = msg.encode()
575-
for msgn in self._splitmessage(msg_inbytes, mlen):
576-
msgn_instr = msgn.decode()
577-
rc = self.tox.group_message_send(group_number, msgn_instr)
574+
rc = None
575+
try:
576+
msg_inbytes = msg.encode()
577+
for msgn in self._splitmessage(msg_inbytes, mlen):
578+
msgn_instr = msgn.decode()
579+
rc = self.tox.group_message_send(group_number, msgn_instr)
580+
except Exception as ex:
581+
pass
578582
return rc
579583

580584
def groupchatJoin(self, friend_number, group_type, group_pubkey):
@@ -610,7 +614,11 @@ def groupPeerName(self, group_number, peer_number):
610614
return rc
611615

612616
def groupPeerPubkey(self, group_number, peer_number):
613-
rc = self.tox.group_peer_pubkey(group_number, peer_number)
617+
rc = None
618+
try:
619+
rc = self.tox.group_peer_pubkey(group_number, peer_number)
620+
except Exception as ex:
621+
qDebug(str(ex).encode())
614622
return rc
615623

616624
# @param group_pubkey data's hex encoded string

wxagent/roundtable.py

+4
Original file line numberDiff line numberDiff line change
@@ -163,6 +163,10 @@ def processOperatorRoundTable(self, msgo):
163163
qDebug(str(msgo).encode())
164164
if msgo['context']['content'] == '':
165165
return
166+
channel = msgo['context']['channel']
167+
if channel in ['#linuxba']:
168+
qDebug('filtered show title feature for channel:{}'.format(channel).encode())
169+
return
166170
msgo['src'] = msgo['context']['src']
167171
if msgo['src'] == 'IRCAgent':
168172
self.processOperatorIRC(msgo)

wxagent/toxrelay.py

+4
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,9 @@ def createChatroom(self, room_key, title):
7878
return str(group_number)
7979

8080
def groupInvite(self, group_number, peer):
81+
if group_number is None:
82+
qDebug('invalid group_number')
83+
return
8184
group_number = int(group_number)
8285
rc = self.toxkit.groupchatInviteFriend(group_number, peer)
8386
return rc
@@ -231,6 +234,7 @@ def groupPeerIsMe(self, group_number, peer_number):
231234
peer_pubkey = self.toxkit.groupPeerPubkey(group_number, peer_number)
232235
my_addr = self.toxkit.selfGetAddress()
233236
qDebug('{}, {}, {}'.format(peer_pubkey, my_addr, peer_pubkey == my_addr))
237+
if my_addr is None: return False
234238
return my_addr.find(peer_pubkey) == 0
235239

236240
def onlyMyself(self, group_number):

0 commit comments

Comments
 (0)