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