/// <summary> /// Convierte array de bytes en mensaje /// </summary> /// <param name="byteRec"> Buffer de bytes a interpretar </param> /// <returns></returns> static public IList DesempaquetaQuiniela(byte[] byteRec) { TransacManager.ProtoConfig.PROTOCOLO = byteRec; Array.Resize(ref TransacManager.ProtoConfig.PROTOCOLO, byteRec.Length); Error err = new Error(); byte cantApu; byte[] apuesta1 = new byte[2]; byte[] apuesta2 = new byte[2]; byte[] apuesta3 = new byte[1]; int limiteApu = 0; int paqIndex = 0; // Header //------- TransacQuinielaH transaccRtaH = new TransacQuinielaH(); transaccRtaH.TipoTransacc = (byte)Conversiones.AgregaDigito(byteRec, 0); // Tipo de Transacción transaccRtaH.Sorteo = (ushort)Conversiones.AgregaDigito16(byteRec, 3); // Sorteo transaccRtaH.NroSecuencia = (uint)Conversiones.AgregaDigito16(byteRec, 5); // Nro Secuencia transaccRtaH.Entes = (byte)Conversiones.AgregaDigito(byteRec, 7); // Entes // Fecha Completa int dia = (int)Conversiones.AgregaDigito(byteRec, 8); // Dia int mes = (int)Conversiones.AgregaDigito(byteRec, 9); // Mes int anio = (int)Conversiones.AgregaDigito16(byteRec, 10); // Año int hora = (int)Conversiones.AgregaDigito(byteRec, 12); // Hora int minuto = (int)Conversiones.AgregaDigito(byteRec, 13); // Minutos int segundo = (int)Conversiones.AgregaDigito(byteRec, 14); // Segundos DateTime fecha = new DateTime(anio, mes, dia, hora, minuto, segundo); transaccRtaH.FechaHora = fecha; cantApu = (byte)Conversiones.AgregaDigito(byteRec, 15); // Cantidad de apuestas transaccRtaH.CantApu = cantApu; // Bodys //------ TransacQuinielaB transaccRtaB = new TransacQuinielaB(); transaccRtaB.NumeroAp1 = new string[cantApu]; transaccRtaB.NumeroAp2 = new string[cantApu]; transaccRtaB.NumeroAp3 = new string[cantApu]; transaccRtaB.RangoDesde1 = new byte[cantApu]; transaccRtaB.RangoDesde2 = new byte[cantApu]; transaccRtaB.RangoHasta1 = new byte[cantApu]; transaccRtaB.RangoHasta2 = new byte[cantApu]; transaccRtaB.TipoApuesta = new byte[cantApu]; transaccRtaB.Importe = new ushort[cantApu]; for (int i = 0; i < cantApu; i++) { apuesta1 = new byte[2]; apuesta2 = new byte[2]; apuesta3 = new byte[1]; transaccRtaB.TipoApuesta[i] = (byte)Conversiones.AgregaDigito(byteRec, 16 + paqIndex); // Tipo de Apuesta // Directa if (transaccRtaB.TipoApuesta[i] == 6 && limiteApu < 6) { apuesta1[0] = (byte)Conversiones.AgregaDigito(byteRec, 17 + paqIndex); apuesta1[1] = (byte)Conversiones.AgregaDigito(byteRec, 18 + paqIndex); transaccRtaB.NumeroAp1[i] = Conversiones.BCDtoString(apuesta1); // Numero Apostado 1 transaccRtaB.RangoDesde1[i] = (byte)Conversiones.AgregaDigito(byteRec, 19 + paqIndex); // Rango Desde transaccRtaB.RangoHasta1[i] = (byte)Conversiones.AgregaDigito(byteRec, 20 + paqIndex); // Rango Hasta transaccRtaB.Importe[i] = (ushort)Conversiones.AgregaDigito16(byteRec, 21 + paqIndex); // Importe limiteApu++; paqIndex += 7; } // Redoblona if (transaccRtaB.TipoApuesta[i] == 7 && limiteApu < 6) { apuesta1[0] = (byte)Conversiones.AgregaDigito(byteRec, 17 + paqIndex); apuesta1[1] = (byte)Conversiones.AgregaDigito(byteRec, 18 + paqIndex); transaccRtaB.NumeroAp1[i] = Conversiones.BCDtoString(apuesta1); // Numero Apostado 1 transaccRtaB.RangoDesde1[i] = (byte)Conversiones.AgregaDigito(byteRec, 19 + paqIndex); // Rango Desde 1 transaccRtaB.RangoHasta1[i] = (byte)Conversiones.AgregaDigito(byteRec, 20 + paqIndex); // Rango Hasta 1 transaccRtaB.Importe[i] = (ushort)Conversiones.AgregaDigito16(byteRec, 21 + paqIndex); // Importe apuesta2[0] = (byte)Conversiones.AgregaDigito(byteRec, 23 + paqIndex); apuesta2[1] = (byte)Conversiones.AgregaDigito(byteRec, 24 + paqIndex); transaccRtaB.NumeroAp2[i] = Conversiones.BCDtoString(apuesta2); // Numero Apostado 2 transaccRtaB.RangoDesde2[i] = (byte)Conversiones.AgregaDigito(byteRec, 25 + paqIndex); // Rango Desde 2 transaccRtaB.RangoHasta2[i] = (byte)Conversiones.AgregaDigito(byteRec, 26 + paqIndex); // Rango Hasta 2 limiteApu += 2; paqIndex += 11; } // Poceada (toma 2 digitos de los 3 nros mas grandes apostados, ordenados de mayor a menor) if (transaccRtaB.TipoApuesta[i] == 11 && limiteApu < 7) { // Toma solo los dos digitos menos significativos Array.Resize(ref apuesta1, 1); Array.Resize(ref apuesta2, 1); // Poceada no maneja rangos Array.Resize(ref transaccRtaB.RangoDesde1, cantApu - 1); Array.Resize(ref transaccRtaB.RangoHasta1, cantApu - 1); Array.Resize(ref transaccRtaB.RangoDesde2, cantApu - 1); Array.Resize(ref transaccRtaB.RangoHasta2, cantApu - 1); apuesta1[0] = (byte)Conversiones.AgregaDigito(byteRec, 17 + paqIndex); transaccRtaB.NumeroAp1[i] = Conversiones.BCDtoString(apuesta1); // Numero Apostado 1 apuesta2[0] = (byte)Conversiones.AgregaDigito(byteRec, 18 + paqIndex); transaccRtaB.NumeroAp2[i] = Conversiones.BCDtoString(apuesta2); // Numero Apostado 2 apuesta3[0] = (byte)Conversiones.AgregaDigito(byteRec, 19 + paqIndex); transaccRtaB.NumeroAp3[i] = Conversiones.BCDtoString(apuesta3); // Numero Apostado 3 transaccRtaB.Importe[i] = (ushort)Conversiones.AgregaDigito16(byteRec, 21 + paqIndex); // Importe limiteApu++; paqIndex += 7; } } IList paq = new List <object> { err, transaccRtaH, transaccRtaB }; return(paq); }