/// <summary> /// Takes command packet's arguments and parses them to their appropriate types, returning a list of objects containing the command's arguments /// </summary> /// <param name="cmd"></param> /// <param name="bitArray"></param> /// <returns></returns> public static List <object> CommandPacketArgumentBitArrayToListObject(commandPacket cmd) { int[] argumentLength = Program.db.commands.Where(x => x.Key == cmd.commandID).Select(x => x.Value.argumentLengths).FirstOrDefault().ToArray(); //helps parsing argument data into correct variable types. 1 is boolean, 2 is string 3 is integer byte[] argumentTypes = Program.db.commands.Where(x => x.Key == cmd.commandID).Select(x => x.Value.argumentTypes).FirstOrDefault().ToArray(); return(BitArrayToListObject(cmd.arguments, argumentLength, argumentTypes)); }
public static void printCommandPacket(commandPacket cmd) { Console.WriteLine("\n=== PRINTING COMMAND PACKET ===\n"); Console.WriteLine("ID: " + cmd.commandID + "\nArguments: "); List <object> arguments = new List <object>(); arguments = CommandPacketArgumentBitArrayToListObject(cmd); foreach (object arg in arguments) { Console.WriteLine(arg.GetType() + ": " + arg.ToString()); } Console.WriteLine("\n=== END OF PRINT ===\n"); }
///// <summary> ///// Used to transform command packet object into a valid bit array that can be transferred. MUST SET ENDIANNESS FIRST THOUGH! ///// </summary> ///// <param name="command"></param> ///// <returns></returns> //public static BitArray CommandPacketToBitArray(commandPacket command) //{ // //command ID always 32 bits // int commandIDLength = 32; // BitArray cmd = new BitArray(commandIDLength + command.arguments.Count); // byte[] idToBytes = BitConverter.GetBytes(command.commandID); // if (BitConverter.IsLittleEndian) // Array.Reverse(idToBytes); // BitArray commandIDToBits = new BitArray(idToBytes); // //add command ID and then arguments // for (int k = 0; k < cmd.Count; k++) // cmd[k] = (k < 32 ? commandIDToBits[k] : command.arguments[k - 32]); // return cmd; //} /// <summary> /// Used to parse bit array data to command object /// </summary> /// <param name="command"></param> /// <returns></returns> public static commandPacket BitArrayToCommandPacket(BitArray bitArray) { //command ID always 32 bits int commandIDLength = 32; commandPacket cmd = new commandPacket(); //ID of command to look arguments for in db BitArray commandIDToBits = new BitArray(commandIDLength); for (int k = 0; k < commandIDLength; k++) { commandIDToBits[k] = bitArray[k]; } //convert sequence of bits representing command ID to int cmd.commandID = BitConverter.ToInt32(BitArrayToByteArray(commandIDToBits), 0); cmd.arguments = new BitArray(bitArray.Length - commandIDLength); for (int k = 0; k < cmd.arguments.Length; k++) { cmd.arguments[k] = bitArray[k + 32]; } return(cmd); }