public static byte[] crearP_QM(TransacQuinielaH cabecera, TransacQuinielaB juegos)// Quiniela Multiple { byte[] tipoMsg = DataConverter.Pack("^$8", "P"); byte[] protocolo = ProtocoloApuesta.EmpaquetaQuiniela(cabecera, juegos); byte[] paq = new byte[tipoMsg.Length + protocolo.Length]; Array.Copy(tipoMsg, paq, tipoMsg.Length); Array.Copy(protocolo, 0, paq, tipoMsg.Length, protocolo.Length); //paq.Skip(1).Take(paq.Length - 13).ToArray(); //Comunicacion.PROTOCOLO = protocolo; //Array.Resize(ref Comunicacion.PROTOCOLO, protocolo.Length - 12); return(paq); }
public static IList recibeMensajeQ2(byte[] byteRec) { Array.Resize(ref byteRec, 29); Error err = new Error(); err.CodError = (uint)Conversiones.AgregaDigito16(byteRec, 2); //Cod. de error IList objsQ2 = new List <object>(); objsQ2.Add(err); byte tipoTrans = (byte)Conversiones.AgregaDigito(byteRec, 1); TransacQuinielaH transaccRta = new TransacQuinielaH(); // En esta clase se llenan campos que no se llenaron al enviarla. Conversiones.AgregaCadena(byteRec, 0, 1); //Letra "Q" transaccRta.TipoTransacc = (byte)Conversiones.AgregaDigito(byteRec, 1); //Tipo de transacción transaccRta.id_transacc = Convert.ToUInt32(Conversiones.AgregaCadena(byteRec, 4, 18)); //Id ticket transaccRta.id_ticket = Transformar.GenerateTicketIdst((transaccRta.id_transacc)); transaccRta.Timehost = 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)); //Certificado ft = new Certificado(); transaccRta.Protocolo = TransacManager.ProtoConfig.PROTOCOLO; //Si se le pasa con CDs y TARJETA no funciona, aunque pasemos la longitud del protocolo sin contar los CDs y //TARJETA, da la misma excepcion de incompatibilidad de longitudes. //ft.CertificadoQuiniela(Comunicacion.PROTOCOLO, Comunicacion.CLAVE_TARJETA, Comunicacion, ref transaccRta.Certificado, (int)EnumCertificado.TIPOCHECK, // new QuinielaCheck()); objsQ2.Add(transaccRta); return(objsQ2); }
static void Main(string[] args) { BaseConfig bc = new BaseConfig(); #region //Prueba de QUINIELA TransacQuinielaB jue = new TransacQuinielaB(); jue.TipoApuesta = new byte[] { 0x06, 0x06, 0x07, 0x06, 0x0b }; jue.NumeroAp1 = new string[] { "0233", "077", "12", "2411", "33" }; jue.RangoDesde1 = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x00 }; jue.RangoHasta1 = new byte[] { 0x01, 0x01, 0x05, 0x14, 0x00 }; jue.NumeroAp2 = new string[] { null, null, "34", null, "77" }; jue.NumeroAp3 = new string[] { null, null, null, null, "12" }; jue.RangoDesde2 = new byte[] { 0x00, 0x00, 0x01, 0x00, 0x00 }; jue.RangoHasta2 = new byte[] { 0x00, 0x00, 0x0a, 0x00, 0x00 }; jue.Importe = new ushort[] { 300, 600, 300, 400, 200 };//en centavos //jue.TipoApuesta = new byte[] { 0x06, 0x07 }; //jue.NumeroAp1 = new string[] { "12", "21" }; //jue.RangoDesde1 = new byte[] { 0x01, 0x01 }; //jue.RangoHasta1 = new byte[] { 0x01, 0x01 }; //jue.NumeroAp2 = new string[] { null, "45" }; //jue.NumeroAp3 = new string[] { null, null }; //jue.RangoDesde2 = new byte[] { 0x00, 0x01 }; //jue.RangoHasta2 = new byte[] { 0x00, 0x05 }; //jue.Importe = new ushort[] { 1000, 1000 };//en centavos #endregion try { Opera opera = new Opera(); ArchivoConfig lee = new ArchivoConfig(); Errorof errConfig = opera.LeeArchivo(ref lee); Error errBConfig = bc.LeeBaseConfig(ref bc); if (errConfig.Error != 0) { lee = new ArchivoConfig(); #region //PARAMETROS CONFIGURACION PARA CONFIG bc.Terminal = 80732555;//1300000006; bc.Tarjeta = 19511;//50026; bc.TerminalModelo = EnumTerminalModelo.TML; bc.MAC = new byte[] { 0x15, 0xBE, 0x07, 0x91, 0xFD, 0x32, 0xA4, 0xB3 };//{ 0x8b, 0x3d, 0x39, 0xff, 0x6a, 0xdd, 0x16, 0xb8 };//{ 0x5e, 0x01, 0xd2, 0x69, 0x78, 0x8b, 0x7d, 0x02 }; { 0xa0, 0xca, 0x14, 0x1d, 0xba, 0xdf, 0x7b, 0x44 }; bc.MsgMAC = new byte[] { 0x00, 0x91, 0x00, 0x07, 0x00, 0x32, 0xBE, 0xB3, 0x00, 0x15, 0xFD, 0xA4}; //lee.EncryptMAC = mac;//new byte[] { 0x00 }; lee.ImpresoraReportes = "impresoraPDF"; lee.ImpresoraTicket = "THERMAL Receipt Printer"; lee.MaskEscape = 0xfc; //lee.MaskEnmascara = new byte[] { 0x01, 0x03, 0xfc }; //lee.MaskDesenmascara = new byte[] { 0x06, 0x07, 0x05 }; lee.MaskEnmascara = new byte[] { 0x01, 0x03, 0x04, 0x10, 0x1e, 0x9e, 0xfc, 0x83, 0x84, 0x0d, 0x8d, 0x90, 0xff }; lee.MaskDesenmascara = new byte[] { 0x06, 0x07, 0xdd, 0x0a, 0x09, 0x41, 0x05, 0xde, 0xdf, 0x15, 0x11, 0x0b, 0x08 }; lee.LogPath = "C:\\BetmakerTP\\Logs\\"; lee.LogFileName = "LogDisp.lg"; lee.LogMaxFileSize = 10485760; lee.NumeringWithSecuential = false; lee.LevelLog = EnumMessageType.DEBUG; lee.IpTerminal = IPAddress.Parse("133.61.1.12"); lee.IpMask = IPAddress.Parse("255.255.0.0"); lee.DW = IPAddress.Parse("133.61.1.30"); lee.DNS = IPAddress.Parse("133.61.1.194"); lee.PathPRN = "C:\\BetmakerTP\\Conexion\\"; lee.ArchivoPRN = "ArchivoPRN.xml"; lee.DefaultServer = IPAddress.Parse("133.61.1.71"); lee.Host = "Win7x86"; lee.Port = 9950; //MENDOZA lee.Telefono = "08006665807"; lee.PCName = "PCjorge"; lee.FTPServer = IPAddress.Parse("133.61.1.195"); lee.FTPport = 21; lee.FTPUser = "******"; lee.FTPPassword = "******"; lee.FTPWorkingDirectory = "Reportes"; #endregion //opera.GeneraArchivo(archivo, lee); } #region //Prueba de paquete A Terminal paqA = new Terminal(); var entrada = new BaseConfig(); var salida = bc.LeeBaseConfig(ref entrada); if (salida.CodError != 0) { Exception ex = new Exception(salida.Descripcion); throw ex; } else { paqA.Tarjeta = entrada.Tarjeta; paqA.NumeroTerminal = entrada.Terminal; paqA.MacTarjeta = entrada.MsgMAC; } byte[] mac = new byte[] { 0xdf, 0x72, 0x0f, 0xae, 0xdf, 0xd4, 0xe9, 0x1e, 0xdf, 0x8e, 0x1f, 0x61 };//{ 0x00, 0xc2, 0x00, 0x71, 0x00, 0x09, 0xb3, 0x5a, 0x00, 0xde, 0xbf, 0x82 };//{ 0x8e, 0xe9, 0x0f, 0x72, 0x1f, 0xd4, 0x61, 0x1e } 0xdf, , , 0xae, 0xdf, , , , 0xdf,,, }; //paqA.Tarjeta = lee.Tarjeta;//53164;//tarjeta 54781 //58977 //paqA.NumeroTerminal = lee.Terminal;//terminal paqA.FechaHora = DateTime.Now; Version assemblyversion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; paqA.Version = (ushort)((assemblyversion.Major * 1000) + (assemblyversion.Minor * 10) + (assemblyversion.Build));//version //paqA.MacTarjeta = lee.MsgMAC;//mac paqA.Tipo = EnumTerminalModelo.TML; //0x0c; #endregion MonedaJuego Monedas = new MonedaJuego(); Comunicacion com = new Comunicacion(bc, lee); ProtocoloLib.TransacManager.ProtoConfig.CLAVE_TARJETA = BitConverter.GetBytes(0x8EE9AE721FD4611E).Reverse().ToArray(); //Error errCxn = Comunicacion.AbrePuerto(); Error errCxn = com.Conectar(paqA, EnumModoConexion.ETHERNET); Agente agente = new Agente(); if (errCxn.CodError != 0) { Console.Write("Error: " + errCxn.CodError); Console.WriteLine(" " + errCxn.Descripcion + "\n"); Environment.Exit(0); } else { IList objsRec = com.InteraccionAB(ref paqA); TransaccionMSG mensaje; if(objsRec.Count == 6) mensaje = (TransaccionMSG)objsRec[5]; if (objsRec[1] is Agente) { agente = (Agente)objsRec[1]; Console.WriteLine("Agencia: " + agente.Nombre + "\nNúmero de Agencia: " + agente.Numero + "\n"); Error errOffline = new Error(); } IList objsRec3 = new List<object>(); IList objsRec2 = new List<object>(); TransacQuinielaH cabeceraAnul = new TransacQuinielaH(); TransacQuinielaB cuerposAnul = new TransacQuinielaB(); AnulReimpQuiniela anulacionQ = new AnulReimpQuiniela(); TransacPoceado poceadoAnul = new TransacPoceado(); AnulReimpPoceado anulacionP = new AnulReimpPoceado(); if (objsRec.Count < 2 && objsRec[0] is Error) { Error err = (Error)objsRec[0]; if (err.CodError != 0) { Console.Write("Error: " + err.CodError); Console.WriteLine(" " + err.Descripcion + "\n"); } } else if (objsRec.Count > 1) { bool validValue = false; while (!validValue) { Console.WriteLine("Seleccione el tipo de mensaje: "); Console.WriteLine("(1) Quiniela"); Console.WriteLine("(x) Salir"); ConsoleKeyInfo messageType = Console.ReadKey(); Console.WriteLine(); switch (messageType.KeyChar.ToString()) { case "1": #region objsRec2 = com.InteraccionPQ1(PedidosSorteos.QUINIELA, Convert.ToUInt32(paqA.NumeroTerminal), EnumEstadoParametrosOff.HABILITADO); if (objsRec2.Count > 0 && objsRec2[0] != null && objsRec2[0] is Error) { Error psQErr = (Error)objsRec2[0]; if (psQErr.CodError != 0) { Console.Write("Error: " + psQErr.CodError); Console.WriteLine(" " + psQErr.Descripcion + "\n"); } else if (objsRec[1] is Agente && objsRec2[1] is ParamSorteoQuiniela) { psQErr = (Error)objsRec2[0]; if (psQErr.CodError != 0) { Console.Write("Error: " + psQErr.CodError); Console.WriteLine(" " + psQErr.Descripcion + "\n"); } else if (objsRec[1] is Agente && objsRec2[1] is ParamSorteoQuiniela) { ParamSorteoQuiniela psQ = (ParamSorteoQuiniela)objsRec2[1]; TransacQuinielaH cabecera = new TransacQuinielaH(); cabecera.Sorteo = (ushort)psQ.SorteosNumeros[0]; cabecera.FechaHora = DateTime.Now; cabecera.NroSecuencia = 1; //cabecera.Entes = psQ.SorteoBmpEntes[0]; byte[] byteEnte = {1,2,3}; //byte[] bt = Conversiones.SeteaBits(byteEnte, 1, true); //cabecera.Entes = bt[0]; cabecera.CantApu = 5; objsRec3 = com.InteraccionPQ2(cabecera, jue, PedidosSorteos.QUINIELA); if (objsRec3[0] != null && objsRec3[0] is Error) { Error TransErr = (Error)objsRec3[0]; if (TransErr.CodError != 0) { Console.Write("Error: " + TransErr.CodError); Console.WriteLine(" " + TransErr.Descripcion + "\n"); } else if (objsRec3[1] is TransacQuinielaH) { TransacQuinielaH transRta = (TransacQuinielaH)objsRec3[1]; //certifica.CertificadoQuiniela(transRta.Protocolo, bc.MAC, (int)paqA.Tarjeta, (int)paqA.NumeroTerminal, ref transRta.Certificado); LogBMTP.LogBuffer(byteToChar(transRta.Protocolo), "Test LoggeLib", transRta.Protocolo.Length, EnumNivelLog.Trace); Console.WriteLine("Número de apuesta de QUINIELA: " + transRta.id_ticket + "\n"); Console.WriteLine("Número de certificado: " + transRta.Certificado + "\n"); Console.WriteLine("Fecha y hora de Host: " + transRta.Timehost + "\n"); cabeceraAnul.id_ticket = transRta.id_ticket; cabeceraAnul.Certificado = transRta.Certificado; cabeceraAnul.TipoTransacc = transRta.TipoTransacc; } } } } } validValue = false; break; #endregion } } validValue = false; while (!validValue) { Console.WriteLine("(x) Salir"); ConsoleKeyInfo messageType = Console.ReadKey(); Console.WriteLine(); Error err = new Error(); switch (messageType.KeyChar.ToString()) { case "x": case "X": com.Desconectar(false); Environment.Exit(0); validValue = true; break; default: Console.WriteLine("Debe seleccionar un valor válido. Seleccionó: " + messageType.KeyChar.ToString()); validValue = false; break; } } } } } catch(Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } }
public static IList recibeMensajeQ2(byte[] byteRec) { Array.Resize(ref byteRec, 29); Error err = new Error(); err.CodError = (uint)Conversiones.AgregaDigito16(byteRec, 2); //Cod. de error IList objsQ2 = new List<object>(); objsQ2.Add(err); byte tipoTrans = (byte)Conversiones.AgregaDigito(byteRec, 1); TransacQuinielaH transaccRta = new TransacQuinielaH();// En esta clase se llenan campos que no se llenaron al enviarla. Conversiones.AgregaCadena(byteRec, 0, 1); //Letra "Q" transaccRta.TipoTransacc = (byte)Conversiones.AgregaDigito(byteRec, 1); //Tipo de transacción transaccRta.id_transacc = Convert.ToUInt32(Conversiones.AgregaCadena(byteRec, 4, 18)); //Id ticket transaccRta.id_ticket = Transformar.GenerateTicketIdst((transaccRta.id_transacc)); transaccRta.Timehost = 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)); //Certificado ft = new Certificado(); transaccRta.Protocolo = TransacManager.ProtoConfig.PROTOCOLO; //Si se le pasa con CDs y TARJETA no funciona, aunque pasemos la longitud del protocolo sin contar los CDs y //TARJETA, da la misma excepcion de incompatibilidad de longitudes. //ft.CertificadoQuiniela(Comunicacion.PROTOCOLO, Comunicacion.CLAVE_TARJETA, Comunicacion, ref transaccRta.Certificado, (int)EnumCertificado.TIPOCHECK, // new QuinielaCheck()); objsQ2.Add(transaccRta); return objsQ2; }
/// <summary> /// Recibe una apuesta poceada de Combinada y la empaqueta /// </summary> /// <summary> /// Convierte el mensaje a array de bytes. /// </summary> /// <param name="cabecera">Título de mensaje</param> static public byte[] EmpaquetaQuiniela(TransacQuinielaH cabecera, TransacQuinielaB juegos) { //header byte[] pacHeader = DataConverter.Pack("^bbbSSbbbSbbbb", 0x80, 0x00, 0x01, cabecera.Sorteo, cabecera.NroSecuencia, cabecera.Entes, cabecera.FechaHora.Day, cabecera.FechaHora.Month, cabecera.FechaHora.Year, cabecera.FechaHora.Hour, cabecera.FechaHora.Minute, cabecera.FechaHora.Second, cabecera.CantApu); byte[] pacSal1 = new byte[1024]; int paqIndex = pacHeader.Length; Array.Copy(pacHeader, pacSal1, paqIndex); //bodys int limiteApu = 0; for (int i = 0; i < cabecera.CantApu; i++) { if (juegos.TipoApuesta[i] == 6 && limiteApu < 6) { byte[] apuesta = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] pacBody = DataConverter.Pack("^bbbbbS", juegos.TipoApuesta[i], apuesta[0], apuesta[1], juegos.RangoDesde1[i], juegos.RangoHasta1[i], juegos.Importe[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 7); limiteApu++; paqIndex = paqIndex + 7; } else if (juegos.TipoApuesta[i] == 7 && limiteApu < 6) { byte[] apuesta1 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] apuesta2 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp2[i]), juegos.NumeroAp2[i].Length); byte[] pacBody = DataConverter.Pack("^bbbbbSbbbb", juegos.TipoApuesta[i], apuesta1[0], apuesta1[1], juegos.RangoDesde1[i], juegos.RangoHasta1[i], juegos.Importe[i], apuesta2[0], apuesta2[1], juegos.RangoDesde2[i], juegos.RangoHasta2[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 11); limiteApu = limiteApu + 2; //i++; paqIndex = paqIndex + 11; } else if (juegos.TipoApuesta[i] == 11 && limiteApu < 7) { byte[] apuesta1 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] apuesta2 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp2[i]), juegos.NumeroAp2[i].Length); byte[] apuesta3 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp3[i]), juegos.NumeroAp3[i].Length); byte[] pacBody = new byte[7]; pacBody = DataConverter.Pack("^bbbbbS", juegos.TipoApuesta[i], apuesta1[1], apuesta2[1], apuesta3[1], 0xff, juegos.Importe[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 7); limiteApu++; paqIndex = paqIndex + 7; //no se contempla la posibilidad de que halla error de datos, es decir, que un 7 o 6 sean cambiados por alguna razon } //aca se agregarian las otras apuestas if (limiteApu == 7) { break; } } byte[] paqFinal = new byte[0]; paqFinal = DataConverter.Pack("^I", ConstructorMenEnv.TARJETA); Array.Copy(paqFinal, 0, pacSal1, paqIndex, paqFinal.Length); paqIndex = paqIndex + paqFinal.Length; byte[] cds = { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };//TO DO - CDs necesarios NO BORRAR / averiguar porque los necesita Array.Copy(cds, 0, pacSal1, paqIndex, 8); paqIndex = paqIndex + 8; Array.Resize(ref pacSal1, paqIndex); pacSal1[1] = Convert.ToByte(paqIndex - 12); TransacManager.ProtoConfig.PROTOCOLO = pacSal1; //ComunicacionOffline.PROTOCOLO = pacSal1; Array.Resize(ref TransacManager.ProtoConfig.PROTOCOLO, pacSal1.Length - 12); //Array.Resize(ref ComunicacionOffline.PROTOCOLO, pacSal1.Length - 12); // Y colocar Ref en la definicion de parametros de este metodo //LibreriaClases.Clases.TransacQuinielaH.Protocolo = pacSal1; return(pacSal1); }
/// <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); }
/// <summary> /// Convierte array de bytes en mensaje /// </summary> /// <param name="byteRec"> Buffer de bytes a interpretar </param> /// <returns></returns> public static 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; }
/// <summary> /// Recibe una apuesta poceada de Combinada y la empaqueta /// </summary> /// <summary> /// Convierte el mensaje a array de bytes. /// </summary> /// <param name="cabecera">Título de mensaje</param> public static byte[] EmpaquetaQuiniela(TransacQuinielaH cabecera, TransacQuinielaB juegos) { //header byte[] pacHeader = DataConverter.Pack("^bbbSSbbbSbbbb", 0x80, 0x00, 0x01, cabecera.Sorteo, cabecera.NroSecuencia, cabecera.Entes, cabecera.FechaHora.Day, cabecera.FechaHora.Month, cabecera.FechaHora.Year, cabecera.FechaHora.Hour, cabecera.FechaHora.Minute, cabecera.FechaHora.Second, cabecera.CantApu); byte[] pacSal1 = new byte[1024]; int paqIndex = pacHeader.Length; Array.Copy(pacHeader, pacSal1, paqIndex); //bodys int limiteApu = 0; for (int i = 0; i < cabecera.CantApu; i++) { if (juegos.TipoApuesta[i] == 6 && limiteApu < 6) { byte[] apuesta = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] pacBody = DataConverter.Pack("^bbbbbS", juegos.TipoApuesta[i], apuesta[0], apuesta[1], juegos.RangoDesde1[i], juegos.RangoHasta1[i], juegos.Importe[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 7); limiteApu++; paqIndex = paqIndex + 7; } else if (juegos.TipoApuesta[i] == 7 && limiteApu < 6) { byte[] apuesta1 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] apuesta2 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp2[i]), juegos.NumeroAp2[i].Length); byte[] pacBody = DataConverter.Pack("^bbbbbSbbbb", juegos.TipoApuesta[i], apuesta1[0], apuesta1[1], juegos.RangoDesde1[i], juegos.RangoHasta1[i], juegos.Importe[i], apuesta2[0], apuesta2[1], juegos.RangoDesde2[i], juegos.RangoHasta2[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 11); limiteApu = limiteApu + 2; //i++; paqIndex = paqIndex + 11; } else if (juegos.TipoApuesta[i] == 11 && limiteApu < 7) { byte[] apuesta1 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp1[i]), juegos.NumeroAp1[i].Length); byte[] apuesta2 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp2[i]), juegos.NumeroAp2[i].Length); byte[] apuesta3 = Conversiones.IntToBCD(Convert.ToUInt16(juegos.NumeroAp3[i]), juegos.NumeroAp3[i].Length); byte[] pacBody = new byte[7]; pacBody = DataConverter.Pack("^bbbbbS", juegos.TipoApuesta[i], apuesta1[1], apuesta2[1], apuesta3[1], 0xff, juegos.Importe[i]); Array.Copy(pacBody, 0, pacSal1, paqIndex, 7); limiteApu++; paqIndex = paqIndex + 7; //no se contempla la posibilidad de que halla error de datos, es decir, que un 7 o 6 sean cambiados por alguna razon } //aca se agregarian las otras apuestas if (limiteApu == 7) { break; } } byte[] paqFinal = new byte[0]; paqFinal = DataConverter.Pack("^I", ConstructorMenEnv.TARJETA); Array.Copy(paqFinal, 0, pacSal1, paqIndex, paqFinal.Length ); paqIndex = paqIndex + paqFinal.Length; byte[] cds = { 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd, 0xcd };//TO DO - CDs necesarios NO BORRAR / averiguar porque los necesita Array.Copy(cds, 0, pacSal1, paqIndex, 8); paqIndex = paqIndex + 8; Array.Resize(ref pacSal1, paqIndex); pacSal1[1] = Convert.ToByte(paqIndex - 12); TransacManager.ProtoConfig.PROTOCOLO = pacSal1; //ComunicacionOffline.PROTOCOLO = pacSal1; Array.Resize(ref TransacManager.ProtoConfig.PROTOCOLO, pacSal1.Length - 12); //Array.Resize(ref ComunicacionOffline.PROTOCOLO, pacSal1.Length - 12); // Y colocar Ref en la definicion de parametros de este metodo //LibreriaClases.Clases.TransacQuinielaH.Protocolo = pacSal1; return pacSal1; }
static void Main(string[] args) { BaseConfig bc = new BaseConfig(); #region //Prueba de QUINIELA TransacQuinielaB jue = new TransacQuinielaB(); jue.TipoApuesta = new byte[] { 0x06, 0x06, 0x07, 0x06, 0x0b }; jue.NumeroAp1 = new string[] { "0233", "077", "12", "2411", "33" }; jue.RangoDesde1 = new byte[] { 0x01, 0x01, 0x01, 0x01, 0x00 }; jue.RangoHasta1 = new byte[] { 0x01, 0x01, 0x05, 0x14, 0x00 }; jue.NumeroAp2 = new string[] { null, null, "34", null, "77" }; jue.NumeroAp3 = new string[] { null, null, null, null, "12" }; jue.RangoDesde2 = new byte[] { 0x00, 0x00, 0x01, 0x00, 0x00 }; jue.RangoHasta2 = new byte[] { 0x00, 0x00, 0x0a, 0x00, 0x00 }; jue.Importe = new ushort[] { 300, 600, 300, 400, 200 };//en centavos //jue.TipoApuesta = new byte[] { 0x06, 0x07 }; //jue.NumeroAp1 = new string[] { "12", "21" }; //jue.RangoDesde1 = new byte[] { 0x01, 0x01 }; //jue.RangoHasta1 = new byte[] { 0x01, 0x01 }; //jue.NumeroAp2 = new string[] { null, "45" }; //jue.NumeroAp3 = new string[] { null, null }; //jue.RangoDesde2 = new byte[] { 0x00, 0x01 }; //jue.RangoHasta2 = new byte[] { 0x00, 0x05 }; //jue.Importe = new ushort[] { 1000, 1000 };//en centavos #endregion try { Opera opera = new Opera(); ArchivoConfig lee = new ArchivoConfig(); Errorof errConfig = opera.LeeArchivo(ref lee); if (errConfig.Error != 0) { Console.WriteLine("Error al leer archivo de configuración."); Console.ReadLine(); } else { lee.Port = 20900; lee.MaskDesenmascara = new byte[] { 0x06, 0x07, 0x05 }; lee.MaskEnmascara = new byte[] { 0x01, 0x03, 0xfc }; IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); for (int i = 0; i < ipHostInfo.AddressList.Length; i++) { if (ipHostInfo.AddressList[i].AddressFamily == AddressFamily.InterNetwork) { lee.DefaultServer = ipHostInfo.AddressList[i]; break; } } } Error errBConfig = bc.LeeBaseConfig(ref bc); bc.Tarjeta = 53772; if (errBConfig.CodError != 0) { Console.WriteLine("Error al leer archivo base de configuración."); Console.ReadLine(); } #region //Prueba de paquete A Terminal paqA = new Terminal(); var entrada = new BaseConfig(); var salida = bc.LeeBaseConfig(ref entrada); if (salida.CodError != 0) { Exception ex = new Exception(salida.Descripcion); throw ex; } else { paqA.Tarjeta = entrada.Tarjeta; paqA.NumeroTerminal = entrada.Terminal; paqA.MacTarjeta = entrada.MsgMAC; } byte[] mac = new byte[] { 0xdf, 0x72, 0x0f, 0xae, 0xdf, 0xd4, 0xe9, 0x1e, 0xdf, 0x8e, 0x1f, 0x61 };//{ 0x00, 0xc2, 0x00, 0x71, 0x00, 0x09, 0xb3, 0x5a, 0x00, 0xde, 0xbf, 0x82 };//{ 0x8e, 0xe9, 0x0f, 0x72, 0x1f, 0xd4, 0x61, 0x1e } 0xdf, , , 0xae, 0xdf, , , , 0xdf,,, }; //paqA.Tarjeta = lee.Tarjeta;//53164;//tarjeta 54781 //58977 //paqA.NumeroTerminal = lee.Terminal;//terminal paqA.FechaHora = DateTime.Now; Version assemblyversion = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version; paqA.Version = (ushort)((assemblyversion.Major * 1000) + (assemblyversion.Minor * 10) + (assemblyversion.Build));//version //paqA.MacTarjeta = lee.MsgMAC;//mac paqA.Tipo = EnumTerminalModelo.TML; //0x0c; #endregion MonedaJuego Monedas = new MonedaJuego(); Comunicacion com = new Comunicacion(bc, lee); ProtocoloLib.TransacManager.ProtoConfig.CLAVE_TARJETA = BitConverter.GetBytes(0x8EE9AE721FD4611E).Reverse().ToArray(); //Error errCxn = Comunicacion.AbrePuerto(); Error errCxn = com.Conectar(paqA, EnumModoConexion.ETHERNET); Agente agente = new Agente(); if (errCxn.CodError != 0) { Console.Write("Error: " + errCxn.CodError); Console.WriteLine(" " + errCxn.Descripcion + "\n"); Console.Read(); Environment.Exit(0); } else { IList objsRec = com.InteraccionAB(ref paqA); TransaccionMSG mensaje; if (objsRec.Count == 6) { mensaje = (TransaccionMSG)objsRec[5]; } if (objsRec[1] is Agente) { agente = (Agente)objsRec[1]; Console.WriteLine("Agencia: " + agente.Nombre + "\nNúmero de Agencia: " + agente.Numero + "\n"); Error errOffline = new Error(); } IList objsRec3 = new List <object>(); IList objsRec2 = new List <object>(); TransacQuinielaH cabeceraAnul = new TransacQuinielaH(); TransacQuinielaB cuerposAnul = new TransacQuinielaB(); AnulReimpQuiniela anulacionQ = new AnulReimpQuiniela(); TransacPoceado poceadoAnul = new TransacPoceado(); AnulReimpPoceado anulacionP = new AnulReimpPoceado(); if (objsRec.Count < 2 && objsRec[0] is Error) { Error err = (Error)objsRec[0]; if (err.CodError != 0) { Console.Write("Error: " + err.CodError); Console.WriteLine(" " + err.Descripcion + "\n"); } } else if (objsRec.Count > 1) { bool validValue = false; while (!validValue) { Console.WriteLine("Seleccione el tipo de mensaje: "); Console.WriteLine("(1) Quiniela"); Console.WriteLine("(x) Salir"); ConsoleKeyInfo messageType = Console.ReadKey(); Console.WriteLine(); switch (messageType.KeyChar.ToString()) { case "1": #region objsRec2 = com.InteraccionPQ1(PedidosSorteos.QUINIELA, Convert.ToUInt32(paqA.NumeroTerminal), EnumEstadoParametrosOff.HABILITADO); if (objsRec2.Count > 0 && objsRec2[0] != null && objsRec2[0] is Error) { Error psQErr = (Error)objsRec2[0]; if (psQErr.CodError != 0) { Console.Write("Error: " + psQErr.CodError); Console.WriteLine(" " + psQErr.Descripcion + "\n"); } else if (objsRec[1] is Agente && objsRec2[1] is ParamSorteoQuiniela) { psQErr = (Error)objsRec2[0]; if (psQErr.CodError != 0) { Console.Write("Error: " + psQErr.CodError); Console.WriteLine(" " + psQErr.Descripcion + "\n"); } else if (objsRec[1] is Agente && objsRec2[1] is ParamSorteoQuiniela) { ParamSorteoQuiniela psQ = (ParamSorteoQuiniela)objsRec2[1]; TransacQuinielaH cabecera = new TransacQuinielaH(); cabecera.Sorteo = (ushort)psQ.SorteosNumeros[0]; cabecera.FechaHora = DateTime.Now; cabecera.NroSecuencia = 1; //cabecera.Entes = psQ.SorteoBmpEntes[0]; byte[] byteEnte = { 1, 2, 3 }; //byte[] bt = Conversiones.SeteaBits(byteEnte, 1, true); //cabecera.Entes = bt[0]; cabecera.CantApu = 5; objsRec3 = com.InteraccionPQ2(cabecera, jue, PedidosSorteos.QUINIELA); if (objsRec3[0] != null && objsRec3[0] is Error) { Error TransErr = (Error)objsRec3[0]; if (TransErr.CodError != 0) { Console.Write("Error: " + TransErr.CodError); Console.WriteLine(" " + TransErr.Descripcion + "\n"); } else if (objsRec3[1] is TransacQuinielaH) { TransacQuinielaH transRta = (TransacQuinielaH)objsRec3[1]; //certifica.CertificadoQuiniela(transRta.Protocolo, bc.MAC, (int)paqA.Tarjeta, (int)paqA.NumeroTerminal, ref transRta.Certificado); LogBMTP.LogBuffer(byteToChar(transRta.Protocolo), "Test LoggeLib", transRta.Protocolo.Length, EnumNivelLog.Trace); Console.WriteLine("Número de apuesta de QUINIELA: " + transRta.id_ticket + "\n"); Console.WriteLine("Número de certificado: " + transRta.Certificado + "\n"); Console.WriteLine("Fecha y hora de Host: " + transRta.Timehost + "\n"); cabeceraAnul.id_ticket = transRta.id_ticket; cabeceraAnul.Certificado = transRta.Certificado; cabeceraAnul.TipoTransacc = transRta.TipoTransacc; } } } } } validValue = false; break; #endregion } } validValue = false; while (!validValue) { Console.WriteLine("(x) Salir"); ConsoleKeyInfo messageType = Console.ReadKey(); Console.WriteLine(); Error err = new Error(); switch (messageType.KeyChar.ToString()) { case "x": case "X": com.Desconectar(false); Environment.Exit(0); validValue = true; break; default: Console.WriteLine("Debe seleccionar un valor válido. Seleccionó: " + messageType.KeyChar.ToString()); validValue = false; break; } } } } } catch (Exception e) { Console.WriteLine("Exception: {0}", e.ToString()); } }
// Quiniela Multiple public static byte[] crearP_QM(TransacQuinielaH cabecera, TransacQuinielaB juegos) { byte[] tipoMsg = DataConverter.Pack("^$8", "P"); byte[] protocolo = ProtocoloApuesta.EmpaquetaQuiniela(cabecera, juegos); byte[] paq = new byte[tipoMsg.Length + protocolo.Length]; Array.Copy(tipoMsg, paq, tipoMsg.Length); Array.Copy(protocolo, 0, paq, tipoMsg.Length, protocolo.Length); //paq.Skip(1).Take(paq.Length - 13).ToArray(); //Comunicacion.PROTOCOLO = protocolo; //Array.Resize(ref Comunicacion.PROTOCOLO, protocolo.Length - 12); return paq; }