2011-08-19, 22:39
#1
Jag försöker att experimentera med Eventhooks. Men jag behöver att definera och kalla på ganska många olika events och nu börjar det ta ganska stor plats i min kod. Det jag gör, är att jag måste först deklarera en event och sedan definera vad som ska trigga denna event (blanda inte ihop det med vad eventen kommer att kalla, när väl den har blivit triggad).
Det som triggar mina events är olika paket som en klient skickar, för att kunna trigga olika events med olika paket, krävs ett protokoll, det är här koden börjar bli stor. Jag måste alltså både deklerera event för att sedan göra samma i protokollet. Jag skulle vilja göra båda dom i ett och samma svep.
Här är ett kodexempel:
Tänk er, att om jag lägger till 100 events extra, då kommer koden att bli minst dubbelt så lång, eftersom en event måste deklareras (self.onClientAdd = Event()) för att sedan läggas in i protokollet ("clientAdd":self.onClientAdd).
Förslag: Om jag på något vis skulle kunna ha protokollet i en fil som skriptet sedan läser in. Skriptet loopar igenom alla pakettyper och får varsin event, sedan borde jag kunna skapa en dictionary som ska vara protokollet som ReadPacket använder. Jag har försökt och försökt, men hittar ingen utväg.
Eventklassen: http://paste.pound-python.org/show/11264/
Kodexemplet (med färg! ): http://paste.pound-python.org/show/11265/
Tacksam för även de minsta tipsen!
Det som triggar mina events är olika paket som en klient skickar, för att kunna trigga olika events med olika paket, krävs ett protokoll, det är här koden börjar bli stor. Jag måste alltså både deklerera event för att sedan göra samma i protokollet. Jag skulle vilja göra båda dom i ett och samma svep.
Här ä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
Tänk er, att om jag lägger till 100 events extra, då kommer koden att bli minst dubbelt så lång, eftersom en event måste deklareras (self.onClientAdd = Event()) för att sedan läggas in i protokollet ("clientAdd":self.onClientAdd).
Förslag: Om jag på något vis skulle kunna ha protokollet i en fil som skriptet sedan läser in. Skriptet loopar igenom alla pakettyper och får varsin event, sedan borde jag kunna skapa en dictionary som ska vara protokollet som ReadPacket använder. Jag har försökt och försökt, men hittar ingen utväg.
Eventklassen: http://paste.pound-python.org/show/11264/
Kodexemplet (med färg! ): http://paste.pound-python.org/show/11265/
Tacksam för även de minsta tipsen!
__________________
Senast redigerad av Iderik 2011-08-19 kl. 22:44.
Senast redigerad av Iderik 2011-08-19 kl. 22:44.