Package lacewing :: Package moo :: Package packetloaders :: Module client
[frames] | no frames]

Source Code for Module lacewing.moo.packetloaders.client

  1  # Copyright (c) 2011 Mathias Kaerlev. 
  2  # See LICENSE for details. 
  3   
  4  from struct import unpack_from, pack 
  5   
  6  from lacewing.moo.packetloaders.common import (unpack_string, _MooLoader,  
  7      _ChannelMixin, _ConnectionMixin) 
  8   
  9  from lacewing.moo.packetloaders.message import Message 
 10   
11 -class SetName(_MooLoader, _ConnectionMixin):
12 majorVersion = 3 # don't want our user to 13 minorVersion = 0 # fill these in 14 playerName = None 15
16 - def _load(self, data):
17 (self.majorVersion, 18 self.minorVersion, 19 nameSize) = unpack_from('<BBI', data) 20 self.playerName = unpack_string(data, nameSize, 6) 21 return 6 + nameSize
22
23 - def generate(self):
24 return pack('<BBI', self.majorVersion, self.minorVersion, 25 len(self.playerName)) + self.playerName
26
27 -class ClientMessage(_MooLoader):
28 subchannel = None 29 message = None 30
31 - def _load(self, data):
32 (self.subchannel, 33 messageSize) = unpack_from('<HI', data) 34 35 message = Message(**self.settings) 36 message.load(str(buffer(data, 6, messageSize))) 37 self.message = message 38 39 return 6 + messageSize
40
41 - def generate(self):
42 messageData = self.message.generate() 43 44 return pack('<HI', self.subchannel, len(messageData)) + messageData
45
46 -class JoinChannel(_MooLoader):
47 channelName = None 48
49 - def _load(self, data):
50 channelSize, = unpack_from('<I', data) 51 self.channelName = unpack_string(data, channelSize, 4) 52 53 return 4 + channelSize
54
55 - def generate(self):
56 return pack('<I', len(self.channelName)) + self.channelName
57
58 -class LeaveChannel(_MooLoader, _ChannelMixin):
59 channelId = None 60
61 - def _load(self, data):
62 self.channelId, = unpack_from('<I', data) 63 return 4
64
65 - def generate(self):
66 return pack('<I', self.channelId)
67
68 -class ChangeName(_MooLoader):
69 newName = None 70
71 - def _load(self, data):
72 nameSize, = unpack_from('<I', data) 73 self.newName = unpack_string(data, nameSize, 4) 74 return 4 + nameSize
75
76 - def generate(self):
77 return pack('<I', len(self.newName)) + self.newName
78
79 -class ToChannelMessage(_MooLoader, _ChannelMixin):
80 subchannel = None 81 message = None 82 channelId = None 83
84 - def _load(self, data):
85 (self.subchannel, 86 self.channelId, 87 messageSize) = unpack_from('<HII', data) 88 89 message = Message(**self.settings) 90 message.load(str(buffer(data, 10, messageSize))) 91 self.message = message 92 93 return 10 + messageSize
94
95 - def generate(self):
96 messageData = self.message.generate() 97 98 return pack('<HII', self.subchannel, self.channelId, len(messageData)) + messageData
99
100 -class PrivateMessage(_MooLoader, _ChannelMixin, _ConnectionMixin):
101 subchannel = None 102 message = None 103 channelId = None 104 playerId = None 105
106 - def _load(self, data):
107 (self.subchannel, 108 self.channelId, 109 self.playerId, 110 messageSize) = unpack_from('<HIII', data) 111 112 message = Message(**self.settings) 113 message.load(str(buffer(data, 14, messageSize))) 114 self.message = message 115 116 return 14 + messageSize
117
118 - def generate(self):
119 messageData = self.message.generate() 120 121 return pack('<HIII', self.subchannel, self.channelId, 122 self.playerId, len(messageData)) + messageData
123 124 __all__ = ['SetName', 'ClientMessage', 'JoinChannel', 'LeaveChannel', 125 'ChangeName', 'ToChannelMessage', 'PrivateMessage'] 126