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