Esempio n. 1
0
 /// <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));
 }
Esempio n. 2
0
        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");
        }
Esempio n. 3
0
        ///// <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);
        }