diff --git a/B4A/B4XMainPage.bas b/B4A/B4XMainPage.bas index 5b79d23..02abf71 100644 --- a/B4A/B4XMainPage.bas +++ b/B4A/B4XMainPage.bas @@ -70,8 +70,8 @@ Sub Class_Globals Private p_dbs As Panel Private p_servidoresActivos As Panel Private lv_servidoresActivos As ListView - Dim jsn As JSONParser - Dim jsnGnr As JSONGenerator +' Dim jsn As JSONParser +' Dim jsnGnr As JSONGenerator Dim rp As RuntimePermissions End Sub @@ -159,25 +159,25 @@ Sub B4XPage_Appear s.centraEtiqueta(l_ultimoPing, Root.Width) ' s.centraPanel(p_intervalo, Root.Width) s.centraEtiqueta(Label1, Root.Width) -' If Not(CheckNotificationAccess) Then -' Msgbox2Async($"Se necesita acceso a las notificaciones, haga clic en "Aceptar" y en la siguiente pantalla permita el acceso a la aplicación "${Application.LabelName}"."$, "Permisos necesarios", "Aceptar", "Cancelar", "", Null, True) -' Wait For Msgbox_Result (resultado As Int) -' If resultado = DialogResponse.POSITIVE Then -' b_notifAccess_Click -' End If -' Private cd1 As ColorDrawable -' cd1.Initialize(Colors.red, 10dip) -' b_notifAccess.Background = cd1 -' b_notifAccess.TextColor = Colors.White -' b_notifAccess.Text = "Activar Permisos" -' Else -' Private cd1 As ColorDrawable -' cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) -' b_notifAccess.Background = cd1 -' b_notifAccess.TextColor = Colors.White -' b_notifAccess.Text = "Permisos Activos" -' End If -' CallSubDelayed(Monitor, "Timer1_Tick") + If Not(CheckNotificationAccess) Then + Msgbox2Async($"Se necesita acceso a las notificaciones, haga clic en "Aceptar" y en la siguiente pantalla permita el acceso a la aplicación "${Application.LabelName}"."$, "Permisos necesarios", "Aceptar", "Cancelar", "", Null, True) + Wait For Msgbox_Result (resultado As Int) + If resultado = DialogResponse.POSITIVE Then + b_notifAccess_Click + End If + Private cd1 As ColorDrawable + cd1.Initialize(Colors.red, 10dip) + b_notifAccess.Background = cd1 + b_notifAccess.TextColor = Colors.White + b_notifAccess.Text = "Activar Permisos" + Else + Private cd1 As ColorDrawable + cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) + b_notifAccess.Background = cd1 + b_notifAccess.TextColor = Colors.White + b_notifAccess.Text = "Permisos Activos" + End If + CallSubDelayed(Monitor, "Timer1_Tick") End Sub Private Sub B4XPage_CloseRequest As ResumableSub @@ -193,11 +193,11 @@ End Sub 'Revisa si la aplicación tiene permiso para acceder a las notificaciones. Sub CheckNotificationAccess As Boolean -' Dim nstr, pstr As String -' Dim r As Reflector -' pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") -' nstr = ph.GetSettings("enabled_notification_listeners") -' Return nstr.Contains(pstr) + Dim nstr, pstr As String + Dim r As Reflector + pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") + nstr = ph.GetSettings("enabled_notification_listeners") + Return nstr.Contains(pstr) End Sub Private Sub tb_monitorActivo_CheckedChange(Checked As Boolean) @@ -310,9 +310,9 @@ End Sub 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage. Sub b_notifAccess_Click -' Dim In As Intent -' In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") -' StartActivity(In) + Dim In As Intent + In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") + StartActivity(In) End Sub Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel 'ignore diff --git a/B4A/C_Subs.bas b/B4A/C_Subs.bas index cd763d3..b3fc960 100644 --- a/B4A/C_Subs.bas +++ b/B4A/C_Subs.bas @@ -449,32 +449,36 @@ End Sub Sub ping Private ph As Phone Wait For (ph.ShellAsync("ping", Array As String("-c 1","-W 5", "8.8.8.8"))) Complete (Success As Boolean, ExitValue As Int, StdOut As String, StdErr As String) - If Success Then + Try + If Success Then ' Log("ExitValue:" & ExitValue) ' Log("StdError:" & StdErr) - Private res() As String = Regex.Split(",", StdOut) - For i = 0 To res.Length - 1 - If res(i).Contains("1 received") Then - If Starter.logger Then LogColor(">>> HAY CONEXION", Colors.Green) - Starter.ping = True - Else If res(i).Contains("0 received") Then - If Starter.logger Then LogColor(">>> NO HAY CONEXION", Colors.Red) - Starter.ping = False - End If + Private res() As String = Regex.Split(",", StdOut) + For i = 0 To res.Length - 1 + If res(i).Contains("1 received") Then + If Starter.logger Then LogColor(">>> HAY CONEXION", Colors.Green) + Starter.ping = True + Else If res(i).Contains("0 received") Then + If Starter.logger Then LogColor(">>> NO HAY CONEXION", Colors.Red) + Starter.ping = False + End If ' Log(res(i)) - Next + Next ' LogColor("StdOut: " & res, Colors.Blue) - If B4XPages.IsInitialized Then B4XPages.MainPage.cb_internet.Checked = Starter.ping - If Not(Starter.ping) Then - If Starter.logger Then Log("Sin conexión a Google!!!") - notiLowReturn("SIN INTERNET ❌", "NO hay conexion a Google.", Monitor.nid) - Dim cs As CSBuilder - cs.Initialize - If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a Google!!").PopAll + If B4XPages.IsInitialized Then B4XPages.MainPage.cb_internet.Checked = Starter.ping + If Not(Starter.ping) Then + If Starter.logger Then Log("Sin conexión a Google!!!") + notiLowReturn("SIN INTERNET ❌", "NO hay conexion a Google.", Monitor.nid) + Dim cs As CSBuilder + cs.Initialize + If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a Google!!").PopAll + End If + Else + Log("Error: " & LastException) End If - Else - Log("Error: " & LastException) - End If + Catch + Log(LastException) + End Try End Sub Sub traeServidorDesdeBD(id As Int) As Map diff --git a/B4A/Monitor-Keymon.b4a b/B4A/Monitor-Keymon.b4a index 647e360..1c49662 100644 --- a/B4A/Monitor-Keymon.b4a +++ b/B4A/Monitor-Keymon.b4a @@ -20,6 +20,7 @@ Library11=runtimepermissions Library12=sql Library13=xcustomlistview Library14=xui +Library15=replyauto Library2=byteconverter Library3=core Library4=fusedlocationprovider @@ -28,23 +29,23 @@ Library6=json Library7=okhttputils2 Library8=phone Library9=randomaccessfile -ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~'AddManifestText(~\n~'~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText()~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText()~\n~AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~'AddPermission(android.permission.INSTALL_PACKAGES)~\n~'AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~AddPermission(android.permission.ACCESS_NETWORK_STATE)~\n~~\n~'AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~'SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText()~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~'AddApplicationText(~\n~'~\n~' ~\n~' ~\n~' ~\n~') +ManifestCode='This code will be applied to the manifest file during compilation.~\n~'You do not need to modify it in most cases.~\n~'See this link for for more information: https://www.b4x.com/forum/showthread.php?p=78136~\n~AddManifestText(~\n~~\n~)~\n~SetApplicationAttribute(android:icon, "@drawable/icon")~\n~SetApplicationAttribute(android:label, "$LABEL$")~\n~CreateResourceFromFile(Macro, Themes.LightTheme)~\n~CreateResourceFromFile(Macro, FirebaseAnalytics.GooglePlayBase)~\n~ 'End of default text.~\n~''''' CAMBIA LA CLAVE API~\n~AddApplicationText(~\n~~\n~ ~\n~)~\n~AddApplicationText(~\n~~\n~)~\n~'AddManifestText(~\n~'~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText()~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText()~\n~AddManifestText() 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddManifestText()~\n~'AddPermission(android.permission.REQUEST_INSTALL_PACKAGES)~\n~AddPermission(android.permission.INTERNET)~\n~'AddPermission(android.permission.INSTALL_PACKAGES)~\n~'AddPermission(android.permission.READ_EXTERNAL_STORAGE)~\n~'AddPermission(android.permission.WRITE_EXTERNAL_STORAGE)~\n~AddPermission(android.permission.READ_PHONE_STATE)~\n~AddPermission(android.permission.WAKE_LOCK)~\n~AddPermission(android.permission.ACCESS_NETWORK_STATE)~\n~~\n~'AddPermission("android.permission.MANAGE_EXTERNAL_STORAGE")~\n~'SetApplicationAttribute(android:largeHeap, "true")~\n~~\n~AddManifestText()~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~~\n~ ~\n~ ~\n~ ~\n~) Module1=B4XMainPage Module2=BatteryUtilities Module3=C_Subs Module4=DBRequestManager Module5=Monitor -Module6=NotificationServiceXXX +Module6=NotificationService Module7=Starter NumberOfFiles=7 -NumberOfLibraries=14 +NumberOfLibraries=15 NumberOfModules=7 Version=12.8 @EndOfDesignText@ #Region Project Attributes #ApplicationLabel: Monitor Keymon #VersionCode: 1 - #VersionName: 4.12.04 + #VersionName: 4.12.11 'SupportedOrientations possible values: unspecified, landscape or portrait. #SupportedOrientations: portrait #CanInstallToExternalStorage: False diff --git a/B4A/Monitor-Keymon.b4a.meta b/B4A/Monitor-Keymon.b4a.meta index a7486b8..353563a 100644 --- a/B4A/Monitor-Keymon.b4a.meta +++ b/B4A/Monitor-Keymon.b4a.meta @@ -22,6 +22,6 @@ ModuleClosedNodes4= ModuleClosedNodes5=5 ModuleClosedNodes6= ModuleClosedNodes7= -NavigationStack=Monitor,Service_Create,38,0,Monitor,Service_Start,47,1,Monitor,Process_Globals,17,4,Monitor,Timer1_Tick,61,0,Starter,Process_Globals,22,0,Starter,Service_Create,30,0,Monitor,probamosConexion,95,3,Monitor,JobDone,147,0,Monitor,reinicializaReqManager,125,0,B4XMainPage,B4XPage_Created,95,6 +NavigationStack=C_Subs,ping,445,1,Main,Globals,26,0,B4XMainPage,Class_Globals,66,0,Monitor,Process_Globals,19,0,Monitor,JobDone,162,4,NotificationService,Service_Create,14,0,B4XMainPage,B4XPage_Created,79,0,NotificationService,Service_Start,18,0,NotificationService,MonitorKeymon_NotificationPosted,44,0,Starter,Service_Start,60,0,Monitor,Service_Start,43,0 SelectedBuild=0 -VisibleModules=1,7,3,5,4 +VisibleModules=1,7,3,5,4,6 diff --git a/B4A/NotificationService.bas b/B4A/NotificationService.bas index e70e840..3e8dde5 100644 --- a/B4A/NotificationService.bas +++ b/B4A/NotificationService.bas @@ -11,44 +11,44 @@ Version=11 Sub Process_Globals 'These global variables will be declared once when the application starts. 'These variables can be accessed from all modules. -' Dim rp As ReplyAuto -' Dim activo As Boolean = True + Dim rp As ReplyAuto + Dim activo As Boolean = True Dim ultimaNoti As String - Dim logger As Boolean = False End Sub Sub Service_Create -' rp.Initialize("MonitorKeymon") - #if not(DEBUG) - logger = False - #end if - If logger Then Log("**************** Iniciamos Monitor Keymon ***********************") + rp.Initialize("MonitorKeymon") + If Starter.logger Then Log("**************** Iniciamos Monitor Keymon ***********************") End Sub Sub Service_Start (StartingIntent As Intent) -' Log("NotificationService Start") -' If rp.HandleIntent(StartingIntent) Then Return + Log("Monitor - NotificationService Start") + If rp.HandleIntent(StartingIntent) Then Return DateTime.DateFormat = "mm" ultimaNoti = DateTime.Date(DateTime.now) - If logger Then LogColor($"Ultima notificación en el minuto ${ultimaNoti}"$, Colors.green) + If Starter.logger Then LogColor($"Ultima notificación en el minuto ${ultimaNoti}"$, Colors.green) End Sub Sub Service_Destroy End Sub -'Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) -' If ultimaNoti = "" Then ultimaNoti = 0 -' DateTime.DateFormat = "mm" -' Private estaNoti As String = DateTime.Date(DateTime.now) -' If estaNoti > 60 Then estaNoti = estaNoti - 60 -' If logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) -' If logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green) -' If logger Then Log(SBN.PackageName) -' If ultimaNoti < estaNoti Then -' If logger Then LogColor($"******** TIEMPO *******"$, Colors.red) -' ultimaNoti = estaNoti -' If IsPaused(Monitor) Then StartService(Monitor) -' End If -' If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta) -'End Sub +Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) +' Log("|" & ultimaNoti & "|") + If ultimaNoti = "" Then ultimaNoti = 0 + DateTime.DateFormat = "mm" + Private estaNoti As String = DateTime.Date(DateTime.now) +' Log("|" & estaNoti & "|") + If estaNoti > 60 Then estaNoti = estaNoti - 60 +' Log("|" & estaNoti & "|") + If Starter.logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) + If Starter.logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green) + If Starter.logger Then Log(SBN.PackageName) + If (ultimaNoti + 2) < estaNoti Then '3 minutos + If Starter.logger Then LogColor($"******** Revisamos el Monitor *******"$, Colors.red) + ultimaNoti = estaNoti + If Starter.logger Then Log($"Monitor activo: ${Not(IsPaused(Monitor))}"$) + If IsPaused(Monitor) Then StartService(Monitor) + End If + If Starter.logger Then LogColor("Monitor inicializado: " & Monitor.Timer1.IsInitialized, Colors.Magenta) +End Sub diff --git a/B4A/Starter.bas b/B4A/Starter.bas index bb3ada7..c931e4e 100644 --- a/B4A/Starter.bas +++ b/B4A/Starter.bas @@ -24,7 +24,7 @@ Sub Process_Globals ' Dim InternetOk As Boolean = True ' Dim DBReqServerOk As Boolean = True ' Dim DBOk As Boolean = True - Dim logger As Boolean = False + Dim logger As Boolean = True Dim ping As Boolean = False Dim servidores As List End Sub diff --git a/B4A/monitor.bas b/B4A/monitor.bas index 5f4a5dc..43b186a 100644 --- a/B4A/monitor.bas +++ b/B4A/monitor.bas @@ -68,61 +68,61 @@ End Sub Sub probamosConexion If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############") - If B4XPages.IsInitialized Then - B4XPages.MainPage.lv_servidores.Clear - B4XPages.MainPage.lv_dbs.Clear - B4XPages.MainPage.cb_conexion.Checked = False - B4XPages.MainPage.cb_internet.Checked = False + Try + If B4XPages.IsInitialized Then + B4XPages.MainPage.lv_servidores.Clear + B4XPages.MainPage.lv_dbs.Clear + B4XPages.MainPage.cb_conexion.Checked = False + B4XPages.MainPage.cb_internet.Checked = False ' B4XPages.MainPage.cb_dbreqserver.Checked = False ' B4XPages.MainPage.cb_db.Checked = False - End If - If IsConnectedToInternet Then - s.ping - InternetOk = True - If B4XPages.IsInitialized Then - B4XPages.MainPage.cb_conexion.Checked = True - B4XPages.MainPage.cb_internet.Checked = Starter.ping - Dim cd1 As ColorDrawable - cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) - B4XPages.MainPage.b_ping.Background = cd1 - B4XPages.MainPage.b_ping.Text = "Internet Ok" End If - Dim cmd As DBCommand - s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid) - If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!" - Dim cmd As DBCommand - For i = 0 To Starter.servidores.Size - 1 - Private esteServidor As Map = Starter.servidores.Get(i).As(Map) - Log(esteServidor.Get("servidor")) - reqManager.Initialize(Me, esteServidor.Get("servidor")) - cmd.Initialize - cmd.Name = "select_conexion" - reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & i, esteServidor.get("timeout")) - Next - Private sa As Cursor = Starter.skmt.ExecQuery("select * from cat_servidores") - If sa.RowCount > 0 Then - For i = 0 To sa.RowCount - 1 - sa.Position = i - reqManager.Initialize(Me, sa.GetString("url")) + If IsConnectedToInternet Then + s.ping + InternetOk = True + If B4XPages.IsInitialized Then + B4XPages.MainPage.cb_conexion.Checked = True + B4XPages.MainPage.cb_internet.Checked = Starter.ping + Dim cd1 As ColorDrawable + cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) + B4XPages.MainPage.b_ping.Background = cd1 + B4XPages.MainPage.b_ping.Text = "Internet Ok" + End If + Dim cmd As DBCommand + s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid) + If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!" + Dim cmd As DBCommand + For i = 0 To Starter.servidores.Size - 1 + Private esteServidor As Map = Starter.servidores.Get(i).As(Map) + Log(esteServidor.Get("servidor")) + reqManager.Initialize(Me, esteServidor.Get("servidor")) cmd.Initialize cmd.Name = "select_conexion" - reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & sa.GetString("id"), sa.GetString("timeout")) + reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & i, esteServidor.get("timeout")) Next + Private sa As Cursor = Starter.skmt.ExecQuery("select * from cat_servidores") + If sa.RowCount > 0 Then + For i = 0 To sa.RowCount - 1 + sa.Position = i + reqManager.Initialize(Me, sa.GetString("url")) + cmd.Initialize + cmd.Name = "select_conexion" + reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & sa.GetString("id"), sa.GetString("timeout")) + Next + End If + 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion" + Timer1.Enabled = False + Timer1.Interval = Interval * 1000 + Timer1.Enabled = True + Else + If logger Then Log("Sin conexión a internet!!!") + s.notiLowReturn("SIN INTERNET ❌", "NO hay conexion a internet.", nid) + cs.Initialize + If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll End If - - - - 'Reiniciamos el timer para cuando llamamos el Sub desde "seleccion" - Timer1.Enabled = False - Timer1.Interval = Interval * 1000 - Timer1.Enabled = True - Else - If logger Then Log("Sin conexión a internet!!!") - s.notiLowReturn("SIN INTERNET ❌", "NO hay conexion a internet.", nid) - cs.Initialize - If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a internet!!").PopAll - End If - + Catch + Log(LastException) + End Try End Sub Sub reinicializaReqManager 'ignore @@ -137,21 +137,24 @@ Sub JobDone(Job As HttpJob) If Job.JobName = "DBRequest" Then DBReqServerOk = False Dim cd1 As ColorDrawable cd1.Initialize(Colors.Red, 10dip) - If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 - If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" - Log("Guardamos error en BD") - If Job.Tag.As(String).StartsWith("select_conexion_") Then - Private idServidorX() As String = Regex.Split("_", Job.Tag) + Try + If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 + If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" + Log("Guardamos error en BD") + If Job.Tag.As(String).StartsWith("select_conexion_") Then + Private idServidorX() As String = Regex.Split("_", Job.Tag) ' Log("|" & idServidorX(2) & "|") - Private idServidor As String = idServidorX(2) - Private m As Map = s.traeServidorDesdeBD(idServidor) - s.notiHigh("ERROR ❌", $"El servidor ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) - cs.Initialize - B4XPages.MainPage.lv_servidores.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) - B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) + Private idServidor As String = idServidorX(2) + Private m As Map = s.traeServidorDesdeBD(idServidor) + s.notiHigh("ERROR ❌", $"El servidor ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) + cs.Initialize + If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) + If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) ' B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) - End If - + End If + Catch + Log(LastException) + End Try Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('El servidor ${Starter.DBReqServer} NO responde!!', '${s.fechaKMT(DateTime.Now)}')"$) If Job.ErrorMessage.Contains("failed to connect") Or Job.ErrorMessage.Contains("Failed to connect") Then ' ToastMessageShow("¡Hubo un error contactando al servidor, por favor revise su conexión!", True) @@ -162,56 +165,64 @@ Sub JobDone(Job As HttpJob) If Job.JobName = "DBRequest" Then Dim resultado As DBResult = reqManager.HandleJob(Job) If resultado.Tag.As(String).StartsWith("select_conexion_") Then - Log("select_conexion") + If Starter.logger Then Log("select_conexion") Private idServidorX() As String = Regex.Split("_", resultado.Tag) Private idServidor As String = idServidorX(2) Private m As Map = s.traeServidorDesdeBD(idServidor) - B4XPages.MainPage.lbl.TextColor = Colors.black - B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) - For Each records() As Object In resultado.Rows - Private valor As String = records(resultado.Columns.Get("VALOR")) - If valor = "OK" Then - DBOk = True - s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid) - If B4XPages.IsInitialized Then - B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!" - B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) - Dim cd1 As ColorDrawable - cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) - B4XPages.MainPage.b_ping.Background = cd1 - B4XPages.MainPage.b_ping.Text = "Servidor Ok" - End If - Else - s.notiHigh("ERROR ❌", $"La base de datos ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) - If B4XPages.IsInitialized Then - B4XPages.MainPage.l_status.Text = "La base de datos NO esta respondiendo!!" - Log("Guardamos error en BD") + Try + If B4XPages.IsInitialized Then B4XPages.MainPage.lbl.TextColor = Colors.black + If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) + For Each records() As Object In resultado.Rows + Private valor As String = records(resultado.Columns.Get("VALOR")) + If valor = "OK" Then + DBOk = True + s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid) + If B4XPages.IsInitialized Then + B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!" + B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) + Dim cd1 As ColorDrawable + cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) + B4XPages.MainPage.b_ping.Background = cd1 + B4XPages.MainPage.b_ping.Text = "Servidor Ok" + End If + Else + s.notiHigh("ERROR ❌", $"La base de datos ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) + If B4XPages.IsInitialized Then + B4XPages.MainPage.l_status.Text = "La base de datos NO esta respondiendo!!" + Log("Guardamos error en BD") ' B4XPages.MainPage.lbl.TextColor = Colors.red ' Sleep(200) - cs.Initialize - B4XPages.MainPage.lv_dbs.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) - B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) + cs.Initialize + B4XPages.MainPage.lv_dbs.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) + B4XPages.MainPage.lv_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1) ' B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) - Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('La BD NO esta respondiendo!!', '${s.fechaKMT(DateTime.Now)}')"$) - Dim cd1 As ColorDrawable - cd1.Initialize(Colors.Red, 10dip) - B4XPages.MainPage.b_ping.Background = cd1 - B4XPages.MainPage.b_ping.Text = "Servidor KO" + Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('La BD NO esta respondiendo!!', '${s.fechaKMT(DateTime.Now)}')"$) + Dim cd1 As ColorDrawable + cd1.Initialize(Colors.Red, 10dip) + B4XPages.MainPage.b_ping.Background = cd1 + B4XPages.MainPage.b_ping.Text = "Servidor KO" + End If End If - End If - Next + Next + Catch + Log(LastException) + End Try End If ' s.logJobDoneResultados(resultado) If resultado.Rows.Size = 0 Then DBOk = False ' Log(resultado.Rows.Size) End If - If B4XPages.IsInitialized Then - B4XPages.MainPage.cb_conexion.Checked = InternetOk - B4XPages.MainPage.cb_internet.Checked = Starter.ping - If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True + Try + If B4XPages.IsInitialized Then + B4XPages.MainPage.cb_conexion.Checked = InternetOk + B4XPages.MainPage.cb_internet.Checked = Starter.ping + If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True ' B4XPages.MainPage.cb_dbreqserver.Checked = DBReqServerOk ' B4XPages.MainPage.cb_db.Checked = DBOk - End If + End If + Catch + Log(LastException) + End Try Job.Release End If End Sub