예제 #1
0
        public static IList recibeMensajeQ1_Quiniela(byte[] byteRec)
        {
            bool errorProtocolo         = false;
            ParamSorteoQuiniela paramSQ = new ParamSorteoQuiniela();
            Error err = new Error();

            Conversiones.AgregaCadena(byteRec, 0, 1);                                   //Letra "Q"
            TIPO_TRANSACC = paramSQ.Tipo = (byte)Conversiones.AgregaDigito(byteRec, 1); //Tipo de juego
            err.CodError  = (UInt16)Conversiones.AgregaDigito16(byteRec, 2);            //Cod. de error
            //Conversiones.AgregaCadena(byteRec, 4, 18);//Id ticket vacío

            paramSQ.FechaHora = new DateTime(Conversiones.AgregaDigito16(byteRec, 24), Conversiones.AgregaDigito(byteRec, 23),
                                             Conversiones.AgregaDigito(byteRec, 22), Conversiones.AgregaDigito(byteRec, 26), Conversiones.AgregaDigito(byteRec, 27),
                                             Conversiones.AgregaDigito(byteRec, 28));

            paramSQ.EntesCant = (uint)Conversiones.AgregaDigito(byteRec, 29);             //Cant de entes

            paramSQ.ImporteMaxApuesta = (UInt32)Conversiones.AgregaDigito32(byteRec, 30); //Importe Max Apuesta
            paramSQ.ImporteMinApuesta = (UInt16)Conversiones.AgregaDigito16(byteRec, 34); //Importe Min Apuesta
            paramSQ.ImporteMaxTicket  = (UInt32)Conversiones.AgregaDigito32(byteRec, 36); //Importe Max Ticket
            paramSQ.ImporteMinTicket  = (UInt16)Conversiones.AgregaDigito16(byteRec, 40); //Importe Min Ticket
            paramSQ.Incremento        = (uint)Conversiones.AgregaDigito(byteRec, 42);     //Incremento
            paramSQ.CantApuestas      = (uint)Conversiones.AgregaDigito(byteRec, 43);     //Cant de apuestas

            int lonArr = 44;

            paramSQ.EntesNombres = new string[paramSQ.EntesCant];
            for (int i = 0; i <= (paramSQ.EntesCant - 1); i++)
            {
                paramSQ.EntesNombres[i] = Conversiones.AgregaCadena(byteRec, lonArr, 10); //Nombre ente
                lonArr += 10;
            }

            paramSQ.SorteosFechas         = new DateTime[10];
            paramSQ.SorteosFechaCierreOff = new DateTime[10];
            paramSQ.SorteosFechasCierre   = new DateTime[10];

            paramSQ.SorteosNumeros    = new ushort[10];
            paramSQ.SorteosNombres    = new string[10];
            paramSQ.SorteosCantCifras = new uint[10];
            int[,] bmpran1            = new int[10, 10];
            int[,] bmpran2            = new int[10, 10];
            paramSQ.SorteoBmpEntes    = new byte[10];
            paramSQ.SorteosCantLineas = new uint[10];
            paramSQ.TextosTicket      = new string[20];

            int contSor = 0, lenBpm1 = 0, lenBpm2 = 0;

            while (lonArr < byteRec.Length && byteRec[lonArr] == 0xd1) //datos por horario de sorteo: mañana, tarde, noche
            {
                Conversiones.AgregaDigito(byteRec, lonArr);            //tipo de juego

                paramSQ.SorteosFechas[contSor] = new DateTime(Conversiones.AgregaDigito16(byteRec, lonArr + 3), Conversiones.AgregaDigito(byteRec, lonArr + 2),
                                                              Conversiones.AgregaDigito(byteRec, lonArr + 1)); //Fecha de apertura

                paramSQ.SorteosFechasCierre[contSor] = new DateTime(Conversiones.AgregaDigito16(byteRec, lonArr + 7), Conversiones.AgregaDigito(byteRec, lonArr + 6),
                                                                    Conversiones.AgregaDigito(byteRec, lonArr + 5), Conversiones.AgregaDigito(byteRec, lonArr + 9), Conversiones.AgregaDigito(byteRec, lonArr + 10),
                                                                    Conversiones.AgregaDigito(byteRec, lonArr + 11)); //Fecha y hora de cierre

                if (Conversiones.EsFechaHoraValida(byteRec, ref paramSQ.SorteosFechaCierreOff[contSor], lonArr + 12, 7))
                {
                    lonArr = lonArr + 7;
                }
                else
                {
                    paramSQ.SorteosFechaCierreOff[contSor] = paramSQ.SorteosFechasCierre[contSor];
                }

                paramSQ.SorteosNumeros[contSor]    = (ushort)Conversiones.AgregaDigito32(byteRec, lonArr + 12); //SORTEO <-------------------
                paramSQ.SorteosNombres[contSor]    = Conversiones.AgregaCadena(byteRec, lonArr + 16, 10);       //nombre
                paramSQ.SorteosCantCifras[contSor] = (uint)Conversiones.AgregaDigito(byteRec, lonArr + 26);     //cantidad de cifras

                byte[] bmpr1      = { byteRec[lonArr + 27], byteRec[lonArr + 28], byteRec[lonArr + 29] };       //bmprango1
                int[]  bmpRangos1 = Conversiones.AgregaRangos(bmpr1);
                //byte[] bmpRanPrueba = Conversiones.ObtenerBits(bmpr1);
                //byte[] bmprPrueba = Conversiones.SeteaBits(bmpRanPrueba, bmpRanPrueba.Length);
                lenBpm1 = bmpRangos1.Length;
                for (int i = 0; i <= (lenBpm1 - 1); i++)
                {
                    bmpran1[contSor, i] = bmpRangos1[i];
                }

                byte[] bmpr2      = { byteRec[lonArr + 30], byteRec[lonArr + 31], byteRec[lonArr + 32] }; //bmprango2
                int[]  bmpRangos2 = Conversiones.AgregaRangos(bmpr2);
                lenBpm2 = bmpRangos2.Length;
                for (int i = 0; i <= (lenBpm2 - 1); i++)
                {
                    bmpran2[contSor, i] = bmpRangos2[i];
                }
                paramSQ.SorteoBmpEntes[contSor] = (byte)Conversiones.AgregaDigito(byteRec, lonArr + 33); //bmpentes

                //byte[] entes = Conversiones.ObtenerBits(paramSQ.SorteoBmpEntes);

                paramSQ.SorteosCantLineas[contSor] = (uint)Conversiones.AgregaDigito(byteRec, lonArr + 34); //cant de lineas --> CREO QUE ES BYTE CON LONG DE UN MENSAJE QUE CONTINUA DESPUES

                if (paramSQ.SorteosCantLineas[contSor] != 0)
                {
                    paramSQ.TextosTicket[contSor] = Conversiones.AgregaCadena(byteRec, lonArr + 35, ((int)paramSQ.SorteosCantLineas[contSor]) * 40);
                    lonArr += ((int)paramSQ.SorteosCantLineas[contSor]) * 40;
                }
                contSor++;
                lonArr += 35;
            }

            if (paramSQ.SorteosNombres[0] == null)
            {
                errorProtocolo = true;
            }

            Array.Resize(ref paramSQ.TextosTicket, contSor);
            Array.Resize(ref paramSQ.SorteosFechas, contSor);
            Array.Resize(ref paramSQ.SorteosFechas, contSor);
            Array.Resize(ref paramSQ.SorteosFechasCierre, contSor);
            Array.Resize(ref paramSQ.SorteosFechaCierreOff, contSor);
            Array.Resize(ref paramSQ.SorteosNumeros, contSor);
            Array.Resize(ref paramSQ.SorteosNombres, contSor);
            Array.Resize(ref paramSQ.SorteosCantCifras, contSor);
            paramSQ.SorteosBmprango1 = Conversiones.ResizeArray(bmpran1, contSor, lenBpm1);
            paramSQ.SorteosBmprango2 = Conversiones.ResizeArray(bmpran2, contSor, lenBpm2);
            Array.Resize(ref paramSQ.SorteoBmpEntes, contSor);
            Array.Resize(ref paramSQ.SorteosCantLineas, contSor);

            if (lonArr < byteRec.Length && byteRec[lonArr] != 0x00)
            {
                paramSQ.JuegoAdicionalCodigo  = (byte)Conversiones.AgregaDigito(byteRec, lonArr);
                paramSQ.JuegoAdicionalNombre  = Conversiones.AgregaCadena(byteRec, lonArr + 1, 10);
                paramSQ.JuegoAdicionalCant    = (uint)Conversiones.AgregaDigito(byteRec, lonArr + 11);
                paramSQ.JuegoAdicionalDigitos = (uint)Conversiones.AgregaDigito(byteRec, lonArr + 12);
                paramSQ.JuegoAdicionalImporte = (uint)Conversiones.AgregaDigito16(byteRec, lonArr + 13);
                lonArr += 2;
            }


            IList objsQ1;

            if (errorProtocolo)
            {
                err.CodError    = (uint)ErrComunicacion.PROTOCOLO;
                err.Descripcion = "Ocurrió un error en la interpretación del protocolo para parametros de Quiniela.";
                err.Estado      = 2;
                objsQ1          = new List <object> {
                    err
                };
            }
            else
            {
                objsQ1 = new List <object> {
                    err, paramSQ
                };
            }

            return(objsQ1);
        }