asyncore - Client
Verfasst: Donnerstag 12. November 2009, 17:27
Ich habe einen Clienten geschrieben, der auch super funktioniert, nur ein Problem hat er, wenn man längere Zeit nichts gesendet hat (auser auf Pings geantwortet), dann einen Text senden will, wird er nicht gesendet! Wenn man kurz darauf nochmal einen Text sendet, kommt dieser an!
GUI mit wxPython
Kleines excerpt:
Jetzt, wird das ganze aufgerufen:
self.server = {server : tab, nick}, in dem alle ClientConnection-Objekte gespeichert werden (da man auf mehrere Server connecten können sollte)
self.tabs = {tab_object : (server, channel)} in dem alle "Tabs" gespeichert werden, "Tabs" sind Tabs von einem wx.aui.NoteBook()
tab.sendbuf = Gespeicherte Nachricht zum senden. Auf dem Tab ist eine TextCtrl, wenn man ENTER drückt, wird die Nachricht ausgelesen und in der Liste self.sendbuf gespeichert
//oh, was vergessen, manage_connection wird alle 0.3sekunden aufgerufen (wx.Timer())
Ich hoffe ihr könnt mir helfen
mfg
GUI mit wxPython
Kleines excerpt:
Code: Alles auswählen
class ClientConnection(asyncore.dispatcher):
def __init__(self, server, nick, ipv6=False):
asyncore.dispatcher.__init__(self)
if ipv6:
self.create_socket(socket.AF_INET6, socket.SOCK_STREAM)
else:
self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
self.connect((server, 5000))
self.buffer = ''
self.nick = nick
self.lines = []
def handle_connect(self):
self.send('NICK %s\r\n' % (self.nick))
def handle_close(self):
self.close()
def handle_read(self):
f = self.recv(2**14)
self.lines.append(f)
def handle_write(self):
sent = self.send(self.buffer)
self.buffer = self.buffer[sent:]
Jetzt, wird das ganze aufgerufen:
Code: Alles auswählen
def manage_connection(self, event):
asyncore.poll()
for server in self.server:
data = server.lines
for line in data:
print line # Nur'n Beispiel, da mach ich schon mehr ;)
server.lines = []
for tab in self.tabs:
if tab.sendbuf:
for msg in tab.sendbuf:
self.tabs[tab][0].send(msg)
tab.sendbuf = []
self.tabs = {tab_object : (server, channel)} in dem alle "Tabs" gespeichert werden, "Tabs" sind Tabs von einem wx.aui.NoteBook()
tab.sendbuf = Gespeicherte Nachricht zum senden. Auf dem Tab ist eine TextCtrl, wenn man ENTER drückt, wird die Nachricht ausgelesen und in der Liste self.sendbuf gespeichert
//oh, was vergessen, manage_connection wird alle 0.3sekunden aufgerufen (wx.Timer())
Ich hoffe ihr könnt mir helfen
mfg