示例#1
0
        /// <summary>
        /// Carrega la info de les categories amb els seus Items i ho retorna en un vector.
        /// </summary>
        /// <returns></returns>
        public static CatLib[] CarregarCategories()
        {
            try
            {
                CatLib[] Categories = new CatLib[2];
                Categories[0] = new CatLib(10);
                Categories[1] = new CatLib(21);

                StreamReader R   = new StreamReader("DataItems.txt");
                int          Max = Convert.ToInt32(R.ReadLine());
                int          i   = 0;
                while (i < Max)
                {
                    string   A   = R.ReadLine();
                    string[] Lin = A.Split('_');
                    DataItem New = new DataItem(Lin);
                    if (New.GetCat() == "I010")
                    {
                        Categories[0].ItemsCat.Add(New);
                    }
                    else
                    {
                        Categories[1].ItemsCat.Add(New);
                    }
                    i++;
                }

                return(Categories);
            }
            catch (FormatException)
            {
                return(null);
            }
            catch (FileNotFoundException)
            {
                return(null);
            }
        }
示例#2
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="Bytes"></param>
        public DataBlock(Queue <byte> Bytes, CatLib[] Categories)
        {
            if (Bytes.Count != 0)
            {
                this.Original = Bytes.ToList();
                this.Cat      = Convert.ToString(Bytes.Dequeue());

                if (Cat == Convert.ToString(Categories[0].Num))
                {
                    ItemsCatInfo = Categories[0];
                }
                else
                {
                    ItemsCatInfo = Categories[1];
                }

                this.Long[0] = Bytes.Dequeue();
                this.Long[1] = Bytes.Dequeue();

                //Proces de set del FSPEL.
                bool FSPEL_Control = true;
                while (FSPEL_Control == true)
                {
                    if (FSPEL_Control == true)
                    {
                        byte   New        = Bytes.Dequeue();
                        string ByteString = Convert.ToString(New, 2).PadLeft(8, '0');
                        FSPEL = "" + FSPEL + "" + ByteString + ""; //Unim FSPEL

                        //Mirem si l'ultim bit es un 1 o un 0.
                        char[] Bits = ByteString.ToCharArray();
                        if (Bits[7] == '0')
                        {
                            FSPEL_Control = false;
                        }
                    }
                }

                //Proces de set dels DataFields. Primer de tot hem d'analitzar el FSPEL, despres amb la info extreta dels DataItems creem dataFields.
                char[] Bitss = FSPEL.ToCharArray();
                int    bit   = 0;
                int    oct   = 1;
                while (bit < Bitss.Count())
                {
                    if (bit != ((8 * oct) - 1))  //Si el bit no es un FX
                    {
                        char Valor = Bitss[bit]; //Si igual a 1 item present, igual a 0 no present

                        //Recorrido per trobar la info del item-field
                        DataItem Valorant = new DataItem();
                        int      ii       = 0;
                        bool     E        = false;
                        while ((ii < ItemsCatInfo.ItemsCat.Count()) && (E == false))
                        {
                            if (ItemsCatInfo.ItemsCat[ii].FRN_B == bit)
                            {
                                Valorant = ItemsCatInfo.ItemsCat[ii];
                                E        = true;
                            }
                            ii++;
                        }

                        if (Valor == '1') //Item present al data field, procedim a guardarho a la nostra llista local
                        {
                            DataField New = new DataField();
                            New.Info = Valorant;

                            int MaxOct = New.Info.Len; //Longitud de les dades del item, 0 variable major de 100 repetitiu.
                            if (MaxOct > 100)          //Repetitiu
                            {
                                byte Evaluat = Bytes.Dequeue();
                                New.Octets.Add(Evaluat); //Afegim al nostra DataField

                                int repeticions = Convert.ToInt32(Evaluat);
                                int i           = 0;
                                while (i < repeticions)
                                {
                                    New.Octets.Add(Evaluat); //Afegim al nostra DataField
                                    i++;
                                }
                            }
                            else if (MaxOct == 0)//variable
                            {
                                bool DataFieldB = true;
                                while (DataFieldB == true)
                                {
                                    byte Evaluat = Bytes.Dequeue();
                                    New.Octets.Add(Evaluat); //Afegim al nostra DataField

                                    //Mirem si segueix o no, 0 no segueix 1 si.
                                    string EvaString = Convert.ToString(Evaluat, 2).PadLeft(8, '0');
                                    char[] EvaChar   = EvaString.ToCharArray();
                                    if (EvaChar[7] == '0')
                                    {
                                        DataFieldB = false;
                                    }
                                }
                            }
                            else//limitat
                            {
                                int i = 0;
                                while (i < MaxOct)
                                {
                                    New.Octets.Add(Bytes.Dequeue());
                                    i++;
                                }
                            }
                            //Afegim el DataField creat a la nostra llista de datafields
                            DataFields.Add(New);
                        }
                    }
                    else
                    {
                        oct++;
                    }

                    bit++;
                }
            }
        }