Exemplo n.º 1
0
        /// <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);
        }