/// <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); } }
/// <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++; } } }