private Error Crea_PRN_TelefonoSerie(Terminal ter) { string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); Error cxnErr = new Error(); try { #region // PROCESO DE CONEXIÓN bool sale = false; int fusible = 0; while (sale == false) // INTENTA HASTA CONECTAR CON PRN { string res = cxn.Leer_XMLprn(out nombre1, out nombre2, out nombre3, out port1, out port2, out port3, out tel1, out tel2, out tel3, TransacManager.ProtoConfig.CONFIG); if (res == null) // EXISTE PRN { #region // INTENTA CONECTAR CON PRN string[] nom = { nombre1, nombre2, nombre3 }; string[] por = { port1, port2, port3 }; string[] tel = { tel1, tel2, tel3 }; for (int j = 0; j < 3; j++) { try { if (nom[j] != null) { sale = LogInTelefono(nom[j], tel[j]); } } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con PRN:Nombre " + j.ToString(), lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == true) { UltimaConexionOptima[0] = nom[j]; UltimaConexionOptima[1] = por[j]; UltimaConexionOptima[2] = tel[j]; break; } else LogBMTP.LogMessage("TELEFONO: Intento con PRN: Nombre " + nom[j] + " falló.", lvlLogCxn, TimeStampLog); } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } if (sale == false) { #region // FALLÓ PRN, INTENTA CON CONFIG.BIN cxn.Borrar_XMLprn(TransacManager.ProtoConfig.CONFIG); try { sale = LogInTelefono(TransacManager.ProtoConfig.CONFIG.Host, TransacManager.ProtoConfig.CONFIG.Telefono); } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con valores por defecto.", lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == false) { LogBMTP.LogMessage("TELEFONO: Intento valores por defecto: Nombre " + TransacManager.ProtoConfig.CONFIG.Host + " falló.", lvlLogCxn, TimeStampLog); cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; CierraPuertoSerie(); sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG); IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } else { CierraPuertoSerie(); cxnErr = AbrePuertoTelefono(); if (cxnErr.CodError == 0) sale = false; else { CierraPuertoSerie(); return cxnErr; } } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; CierraPuertoSerie(); return cxnErr; } fusible++; } #endregion } } else // NO EXISTE PRN { #region // INTENTA CONECTAR CON CONFIG.BIN try { sale = LogInTelefono(TransacManager.ProtoConfig.CONFIG.Host, TransacManager.ProtoConfig.CONFIG.Telefono); } catch (Exception e) { LogBMTP.LogMessage("TELEFONO: Excepción al intentar con valores por defecto.", lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sale == false) { LogBMTP.LogMessage("TELEFONO: Intento valores por defecto: Nombre " + TransacManager.ProtoConfig.CONFIG.Host + " falló.", lvlLogCxn, TimeStampLog); cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIAL; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; CierraPuertoSerie(); sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG); IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } else { CierraPuertoSerie(); cxnErr = AbrePuertoTelefono(); if (cxnErr.CodError == 0) sale = false; else { CierraPuertoSerie(); return cxnErr; } } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; CierraPuertoSerie(); return cxnErr; } fusible++; } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CONEXION; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; CierraPuertoSerie(); break; } } } #endregion if (cxnErr.CodError != 0) LogBMTP.LogMessage("Error de conexión: " + cxnErr.CodError + "\n" + " Descripción: " + cxnErr.Descripcion + "\n", lvlLogError, TimeStampLog); return cxnErr; } catch (Exception ex) { cxnErr.CodError = (int)ErrComunicacion.CONEX_SERIALex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.ToString(), lvlLogExcepciones, TimeStampLog); return cxnErr; } }
//Ethernet private Error Crea_PRN_Socket(Terminal ter) { string nombre1, nombre2, nombre3, port1, port2, port3, tel1, tel2, tel3; Conexion cxn = new Conexion(); Error cxnErr = new Error(); IPHostEntry ipHost; IPAddress ipAddr; try { #region // PROCESO DE CONEXIÓN IPHostEntry ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); for (int i = 0; i < ipHostInfo.AddressList.Length; i++) { TransacManager.ProtoConfig.LOCAL_IP = ipHostInfo.AddressList[i]; //----------- Cambia de 1 elemento a 2. if (TransacManager.ProtoConfig.LOCAL_IP.AddressFamily == AddressFamily.InterNetwork) break; } IPEndPoint localEndPoint = new IPEndPoint(TransacManager.ProtoConfig.LOCAL_IP, TransacManager.ProtoConfig.LOCAL_PORT); bool sale = false; int fusible = 0; while (sale == false) // INTENTA HASTA CONECTAR CON PRN { SocketPermission permission = new SocketPermission(PermissionState.Unrestricted //NetworkAccess.Connect, // Connection permission //TransportType.Tcp, // Defines transport types //"", // Gets the IP addresses //SocketPermission.AllPorts // All ports ); //SocketPermissionAttribute per = new SocketPermissionAttribute(SecurityAction. permission.Demand(); string res = cxn.Leer_XMLprn(out nombre1, out nombre2, out nombre3, out port1, out port2, out port3, out tel1, out tel2, out tel3, TransacManager.ProtoConfig.CONFIG); if (res == null && TransacManager.ProtoConfig.CON_CICLO_PRN) // EXISTE PRN { #region // INTENTA CONECTAR CON PRN string[] nom = { nombre1, nombre2, nombre3 }; string[] por = { port1, port2, port3 }; string[] tel = { tel1, tel2, tel3 }; for (int j = 0; j < 3; j++) { try { ipHost = Dns.GetHostEntry(nom[j]); if (ipHost is IPHostEntry) { ipAddr = null; for (int i = 0; i < ipHost.AddressList.Length; i++) { ipAddr = ipHost.AddressList[i]; //----------- Cambia de 1 elemento a 2. if (ipAddr.AddressFamily == AddressFamily.InterNetwork) break; } LogBMTP.LogMessage("Resulve DNS: " + nom[j] + " - " + ipAddr, lvlLogCxn, TimeStampLog); ipEndPoint = new IPEndPoint(ipAddr, Convert.ToInt32(por[j])); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); } } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(" Intento con " + nom[j] + "(" + j + ") falló. \n" + e.Message + " " + e.InnerException, lvlLogDebug, TimeStampLog); if (sender != null) sender.Close(); } if (sender != null && sender.Connected == true) { UltimaConexionOptima[0] = nom[j]; UltimaConexionOptima[1] = por[j]; UltimaConexionOptima[2] = tel[j]; sale = true; break; } } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } if (sender == null || sender.Connected != true) { #region // FALLÓ PRN, INTENTA CON CONFIG.BIN cxn.Borrar_XMLprn(TransacManager.ProtoConfig.CONFIG); try { if (!PuertoDisponible(localEndPoint.Port)) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. Puerto default ocupado."; cxnErr.Estado = 0; return cxnErr; } ipAddr = TransacManager.ProtoConfig.CONFIG.DefaultServer; ipEndPoint = new IPEndPoint(ipAddr, TransacManager.ProtoConfig.CONFIG.Port); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sender.Connected != true) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No pudo establecerse una comunicación con los valores del PRN, ni los por defecto."; cxnErr.Estado = 0; sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; LogBMTP.LogMessage("CONEXIÓN EXITOSA CON VALORES DEFAULT:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG, true); cm.sender = sender; IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo; sale = true; } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; } fusible++; } #endregion } } else // NO EXISTE PRN { #region // INTENTA CONECTAR CON CONFIG.BIN try { if (!PuertoDisponible(TransacManager.ProtoConfig.CONFIG.Port) || !PuertoDisponible(localEndPoint.Port)) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. Puerto default ocupado."; cxnErr.Estado = 0; return cxnErr; } ipAddr = TransacManager.ProtoConfig.CONFIG.DefaultServer; ipEndPoint = new IPEndPoint(ipAddr, TransacManager.ProtoConfig.CONFIG.Port); sender = new Socket( ipAddr.AddressFamily,// Specifies the addressing scheme SocketType.Stream, // The type of socket ProtocolType.Tcp // Specifies the protocols ); sender.NoDelay = false; // Using the Nagle algorithm sender.ReceiveTimeout = ProtocoloConfig.TimeoutSocket; sender.SendTimeout = ProtocoloConfig.TimeoutSocket; sender.Bind(localEndPoint); sender.Connect(ipEndPoint); //sender.Send(DataConverter.Pack("^$8", "Holaaaaaaaaa <EOF>")); } catch (Exception e) { ipHost = null; LogBMTP.LogMessage(e.Message + " \n" + e.InnerException, lvlLogDebug, TimeStampLog); } if (sender.Connected != true) { cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKET; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación con los valores por defecto."; cxnErr.Estado = 0; sale = true; } else { UltimaConexionOptima[0] = TransacManager.ProtoConfig.CONFIG.DefaultServer.ToString(); UltimaConexionOptima[1] = TransacManager.ProtoConfig.CONFIG.Port.ToString(); UltimaConexionOptima[2] = TransacManager.ProtoConfig.CONFIG.Telefono; LogBMTP.LogMessage("CONEXIÓN EXITOSA CON VALORES DEFAULT:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); if (TransacManager.ProtoConfig.CON_CICLO_PRN) { Comunicacion cm = new Comunicacion(TransacManager.ProtoConfig.BASE_CONFIG, TransacManager.ProtoConfig.CONFIG, true); cm.sender = sender; IList rdo = cm.InteraccionAB(ref ter, true); if (rdo[0] is Error) { if (((Error)rdo[0]).CodError != 0) { cxnErr = (Error)rdo[0]; sale = true; } } else { cxnErr.CodError = (int)ErrComunicacion.CXN_NO_GENERA_PRN; cxnErr.Descripcion = "Error de conexión. No se pudo obtener el PRN."; cxnErr.Estado = 0; } } fusible++; } #endregion if (fusible >= 2 && sale == false) { sale = true; cxnErr.CodError = (int)ErrComunicacion.CXN_SOCKETex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación. Se superaron los intentos de conexión."; cxnErr.Estado = 0; break; } } } #endregion if (cxnErr.CodError != 0) LogBMTP.LogMessage("Error de conexión: " + cxnErr.CodError + "\n" + " Descripción: " + cxnErr.Descripcion + "\n", lvlLogCxn, TimeStampLog); else { LogBMTP.LogMessage("CONEXIÓN EXITOSA:\n ", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("HOST: IP " + ipEndPoint.Address + " Port " + ipEndPoint.Port + "\n", lvlLogCxn, TimeStampLog); LogBMTP.LogMessage("BMTP: IP " + ((IPEndPoint)sender.LocalEndPoint).Address + " Port " + ((IPEndPoint)sender.LocalEndPoint).Port + "\n", lvlLogCxn, TimeStampLog); } return cxnErr; } catch (Exception ex) { cxnErr.CodError = (int)ErrComunicacion.CONEXIONex; cxnErr.Descripcion = "Error de conexión. No puede establecerse una comunicación."; cxnErr.Estado = 0; LogBMTP.LogMessage("Excepción: " + cxnErr.CodError + " " + cxnErr.Descripcion, lvlLogExcepciones, TimeStampLog); LogBMTP.LogMessage("Excepción: " + ex.ToString(), lvlLogExcepciones, TimeStampLog); return cxnErr; } }