PageRenderTime 30ms CodeModel.GetById 14ms app.highlight 13ms RepoModel.GetById 1ms app.codeStats 0ms

/Protocol/generator/template/template_msg_network.h

http://awoe.googlecode.com/
C++ Header | 304 lines | 274 code | 21 blank | 9 comment | 35 complexity | 62f57f5d4a2dd0500164122a02447e2b MD5 | raw file
  1//
  2//	Generated by lua
  3//	2009-2011	(C) Simplay Inc. Reserved
  4//
  5
  6#ifndef __MSG_<#=file_tag#>_H__
  7#define __MSG_<#=file_tag#>_H__
  8
  9#include "Message/MsgBase.h"
 10#include "Message/MsgCategory.h"
 11#include "CommonType.h"
 12
 13#pragma pack(push, 1)
 14
 15
 16<#
 17for _,msg in ipairs(messages) do
 18	if msg.define=="struct" then
 19#>
 20//
 21//	Message Definition for <#=msg.name#>
 22
 23struct <#=msg.name#>
 24<#
 25		if msg.base then
 26#>
 27	: public <#=msg.base#>
 28<#
 29		end
 30#>
 31{
 32public:
 33	<#=msg.name#>()
 34	{
 35		<#
 36		for _,attr in ipairs(msg.attributes) do
 37			if attr.default then
 38				if attr.list then
 39				elseif attr.array then
 40		#>
 41		for (int i=0; i<<#=attr.array#>; i++)
 42		{
 43			<#=vname(attr.name)#> [i] = <#=attr.default#>;
 44		}
 45		<#
 46				else
 47		#>
 48		<#=vname(attr.name)#> = <#=attr.default#>;
 49		<#
 50				end
 51			end
 52		end
 53		#>
 54	}
 55
 56	virtual bool onEncode(MsgOStream& s) const
 57	{
 58		<#
 59		if msg.base then
 60		#>
 61		__super::onEncode(s);
 62		<#
 63		end
 64		
 65		for _,attr in ipairs(msg.attributes) do
 66			if attr.list then
 67		#>
 68		short list_size = <#=vname(attr.name)#>.size();
 69		s<<list_size;
 70		if (list_size>0)
 71		{
 72			for (<#=types(attr.type)#>List::iterator it = <#=vname(attr.name)#>.begin(); it!=<#=vname(attr.name)#>.end(); it++)
 73			{
 74				s<<*it;
 75			}
 76		}
 77		<#
 78			elseif attr.array then
 79		#>
 80		for(int i=0; i<<#=attr.array#>; i++)
 81		{
 82			s<<<#=vname(attr.name)#>[i];
 83		}
 84		<#
 85		else
 86		#>
 87		s<<<#=vname(attr.name)#>;
 88		<#
 89			end
 90		end
 91		#>
 92		return true;
 93	}
 94	virtual bool onDecode(MsgIStream& s)
 95	{
 96		<#
 97		if msg.base then
 98		#>
 99		__super::onDecode(s);
100		<#
101		end
102		
103		for _,attr in ipairs(msg.attributes) do
104			if attr.list then
105		#>
106		short list_size = 0;
107		s>>list_size;
108		<#=vname(attr.name)#>.clear()
109		while(list_size>0)
110		{
111			list_size--;
112			<#=types(attr.type)#> val;
113			s>>val;
114			<#=vname(attr.name)#>.push_back(val);
115		}
116		<#
117			elseif attr.array then
118		#>
119		for(int i=0; i<<#=attr.array#>; i++)
120		{
121			s>><#=vname(attr.name)#>[i];
122		}
123		<#
124			else
125		#>
126		s>><#=vname(attr.name)#>;
127		<#
128			end
129		end
130		#>
131		return true;
132	}
133
134	<#
135	for _,attr in ipairs(msg.attributes) do
136		if attr.list then
137	#>
138	typedef std::list< <#=types(attr.type)#> > <#=types(attr.type)#>List;
139	<#=types(attr.type)#>List	<#=vname(attr.name)#>;
140	<#
141		elseif attr.array then
142	#>
143	<#=types(attr.type)#>	<#=vname(attr.name)#>[<#=attr.array#>];
144	<#
145		else
146	#>
147	<#=types(attr.type)#>	<#=vname(attr.name)#>;
148	<#
149		end
150	end
151	#>
152};
153
154
155<#
156	else
157#>
158//
159//	Message Definition for <#=msg.name#>
160
161//
162class Msg<#=msg.name#>
163<#
164if msg.base then
165#>
166	: public <#=msg.base#>
167<#
168end
169#>
170
171{
172public:
173	enum { Category = <#=msg.category#>, Id = <#=msg.id#> };
174
175	<#
176	if msg.base then
177	#>
178	Msg<#=msg.name#>()
179		:<#=msg.base#>(Category, Id)
180	<#
181	else
182	#>
183	Msg<#=msg.name#>()
184	<#
185	end
186	#>
187	{
188		<#
189		for _,attr in ipairs(msg.attributes) do
190			if attr.default then
191				if attr.list then
192				elseif attr.array then
193		#>
194		for (int i=0; i<<#=attr.array#>; i++)
195		{
196			<#=vname(attr.name)#> [i] = <#=attr.default#>;
197		}
198		<#
199				else
200		#>
201		<#=vname(attr.name)#> = <#=attr.default#>;
202		<#
203				end
204			end
205		end
206		#>
207	}
208
209
210	virtual bool encode(MsgOStream& s)
211	{
212		<#
213		for _,attr in ipairs(msg.attributes) do
214			if attr.list then
215		#>
216		short list_size = <#=vname(attr.name)#>.size();
217		s<<list_size;
218		if (list_size>0)
219		{
220			for (<#=types(attr.type)#>List::iterator it = <#=vname(attr.name)#>.begin(); it!=<#=vname(attr.name)#>.end(); it++)
221			{
222				s<<*it;
223			}
224		}
225		<#
226			elseif attr.array then
227		#>
228		for(int i=0; i<<#=attr.array#>; i++)
229		{
230			s<<<#=vname(attr.name)#>[i];
231		}
232		<#
233			else
234		#>
235		s<<<#=vname(attr.name)#>;
236		<#
237			end
238		end
239		#>
240		return true;
241	}
242	virtual bool decode(MsgIStream& s)
243	{
244		<#
245		for _,attr in ipairs(msg.attributes) do
246			if attr.list then
247		#>
248		short list_size = 0;
249		s>>list_size;
250		<#=vname(attr.name)#>.clear();
251		while(list_size>0)
252		{
253			list_size--;
254			<#=types(attr.type)#> val;
255			s>>val;
256			<#=vname(attr.name)#>.push_back(val);
257		}
258		<#
259			elseif attr.array then
260		#>
261		for(int i=0; i<<#=attr.array#>; i++)
262		{
263			s>><#=vname(attr.name)#>[i];
264		}
265		<#
266			else
267		#>
268		s>><#=vname(attr.name)#>;
269		<#
270			end
271		end
272		#>
273		return true;
274	}
275public:
276	<#
277	for _,attr in ipairs(msg.attributes) do
278		if attr.list then
279	#>
280	typedef std::vector< <#=types(attr.type)#> > <#=types(attr.type)#>List;
281	<#=types(attr.type)#>List	<#=vname(attr.name)#>;
282	<#
283		elseif attr.array then
284	#>
285	<#=types(attr.type)#>	<#=vname(attr.name)#>[<#=attr.array#>];
286	<#
287		else
288	#>
289	<#=types(attr.type)#>	<#=vname(attr.name)#>;
290	<#
291		end
292	end
293	#>
294};
295
296<#
297	end
298end
299#>
300
301
302#pragma pack(pop)
303
304#endif