Adding Packet.Length to get the length of a packet without serializing to bytes

git-svn-id: http://libopenmetaverse.googlecode.com/svn/libopenmetaverse/trunk@2537 52acb1d6-8a22-11de-b505-999d5b087335
This commit is contained in:
John Hurliman
2009-03-25 20:19:25 +00:00
parent d98e36491f
commit 5cbdc8fdd0
2 changed files with 4061 additions and 0 deletions

View File

@@ -439,6 +439,38 @@ namespace mapgenerator
writer.WriteLine(" public override PacketType Type { get { return PacketType." +
packet.Name + "; } }");
// Length member
writer.WriteLine(" public override int Length" + Environment.NewLine +
" {" + Environment.NewLine + " get" + Environment.NewLine +
" {");
if (packet.Frequency == PacketFrequency.Low) { writer.WriteLine(" int length = 10;"); }
else if (packet.Frequency == PacketFrequency.Medium) { writer.WriteLine(" int length = 8;"); }
else { writer.WriteLine(" int length = 7;"); }
foreach (MapBlock block in packet.Blocks)
{
if (block.Name == "Header") { sanitizedName = "_" + block.Name; }
else { sanitizedName = block.Name; }
if (block.Count == -1)
{
// Variable count block
writer.WriteLine(" for (int j = 0; j < " + sanitizedName + ".Length; j++)");
writer.WriteLine(" length += " + sanitizedName + "[j].Length;");
}
else if (block.Count == 1)
{
writer.WriteLine(" length += " + sanitizedName + ".Length;");
}
else
{
// Multiple count block
writer.WriteLine(" for (int j = 0; j < " + block.Count + "; j++)");
writer.WriteLine(" length += " + sanitizedName + "[j].Length;");
}
}
writer.WriteLine(" return length;");
writer.WriteLine(" }" + Environment.NewLine + " }");
// Block members
foreach (MapBlock block in packet.Blocks)
{
@@ -791,6 +823,7 @@ namespace mapgenerator
" public abstract partial class Packet" + Environment.NewLine + " {" + Environment.NewLine +
" public abstract Header Header { get; set; }" + Environment.NewLine +
" public abstract PacketType Type { get; }" + Environment.NewLine +
" public abstract int Length { get; }" + Environment.NewLine +
" public abstract void FromBytes(byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine +
" public abstract void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd, byte[] zeroBuffer);" + Environment.NewLine +
" public abstract byte[] ToBytes();"