From 3f86fa3e66fe04cff7c7de56e75834c3a307e940 Mon Sep 17 00:00:00 2001 From: cinder Date: Thu, 2 Jan 2025 16:43:28 -0600 Subject: [PATCH] Pack MapGenerator and PacketDump as dotnet tools --- LibreMetaverse.sln | 26 +-- Programs/examples/PacketDump/PacketDump.cs | 39 ++-- .../examples/PacketDump/PacketDump.csproj | 5 +- Programs/mapgenerator/ProtocolManager.cs | 219 ++++++++++-------- Programs/mapgenerator/mapgenerator.cs | 159 +++++++------ Programs/mapgenerator/mapgenerator.csproj | 5 +- 6 files changed, 252 insertions(+), 201 deletions(-) diff --git a/LibreMetaverse.sln b/LibreMetaverse.sln index 396f3c46..72ef4399 100644 --- a/LibreMetaverse.sln +++ b/LibreMetaverse.sln @@ -31,7 +31,7 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "VivoxTest", "Programs\Vivox EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LibreMetaverse.PrimMesher", "PrimMesher\LibreMetaverse.PrimMesher.csproj", "{2E2B643F-F18B-4791-BA4B-6E82D0E794B6}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "mapgenerator", "Programs\mapgenerator\mapgenerator.csproj", "{2867B4B3-0000-0000-0000-000000000000}" +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MapGenerator", "Programs\mapgenerator\MapGenerator.csproj", "{2867B4B3-0000-0000-0000-000000000000}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{F8CE4DE6-82E5-49D1-BCDF-BB3E63A52867}" ProjectSection(SolutionItems) = preProject @@ -51,6 +51,14 @@ Global Release|Any CPU = Release|Any CPU EndGlobalSection GlobalSection(ProjectConfigurationPlatforms) = postSolution + {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {27C70F3A-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {27C70F3A-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -83,6 +91,10 @@ Global {58443010-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {58443010-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU {58443010-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU + {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU + {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU + {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {EE4EA934-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU {EE4EA934-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU @@ -103,18 +115,6 @@ Global {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Debug|Any CPU.Build.0 = Debug|Any CPU {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.ActiveCfg = Release|Any CPU {FB07C6DE-F791-4336-B6E2-B32EEAC34792}.Release|Any CPU.Build.0 = Release|Any CPU - {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79B51DAA-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79B51DAA-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {89049BBC-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {89049BBC-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU - {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F71FDB3-0000-0000-0000-000000000000}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F71FDB3-0000-0000-0000-000000000000}.Release|Any CPU.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE diff --git a/Programs/examples/PacketDump/PacketDump.cs b/Programs/examples/PacketDump/PacketDump.cs index 0c90807c..b2e2db04 100644 --- a/Programs/examples/PacketDump/PacketDump.cs +++ b/Programs/examples/PacketDump/PacketDump.cs @@ -1,5 +1,6 @@ /* * Copyright (c) 2006-2016, openmetaverse.co + * Copyright (c) 2025, Sjofn LLC. * All rights reserved. * * - Redistribution and use in source and binary forms, with or without @@ -31,32 +32,36 @@ using OpenMetaverse.Packets; namespace PacketDump { - class PacketDump + internal class PacketDump { - static bool LoginSuccess = false; - static AutoResetEvent LoginEvent = new AutoResetEvent(false); + private static bool LoginSuccess = false; + private static AutoResetEvent LoginEvent = new AutoResetEvent(false); /// /// The main entry point for the application. /// [STAThread] - static void Main(string[] args) + private static void Main(string[] args) { if (args.Length != 4) { - Console.WriteLine("Usage: PacketDump [firstname] [lastname] [password] [seconds (0 for infinite)]"); + Console.WriteLine("Usage: LMV.PacketDump [firstname] [lastname] [password] [seconds (0 for infinite)]"); return; } - var client = new GridClient(); - // Turn off some unnecessary things - client.Settings.MULTIPLE_SIMS = false; - // Throttle packets that we don't want all the way down - client.Throttle.Land = 0; - client.Throttle.Wind = 0; - client.Throttle.Cloud = 0; + var client = new GridClient + { + Settings = { MULTIPLE_SIMS = false }, + Throttle = + { + // Throttle packets that we don't want all the way down + Land = 0, + Wind = 0, + Cloud = 0 + } + }; - // Setup a packet callback that is called for every packet (PacketType.Default) + // Setup a packet callback that is called for every packet (PacketType.Default) client.Network.RegisterCallback(PacketType.Default, DefaultHandler); // Register handlers for when we login, and when we are disconnected @@ -75,9 +80,9 @@ namespace PacketDump Logger.Log("Message of the day: " + client.Network.LoginMessage, Helpers.LogLevel.Info); // Determine how long to run for - int start = Environment.TickCount; - int milliseconds = int.Parse(args[3]) * 1000; - bool forever = (milliseconds <= 0); + var start = Environment.TickCount; + var milliseconds = int.Parse(args[3]) * 1000; + var forever = (milliseconds <= 0); // Packet handling is done with asynchronous callbacks. Run a sleeping loop in the main // thread until we run out of time or the program is closed @@ -103,7 +108,7 @@ namespace PacketDump } } - static void LoginHandler(object sender, LoginProgressEventArgs e) + private static void LoginHandler(object sender, LoginProgressEventArgs e) { Logger.Log($"Login: {e.Status} ({e.Message})", Helpers.LogLevel.Info); diff --git a/Programs/examples/PacketDump/PacketDump.csproj b/Programs/examples/PacketDump/PacketDump.csproj index 12758b99..cc97bdce 100644 --- a/Programs/examples/PacketDump/PacketDump.csproj +++ b/Programs/examples/PacketDump/PacketDump.csproj @@ -1,7 +1,6 @@  - PacketDump - PacketDump + LibreMetaverse.PacketDump Exe true ..\..\..\bin\ @@ -9,6 +8,8 @@ AnyCPU true snupkg + true + LMV.PacketDump diff --git a/Programs/mapgenerator/ProtocolManager.cs b/Programs/mapgenerator/ProtocolManager.cs index 63098aed..491bdf7d 100644 --- a/Programs/mapgenerator/ProtocolManager.cs +++ b/Programs/mapgenerator/ProtocolManager.cs @@ -1,3 +1,30 @@ +/* + * Copyright (c) 2006-2016, openmetaverse.co + * Copyright (c) 2025, Sjofn LLC. + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the openmetaverse.co nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + using System; using System.Collections.Generic; using System.IO; @@ -87,24 +114,22 @@ namespace Mapgenerator /// public int CompareTo(object obj) { - MapField temp = (MapField)obj; + var temp = (MapField)obj; if (KeywordPosition > temp.KeywordPosition) { return 1; } - else - { - if(temp.KeywordPosition == KeywordPosition) - { - return 0; - } - else - { - return -1; - } - } - } + + if(temp.KeywordPosition == KeywordPosition) + { + return 0; + } + else + { + return -1; + } + } } /// @@ -128,24 +153,22 @@ namespace Mapgenerator /// public int CompareTo(object obj) { - MapBlock temp = (MapBlock)obj; + var temp = (MapBlock)obj; if (KeywordPosition > temp.KeywordPosition) { return 1; } - else - { - if(temp.KeywordPosition == KeywordPosition) - { - return 0; - } - else - { - return -1; - } - } - } + + if(temp.KeywordPosition == KeywordPosition) + { + return 0; + } + else + { + return -1; + } + } } /// @@ -229,38 +252,35 @@ namespace Mapgenerator /// public MapPacket Command(string command) { - foreach (MapPacket map in HighMaps) - { - if (map != null) - { - if (command == map.Name) - { - return map; - } - } - } + foreach (var map in HighMaps) + { + if (map == null) { continue; } - foreach (MapPacket map in MediumMaps) - { - if (map != null) - { - if (command == map.Name) - { - return map; - } - } - } + if (command == map.Name) + { + return map; + } + } - foreach (MapPacket map in LowMaps) - { - if (map != null) - { - if (command == map.Name) - { - return map; - } - } - } + foreach (var map in MediumMaps) + { + if (map == null) { continue; } + + if (command == map.Name) + { + return map; + } + } + + foreach (var map in LowMaps) + { + if (map == null) { continue; } + + if (command == map.Name) + { + return map; + } + } throw new Exception("Cannot find map for command \"" + command + "\""); } @@ -343,32 +363,31 @@ namespace Mapgenerator int i; for (i = 0; i < map.Length; ++i) - { - if (map[i] != null) - { - writer.WriteLine("{0} {1,5} - {2} - {3} - {4}", frequency, i, map[i].Name, - map[i].Trusted ? "Trusted" : "Untrusted", - map[i].Encoded ? "Zerocoded" : "Unencoded"); + { + if (map[i] == null) { continue; } - foreach (MapBlock block in map[i].Blocks) - { - if (block.Count == -1) - { - writer.WriteLine("\t{0,4} {1} (Variable)", block.KeywordPosition, block.Name); - } - else - { - writer.WriteLine("\t{0,4} {1} ({2})", block.KeywordPosition, block.Name, block.Count); - } + writer.WriteLine("{0} {1,5} - {2} - {3} - {4}", frequency, i, map[i].Name, + map[i].Trusted ? "Trusted" : "Untrusted", + map[i].Encoded ? "Zerocoded" : "Unencoded"); - foreach (MapField field in block.Fields) - { - writer.WriteLine("\t\t{0,4} {1} ({2} / {3})", field.KeywordPosition, field.Name, - field.Type, field.Count); - } - } - } - } + foreach (var block in map[i].Blocks) + { + if (block.Count == -1) + { + writer.WriteLine("\t{0,4} {1} (Variable)", block.KeywordPosition, block.Name); + } + else + { + writer.WriteLine("\t{0,4} {1} ({2})", block.KeywordPosition, block.Name, block.Count); + } + + foreach (var field in block.Fields) + { + writer.WriteLine("\t\t{0,4} {1} ({2} / {3})", field.KeywordPosition, field.Name, + field.Type, field.Count); + } + } + } } /// @@ -379,7 +398,7 @@ namespace Mapgenerator public static void DecodeMapFile(string mapFile, string outputFile) { byte magicKey = 0; - byte[] buffer = new byte[2048]; + var buffer = new byte[2048]; int nread; BinaryReader map; BinaryWriter output; @@ -404,7 +423,7 @@ namespace Mapgenerator while ((nread = map.Read(buffer, 0, 2048)) != 0) { - for (int i = 0; i < nread; ++i) + for (var i = 0; i < nread; ++i) { buffer[i] ^= magicKey; magicKey += 43; @@ -435,28 +454,26 @@ namespace Mapgenerator throw new Exception("Map file error", e); } - StreamReader r = new StreamReader(map); + var r = new StreamReader(map); r.BaseStream.Seek(0, SeekOrigin.Begin); - string newline; - string trimmedline; - bool inPacket = false; - bool inBlock = false; + var inPacket = false; + var inBlock = false; MapPacket currentPacket = null; MapBlock currentBlock = null; - char[] trimArray = new char[] {' ', '\t'}; + var trimArray = new char[] {' ', '\t'}; // While not at the end of the file while (r.Peek() > -1) { #region ParseMap - newline = r.ReadLine(); - trimmedline = System.Text.RegularExpressions.Regex.Replace(newline, @"\s+", " "); + var newline = r.ReadLine(); + var trimmedline = System.Text.RegularExpressions.Regex.Replace(newline, @"\s+", " "); trimmedline = trimmedline.Trim(trimArray); if (!inPacket) { - // Outside of all packet blocks + // Outside all packet blocks if (trimmedline == "{") { @@ -465,11 +482,11 @@ namespace Mapgenerator } else { - // Inside of a packet block + // Inside a packet block if (!inBlock) { - // Inside a packet block, outside of the blocks + // Inside a packet block, outside the blocks if (trimmedline == "{") { @@ -490,7 +507,7 @@ namespace Mapgenerator #region ParsePacketHeader // Splice the string in to tokens - string[] tokens = trimmedline.Split(new char[] {' ', '\t'}); + var tokens = trimmedline.Split(new char[] {' ', '\t'}); if (tokens.Length > 3) { @@ -588,10 +605,10 @@ namespace Mapgenerator // A field #region ParseField - MapField field = new MapField(); + var field = new MapField(); // Splice the string in to tokens - string[] tokens = trimmedline.Split(new char[] {' ', '\t'}); + var tokens = trimmedline.Split(new char[] {' ', '\t'}); field.Name = tokens[1]; field.KeywordPosition = KeywordPosition(field.Name); @@ -617,7 +634,7 @@ namespace Mapgenerator currentBlock = new MapBlock(); // Splice the string in to tokens - string[] tokens = trimmedline.Split(new char[] {' ', '\t'}); + var tokens = trimmedline.Split(new char[] {' ', '\t'}); currentBlock.Name = tokens[0]; currentBlock.KeywordPosition = KeywordPosition(currentBlock.Name); @@ -656,12 +673,12 @@ namespace Mapgenerator private int KeywordPosition(string keyword) { - if (KeywordPositions.ContainsKey(keyword)) + if (KeywordPositions.TryGetValue(keyword, out var position)) { - return KeywordPositions[keyword]; + return position; } - int hash = 0; + var hash = 0; for (var i = 1; i < keyword.Length; ++i) { hash = (hash + (int)(keyword[i])) * 2; @@ -669,7 +686,7 @@ namespace Mapgenerator hash *= 2; hash &= 0x1FFF; - int startHash = hash; + var startHash = hash; while (KeywordPositions.ContainsValue(hash)) { diff --git a/Programs/mapgenerator/mapgenerator.cs b/Programs/mapgenerator/mapgenerator.cs index 6d16e354..4dad562d 100644 --- a/Programs/mapgenerator/mapgenerator.cs +++ b/Programs/mapgenerator/mapgenerator.cs @@ -1,14 +1,41 @@ +/* + * Copyright (c) 2006-2016, openmetaverse.co + * Copyright (c) 2025, Sjofn LLC. + * All rights reserved. + * + * - Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * - Redistributions of source code must retain the above copyright notice, this + * list of conditions and the following disclaimer. + * - Neither the name of the openmetaverse.co nor the names + * of its contributors may be used to endorse or promote products derived from + * this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE + * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR + * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF + * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN + * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) + * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE + * POSSIBILITY OF SUCH DAMAGE. + */ + using System; using System.Collections.Generic; using System.IO; namespace Mapgenerator { - class Mapgenerator + internal class MapGenerator { - static void WriteFieldMember(TextWriter writer, MapField field) + private static void WriteFieldMember(TextWriter writer, MapField field) { - string type = string.Empty; + var type = string.Empty; switch (field.Type) { @@ -89,7 +116,7 @@ namespace Mapgenerator } } - static void WriteFieldFromBytes(TextWriter writer, MapField field) + private static void WriteFieldFromBytes(TextWriter writer, MapField field) { switch (field.Type) { @@ -180,7 +207,7 @@ namespace Mapgenerator } } - static void WriteFieldToBytes(TextWriter writer, MapField field) + private static void WriteFieldToBytes(TextWriter writer, MapField field) { writer.Write(" "); @@ -258,7 +285,7 @@ namespace Mapgenerator } } - static int GetFieldLength(TextWriter writer, MapField field) + private static int GetFieldLength(TextWriter writer, MapField field) { switch (field.Type) { @@ -296,15 +323,15 @@ namespace Mapgenerator } } - static void WriteBlockClass(TextWriter writer, MapBlock block, MapPacket packet) + private static void WriteBlockClass(TextWriter writer, MapBlock block, MapPacket packet) { - int variableFieldCountBytes = 0; + var variableFieldCountBytes = 0; //writer.WriteLine(" /// " + block.Name + " block"); writer.WriteLine(" /// "); writer.WriteLine(" public sealed class " + block.Name + "Block : PacketBlock" + Environment.NewLine + " {"); - foreach (MapField field in block.Fields) + foreach (var field in block.Fields) { WriteFieldMember(writer, field); if (field.Type == FieldType.Variable) { variableFieldCountBytes += field.Count; } @@ -317,10 +344,10 @@ namespace Mapgenerator " {" + Environment.NewLine + " get" + Environment.NewLine + " {"); - int length = variableFieldCountBytes; + var length = variableFieldCountBytes; // Figure out the length of this block - foreach (MapField field in block.Fields) + foreach (var field in block.Fields) { length += GetFieldLength(writer, field); } @@ -333,7 +360,7 @@ namespace Mapgenerator { writer.WriteLine(" int length = " + length + ";"); - foreach (MapField field in block.Fields) + foreach (var field in block.Fields) { if (field.Type == FieldType.Variable) { @@ -368,7 +395,7 @@ namespace Mapgenerator // Start of the try catch block writer.WriteLine(" try" + Environment.NewLine + " {"); - foreach (MapField field in block.Fields) + foreach (var field in block.Fields) { WriteFieldFromBytes(writer, field); } @@ -384,7 +411,7 @@ namespace Mapgenerator writer.WriteLine(" public override void ToBytes(byte[] bytes, ref int i)" + Environment.NewLine + " {"); - foreach (MapField field in block.Fields) + foreach (var field in block.Fields) { WriteFieldToBytes(writer, field); } @@ -393,9 +420,9 @@ namespace Mapgenerator writer.WriteLine(" }" + Environment.NewLine); } - static void WritePacketClass(TextWriter writer, MapPacket packet) + private static void WritePacketClass(TextWriter writer, MapPacket packet) { - bool hasVariableBlocks = false; + var hasVariableBlocks = false; string sanitizedName; //writer.WriteLine(" /// " + packet.Name + " packet"); @@ -403,7 +430,7 @@ namespace Mapgenerator writer.WriteLine(" public sealed class " + packet.Name + "Packet : Packet" + Environment.NewLine + " {"); // Write out each block class - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { WriteBlockClass(writer, block, packet); } @@ -413,12 +440,12 @@ namespace Mapgenerator " {" + Environment.NewLine + " get" + Environment.NewLine + " {"); - int length = 0; + var length = 0; if (packet.Frequency == PacketFrequency.Low) { length = 10; } else if (packet.Frequency == PacketFrequency.Medium) { length = 8; } else { length = 7; } - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Count == -1) { @@ -429,7 +456,7 @@ namespace Mapgenerator writer.WriteLine(" int length = " + length + ";"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -455,7 +482,7 @@ namespace Mapgenerator writer.WriteLine(" }" + Environment.NewLine + " }"); // Block members - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { // TODO: More thorough name blacklisting if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -478,7 +505,7 @@ namespace Mapgenerator writer.WriteLine(" Header.ID = " + packet.ID + ";"); writer.WriteLine(" Header.Reliable = true;"); // Turn the reliable flag on by default if (packet.Encoded) { writer.WriteLine(" Header.Zerocoded = true;"); } - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -502,7 +529,7 @@ namespace Mapgenerator writer.WriteLine(" }" + Environment.NewLine); // Constructor that takes a byte array and beginning position only (no prebuilt header) - bool seenVariable = false; + var seenVariable = false; //writer.WriteLine(" /// Constructor that takes a byte array and beginning position (no prebuilt header)"); writer.WriteLine(" public " + packet.Name + "Packet(byte[] bytes, ref int i) : this()" + Environment.NewLine + " {" + Environment.NewLine + @@ -518,7 +545,7 @@ namespace Mapgenerator writer.WriteLine(" bytes = zeroBuffer;"); writer.WriteLine(" }"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -575,7 +602,7 @@ namespace Mapgenerator writer.WriteLine(" override public void FromBytes(Header header, byte[] bytes, ref int i, ref int packetEnd)" + Environment.NewLine + " {"); writer.WriteLine(" Header = header;"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -629,7 +656,7 @@ namespace Mapgenerator else if (packet.Frequency == PacketFrequency.Medium) { writer.WriteLine("8;"); } else { writer.WriteLine("7;"); } - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -641,7 +668,7 @@ namespace Mapgenerator } } - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -663,7 +690,7 @@ namespace Mapgenerator writer.WriteLine(" byte[] bytes = new byte[length];"); writer.WriteLine(" int i = 0;"); writer.WriteLine(" Header.ToBytes(bytes, ref i);"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { if (block.Name == "Header") { sanitizedName = "_" + block.Name; } else { sanitizedName = block.Name; } @@ -697,16 +724,16 @@ namespace Mapgenerator writer.WriteLine(" }" + Environment.NewLine); } - static void WriteToBytesMultiple(TextWriter writer, MapPacket packet) + private static void WriteToBytesMultiple(TextWriter writer, MapPacket packet) { writer.WriteLine( " public override byte[][] ToBytesMultiple()" + Environment.NewLine + " {"); // Check if there are any variable blocks - bool hasVariable = false; - bool cannotSplit = false; - foreach (MapBlock block in packet.Blocks) + var hasVariable = false; + var cannotSplit = false; + foreach (var block in packet.Blocks) { if (block.Count == -1) { @@ -745,7 +772,7 @@ namespace Mapgenerator writer.WriteLine(); // Count fixed blocks - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -768,7 +795,7 @@ namespace Mapgenerator " byte[] fixedBytes = new byte[fixedLength];"); writer.WriteLine( " Header.ToBytes(fixedBytes, ref i);"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -786,8 +813,8 @@ namespace Mapgenerator } } - int variableCountBlock = 0; - foreach (MapBlock block in packet.Blocks) + var variableCountBlock = 0; + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -802,7 +829,7 @@ namespace Mapgenerator writer.WriteLine(" fixedLength += " + variableCountBlock + ";"); writer.WriteLine(); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -821,7 +848,7 @@ namespace Mapgenerator // Count how many variable blocks can go in this packet writer.WriteLine(" int variableLength = 0;"); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -835,7 +862,7 @@ namespace Mapgenerator } writer.WriteLine(); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -866,7 +893,7 @@ namespace Mapgenerator writer.WriteLine(" if (packets.Count > 0) { packet[0] = (byte)(packet[0] & ~0x10); }"); writer.WriteLine(); - foreach (MapBlock block in packet.Blocks) + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -892,8 +919,8 @@ namespace Mapgenerator writer.WriteLine(" packets.Add(packet);"); writer.WriteLine(" } while ("); - bool first = true; - foreach (MapBlock block in packet.Blocks) + var first = true; + foreach (var block in packet.Blocks) { string sanitizedName; if (block.Name == "Header") { sanitizedName = "_" + block.Name; } @@ -920,10 +947,10 @@ namespace Mapgenerator } } - static int Main(string[] args) + private static int Main(string[] args) { ProtocolManager protocol; - List unused = new List(); + var unused = new List(); StreamWriter writer; try @@ -938,11 +965,11 @@ namespace Mapgenerator protocol = new ProtocolManager(args[0]); // Build a list of unused packets - using (StreamReader unusedReader = new StreamReader(args[2])) + using (var unusedReader = new StreamReader(args[2])) { while (unusedReader.Peek() >= 0) { - unused.Add(unusedReader.ReadLine().Trim()); + unused.Add(unusedReader.ReadLine()?.Trim()); } } @@ -958,23 +985,23 @@ namespace Mapgenerator } - // Prune all of the unused packets out of the protocol - int i = 0; - foreach (MapPacket packet in protocol.LowMaps) + // Prune all the unused packets out of the protocol + var i = 0; + foreach (var packet in protocol.LowMaps) { if (packet != null && unused.Contains(packet.Name)) protocol.LowMaps[i] = null; i++; } i = 0; - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) { if (packet != null && unused.Contains(packet.Name)) protocol.MediumMaps[i] = null; i++; } i = 0; - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) { if (packet != null && unused.Contains(packet.Name)) protocol.HighMaps[i] = null; @@ -986,13 +1013,13 @@ namespace Mapgenerator writer.WriteLine(" public enum PacketType" + Environment.NewLine + " {" + Environment.NewLine + " /// A generic value, not an actual packet type" + Environment.NewLine + " Default,"); - foreach (MapPacket packet in protocol.LowMaps) + foreach (var packet in protocol.LowMaps) if (packet != null) writer.WriteLine(" " + packet.Name + " = " + (0x10000 | packet.ID) + ","); - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) if (packet != null) writer.WriteLine(" " + packet.Name + " = " + (0x20000 | packet.ID) + ","); - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) if (packet != null) writer.WriteLine(" " + packet.Name + " = " + (0x30000 | packet.ID) + ","); writer.WriteLine(" }" + Environment.NewLine); @@ -1022,21 +1049,21 @@ namespace Mapgenerator " case PacketFrequency.Low:" + Environment.NewLine + " switch (id)" + Environment.NewLine + " {"); - foreach (MapPacket packet in protocol.LowMaps) + foreach (var packet in protocol.LowMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return PacketType." + packet.Name + ";"); writer.WriteLine(" }" + Environment.NewLine + " break;" + Environment.NewLine + " case PacketFrequency.Medium:" + Environment.NewLine + " switch (id)" + Environment.NewLine + " {"); - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return PacketType." + packet.Name + ";"); writer.WriteLine(" }" + Environment.NewLine + " break;" + Environment.NewLine + " case PacketFrequency.High:" + Environment.NewLine + " switch (id)" + Environment.NewLine + " {"); - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return PacketType." + packet.Name + ";"); writer.WriteLine(" }" + Environment.NewLine + @@ -1046,13 +1073,13 @@ namespace Mapgenerator // Write the Packet.BuildPacket(PacketType) function writer.WriteLine(" public static Packet BuildPacket(PacketType type)"); writer.WriteLine(" {"); - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) if (packet != null) writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();"); - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) if (packet != null) writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();"); - foreach (MapPacket packet in protocol.LowMaps) + foreach (var packet in protocol.LowMaps) if (packet != null) writer.WriteLine(" if(type == PacketType." + packet.Name + ") return new " + packet.Name + "Packet();"); writer.WriteLine(" return null;" + Environment.NewLine); @@ -1081,7 +1108,7 @@ namespace Mapgenerator case PacketFrequency.Low: switch (header.ID) {"); - foreach (MapPacket packet in protocol.LowMaps) + foreach (var packet in protocol.LowMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return new " + packet.Name + "Packet(header, bytes, ref i);"); writer.WriteLine(@" @@ -1090,7 +1117,7 @@ namespace Mapgenerator case PacketFrequency.Medium: switch (header.ID) {"); - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return new " + packet.Name + "Packet(header, bytes, ref i);"); writer.WriteLine(@" @@ -1099,7 +1126,7 @@ namespace Mapgenerator case PacketFrequency.High: switch (header.ID) {"); - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) if (packet != null) writer.WriteLine(" case " + packet.ID + ": return new " + packet.Name + "Packet(header, bytes, ref i);"); writer.WriteLine(@" @@ -1112,11 +1139,11 @@ namespace Mapgenerator }"); // Write the packet classes - foreach (MapPacket packet in protocol.LowMaps) + foreach (var packet in protocol.LowMaps) if (packet != null) { WritePacketClass(writer, packet); } - foreach (MapPacket packet in protocol.MediumMaps) + foreach (var packet in protocol.MediumMaps) if (packet != null) { WritePacketClass(writer, packet); } - foreach (MapPacket packet in protocol.HighMaps) + foreach (var packet in protocol.HighMaps) if (packet != null) { WritePacketClass(writer, packet); } diff --git a/Programs/mapgenerator/mapgenerator.csproj b/Programs/mapgenerator/mapgenerator.csproj index bf29ab92..438969f4 100644 --- a/Programs/mapgenerator/mapgenerator.csproj +++ b/Programs/mapgenerator/mapgenerator.csproj @@ -1,14 +1,15 @@  - MapGenerator + LibreMetaverse.MapGenerator Exe true ..\..\bin\ - LibreMetaverse.MapGenerator net8.0;net9.0 AnyCPU true snupkg + true + LMV.MapGenerator