2011-08-19, 22:39
#1
Jag frsker att experimentera med Eventhooks. Men jag behver att definera och kalla p ganska mnga olika events och nu brjar det ta ganska stor plats i min kod. Det jag gr, r att jag mste frst deklarera en event och sedan definera vad som ska trigga denna event (blanda inte ihop det med vad eventen kommer att kalla, nr vl den har blivit triggad).
Det som triggar mina events r olika paket som en klient skickar, fr att kunna trigga olika events med olika paket, krvs ett protokoll, det r hr koden brjar bli stor. Jag mste allts bde deklerera event fr att sedan gra samma i protokollet. Jag skulle vilja gra bda dom i ett och samma svep.
Hr r ett kodexempel:
Tnk er, att om jag lgger till 100 events extra, d kommer koden att bli minst dubbelt s lng, eftersom en event mste deklareras (self.onClientAdd = Event()) fr att sedan lggas in i protokollet ("clientAdd":self.onClientAdd).
Frslag: Om jag p ngot vis skulle kunna ha protokollet i en fil som skriptet sedan lser in. Skriptet loopar igenom alla pakettyper och fr varsin event, sedan borde jag kunna skapa en dictionary som ska vara protokollet som ReadPacket anvnder. Jag har frskt och frskt, men hittar ingen utvg.
Eventklassen: http://paste.pound-python.org/show/11264/
Kodexemplet (med frg!
): http://paste.pound-python.org/show/11265/
Tacksam fr ven de minsta tipsen!
Det som triggar mina events r olika paket som en klient skickar, fr att kunna trigga olika events med olika paket, krvs ett protokoll, det r hr koden brjar bli stor. Jag mste allts bde deklerera event fr att sedan gra samma i protokollet. Jag skulle vilja gra bda dom i ett och samma svep.
Hr r ett kodexempel:
Kod:
#------------- server.py --------------- class Manager: def __init__(self): self.onClientAdd = Event() self.onClientRemove = Event() self.onClientPing = Event() self.protocol = { "clientAdd" : self.onClientAdd, "clientRemove" : self.onClientRemove, "clientPing" : self.onClientPing } def ReadPacket(self, data): self.protocol.get(data["type"])(data) # Route packets to it's specified function in the protocol dictionary. #---------------------------- main.py --------------------------------------- import server # This should be called when a "clientAdd" packet has been recieved def AddingClient(data): print "adding client %s" % data["id"] # This should be called when a "clientRemove" packet has been recieved def RemovingClient(data): print "removing client %s" % data["id"] # This should be called when a "clientPing" packet has been recieved def PingingClient(data): print "pining client %s" % data["id"] serverMan = server.Manager() # Hooka metoder till events serverMan.onClientAdd += AddingClient serverMan.onClientRemove += RemovingClient serverMan.onClientPing += PingingClient # Send a test packet to the server, where id is "1337" and packet type is "clientAdd". serverMan.ReadPacket({"id":1337,"type":"clientAdd"}) #-------------------------- OUTPUT -------------------- adding client 1137
Tnk er, att om jag lgger till 100 events extra, d kommer koden att bli minst dubbelt s lng, eftersom en event mste deklareras (self.onClientAdd = Event()) fr att sedan lggas in i protokollet ("clientAdd":self.onClientAdd).
Frslag: Om jag p ngot vis skulle kunna ha protokollet i en fil som skriptet sedan lser in. Skriptet loopar igenom alla pakettyper och fr varsin event, sedan borde jag kunna skapa en dictionary som ska vara protokollet som ReadPacket anvnder. Jag har frskt och frskt, men hittar ingen utvg.
Eventklassen: http://paste.pound-python.org/show/11264/
Kodexemplet (med frg!

Tacksam fr ven de minsta tipsen!
__________________
Senast redigerad av Iderik 2011-08-19 kl. 22:44.
Senast redigerad av Iderik 2011-08-19 kl. 22:44.