Package lacewing :: Package moo :: Module packet
[frames] | no frames]

Source Code for Module lacewing.moo.packet

 1  # Copyright (c) 2011 Mathias Kaerlev. 
 2  # See LICENSE for details. 
 3   
 4  import struct 
 5  from struct import unpack_from, pack 
 6   
 7  from lacewing.moo.packetloaders.server import * 
 8  from lacewing.moo.packetloaders.client import * 
 9   
10  from lacewing.moo.packetloaders.common import OutOfData 
11   
12  csTypes = { 
13      1 : ToChannelMessage, 
14      2 : ClientMessage, 
15      3 : PrivateMessage, 
16      4 : JoinChannel, 
17      5 : LeaveChannel, 
18      11 : ChangeName, 
19      12 : SetName, 
20   
21  } 
22   
23  scTypes = { 
24      1 : FromChannelMessage, 
25      5 : PlayerLeft, 
26      6 : PlayerJoined, 
27      7 : PlayerExists, 
28      8 : ChannelJoined, 
29      10 : MOTD, 
30      11 : PlayerChanged, 
31      12 : AssignedID, 
32  } 
33   
34 -class _Packet(object):
35 loader = None 36
37 - def __init__(self, **settings):
38 self.settings = settings
39
40 - def load(self, data):
41 try: 42 packetId, = unpack_from('<B', data) 43 except struct.error: 44 raise OutOfData 45 loader = self._loaderDict[packetId](**self.settings) 46 self.loader = loader 47 return loader.load(data[1:]) + 1
48
49 - def generate(self):
50 packetId = [k for (k, v) in self._loaderDict.iteritems() 51 if isinstance(self.loader, v)][0] 52 return pack('<B', packetId) + self.loader.generate()
53
54 -class ServerPacket(_Packet):
55 _loaderDict = scTypes
56
57 -class ClientPacket(_Packet):
58 _loaderDict = csTypes
59