| Home | Trees | Indices | Help |
|
|---|
|
|
1 # Copyright (c) 2011 Mathias Kaerlev.
2 # See LICENSE for details.
3
4 from struct import Struct
5
6 from lacewing.baseloader import _BaseLoader, _EmptyLoader
7 from lacewing.bitdict import BitDict
8 from lacewing.packetloaders.common import (_BinaryMessageMixin,
9 _ObjectMessageMixin)
10 from lacewing.packetloaders.common import (CONNECT, SET_NAME, JOIN_CHANNEL,
11 LEAVE_CHANNEL)
12
13 REQUEST_TYPE = Struct('<B')
14 FLAG_DATA = Struct('<B')
15 CHANNEL_DATA = Struct('<H')
16 SUBCHANNEL_DATA = Struct('<B')
17 CHANNEL_MESSAGE_DATA = Struct('<BH')
18 PEER_MESSAGE_DATA = Struct('<BHH')
19 CHANNEL_MASTER_DATA = Struct('<HBH')
20
21 MASTER_KICK, = xrange(1)
22
23 CHANNEL_FLAGS = BitDict(
24 'HideChannel',
25 'AutoClose'
26 )
27
29 request = None
30 version = None
31 name = None
32 flags = None
33 channel = None
34
37
39 request, = REQUEST_TYPE.unpack_from(data)
40 data = buffer(data, 1)
41 self.request = request
42 if request == CONNECT:
43 self.version = str(data)
44 elif request == SET_NAME:
45 self.name = str(data)
46 elif request == JOIN_CHANNEL:
47 flags, = FLAG_DATA.unpack_from(data)
48 self.flags.setFlags(flags)
49 self.name = str(buffer(data, FLAG_DATA.size))
50 elif request == LEAVE_CHANNEL:
51 self.channel, = CHANNEL_DATA.unpack_from(data)
52
54 request = self.request
55 requestByte = REQUEST_TYPE.pack(request)
56 if request == CONNECT:
57 return requestByte + self.version
58 elif request == SET_NAME:
59 return requestByte + self.name
60 elif request == JOIN_CHANNEL:
61 return (requestByte + FLAG_DATA.pack(
62 self.flags.getFlags()) + self.name)
63 elif request == LEAVE_CHANNEL:
64 return requestByte + CHANNEL_DATA.pack(self.channel)
65 else:
66 return requestByte
67
76
78 subchannel = None
79 channel = None
81 self.subchannel, self.channel = CHANNEL_MESSAGE_DATA.unpack_from(data)
82 self.readMessage(buffer(data, CHANNEL_MESSAGE_DATA.size))
83
87
89 subchannel = None
90 channel = None
91 peer = None
93 (self.subchannel, self.channel,
94 self.peer) = PEER_MESSAGE_DATA.unpack_from(data)
95 self.readMessage(buffer(data, PEER_MESSAGE_DATA.size))
96
98 return PEER_MESSAGE_DATA.pack(self.subchannel,
99 self.channel, self.peer) + self.generateMessage()
100
103
106
109
112
115
118
121
124
136
| Home | Trees | Indices | Help |
|
|---|
| Generated by Epydoc 3.0.1 on Thu Dec 22 06:20:00 2011 | http://epydoc.sourceforge.net |