- VERSION 4.12.11

- Se volvio a incluir la libreria de intercepcion de notificaciones (ReplyAuto) para ayudar a mantener activa la aplicacion.
- Su gregaron bloques de try/catch para evitar que se generen errores cuando los servicios modifican la pantalla principal (mainpage) y la aplicacion esta en segundo plano.
This commit is contained in:
Jose Alberto Guerra Ugalde
2024-12-11 06:16:22 -06:00
parent 2a8bfcc967
commit baa8f9bbd8
7 changed files with 196 additions and 180 deletions

View File

@@ -70,8 +70,8 @@ Sub Class_Globals
Private p_dbs As Panel Private p_dbs As Panel
Private p_servidoresActivos As Panel Private p_servidoresActivos As Panel
Private lv_servidoresActivos As ListView Private lv_servidoresActivos As ListView
Dim jsn As JSONParser ' Dim jsn As JSONParser
Dim jsnGnr As JSONGenerator ' Dim jsnGnr As JSONGenerator
Dim rp As RuntimePermissions Dim rp As RuntimePermissions
End Sub End Sub
@@ -159,25 +159,25 @@ Sub B4XPage_Appear
s.centraEtiqueta(l_ultimoPing, Root.Width) s.centraEtiqueta(l_ultimoPing, Root.Width)
' s.centraPanel(p_intervalo, Root.Width) ' s.centraPanel(p_intervalo, Root.Width)
s.centraEtiqueta(Label1, Root.Width) s.centraEtiqueta(Label1, Root.Width)
' If Not(CheckNotificationAccess) Then 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) 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) Wait For Msgbox_Result (resultado As Int)
' If resultado = DialogResponse.POSITIVE Then If resultado = DialogResponse.POSITIVE Then
' b_notifAccess_Click b_notifAccess_Click
' End If End If
' Private cd1 As ColorDrawable Private cd1 As ColorDrawable
' cd1.Initialize(Colors.red, 10dip) cd1.Initialize(Colors.red, 10dip)
' b_notifAccess.Background = cd1 b_notifAccess.Background = cd1
' b_notifAccess.TextColor = Colors.White b_notifAccess.TextColor = Colors.White
' b_notifAccess.Text = "Activar Permisos" b_notifAccess.Text = "Activar Permisos"
' Else Else
' Private cd1 As ColorDrawable Private cd1 As ColorDrawable
' cd1.Initialize(Colors.RGB(109, 221, 101), 10dip) cd1.Initialize(Colors.RGB(109, 221, 101), 10dip)
' b_notifAccess.Background = cd1 b_notifAccess.Background = cd1
' b_notifAccess.TextColor = Colors.White b_notifAccess.TextColor = Colors.White
' b_notifAccess.Text = "Permisos Activos" b_notifAccess.Text = "Permisos Activos"
' End If End If
' CallSubDelayed(Monitor, "Timer1_Tick") CallSubDelayed(Monitor, "Timer1_Tick")
End Sub End Sub
Private Sub B4XPage_CloseRequest As ResumableSub Private Sub B4XPage_CloseRequest As ResumableSub
@@ -193,11 +193,11 @@ End Sub
'Revisa si la aplicación tiene permiso para acceder a las notificaciones. 'Revisa si la aplicación tiene permiso para acceder a las notificaciones.
Sub CheckNotificationAccess As Boolean Sub CheckNotificationAccess As Boolean
' Dim nstr, pstr As String Dim nstr, pstr As String
' Dim r As Reflector Dim r As Reflector
' pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName") pstr = r.GetStaticField("anywheresoftware.b4a.BA", "packageName")
' nstr = ph.GetSettings("enabled_notification_listeners") nstr = ph.GetSettings("enabled_notification_listeners")
' Return nstr.Contains(pstr) Return nstr.Contains(pstr)
End Sub End Sub
Private Sub tb_monitorActivo_CheckedChange(Checked As Boolean) 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. 'You can see the list of page related events in the B4XPagesManager object. The event name is B4XPage.
Sub b_notifAccess_Click Sub b_notifAccess_Click
' Dim In As Intent Dim In As Intent
' In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "") In.Initialize("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS", "")
' StartActivity(In) StartActivity(In)
End Sub End Sub
Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel 'ignore Sub CreateListItem(Text As String, Width As Int, Height As Int) As Panel 'ignore

View File

@@ -449,32 +449,36 @@ End Sub
Sub ping Sub ping
Private ph As Phone 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) 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("ExitValue:" & ExitValue)
' Log("StdError:" & StdErr) ' Log("StdError:" & StdErr)
Private res() As String = Regex.Split(",", StdOut) Private res() As String = Regex.Split(",", StdOut)
For i = 0 To res.Length - 1 For i = 0 To res.Length - 1
If res(i).Contains("1 received") Then If res(i).Contains("1 received") Then
If Starter.logger Then LogColor(">>> HAY CONEXION", Colors.Green) If Starter.logger Then LogColor(">>> HAY CONEXION", Colors.Green)
Starter.ping = True Starter.ping = True
Else If res(i).Contains("0 received") Then Else If res(i).Contains("0 received") Then
If Starter.logger Then LogColor(">>> NO HAY CONEXION", Colors.Red) If Starter.logger Then LogColor(">>> NO HAY CONEXION", Colors.Red)
Starter.ping = False Starter.ping = False
End If End If
' Log(res(i)) ' Log(res(i))
Next Next
' LogColor("StdOut: " & res, Colors.Blue) ' LogColor("StdOut: " & res, Colors.Blue)
If B4XPages.IsInitialized Then B4XPages.MainPage.cb_internet.Checked = Starter.ping If B4XPages.IsInitialized Then B4XPages.MainPage.cb_internet.Checked = Starter.ping
If Not(Starter.ping) Then If Not(Starter.ping) Then
If Starter.logger Then Log("Sin conexión a Google!!!") If Starter.logger Then Log("Sin conexión a Google!!!")
notiLowReturn("SIN INTERNET ❌", "NO hay conexion a Google.", Monitor.nid) notiLowReturn("SIN INTERNET ❌", "NO hay conexion a Google.", Monitor.nid)
Dim cs As CSBuilder Dim cs As CSBuilder
cs.Initialize 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.l_status.Text = cs.Color(Colors.red).append("NO hay conexión a Google!!").PopAll
End If
Else
Log("Error: " & LastException)
End If End If
Else Catch
Log("Error: " & LastException) Log(LastException)
End If End Try
End Sub End Sub
Sub traeServidorDesdeBD(id As Int) As Map Sub traeServidorDesdeBD(id As Int) As Map

View File

@@ -20,6 +20,7 @@ Library11=runtimepermissions
Library12=sql Library12=sql
Library13=xcustomlistview Library13=xcustomlistview
Library14=xui Library14=xui
Library15=replyauto
Library2=byteconverter Library2=byteconverter
Library3=core Library3=core
Library4=fusedlocationprovider Library4=fusedlocationprovider
@@ -28,23 +29,23 @@ Library6=json
Library7=okhttputils2 Library7=okhttputils2
Library8=phone Library8=phone
Library9=randomaccessfile 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~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\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~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\n~)~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~'AddManifestText(~\n~'<uses-permission~\n~' android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~' android:maxSdkVersion="33" />~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\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(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~'AddApplicationText(~\n~'<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~' android:label="MonitorKeymon"~\n~' android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~' android:exported="true">~\n~' <intent-filter>~\n~' <action android:name="android.service.notification.NotificationListenerService" />~\n~' </intent-filter>~\n~'</service>) 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~<uses-sdk android:minSdkVersion="5" android:targetSdkVersion="33"/>~\n~<supports-screens android:largeScreens="true" ~\n~ android:normalScreens="true"~\n~ android:smallScreens="true"~\n~ android:anyDensity="true"/>)~\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~<meta-data~\n~ android:name="com.google.android.geo.API_KEY"~\n~ android:value="AIzaSyBlBnx3O-DncOSv3oFIp-12wgujOYYcl-U"/>~\n~ <meta-data android:name="com.google.android.gms.version"~\n~ android:value="@integer/google_play_services_version" />~\n~)~\n~AddApplicationText(~\n~<uses-library~\n~ android:name="org.apache.http.legacy"~\n~ android:required="false" />~\n~)~\n~'AddManifestText(~\n~'<uses-permission~\n~' android:name="android.permission.WRITE_EXTERNAL_STORAGE"~\n~' android:maxSdkVersion="33" />~\n~')~\n~ 'End of default text.~\n~ ~\n~SetApplicationAttribute(android:usesCleartextTraffic, "true")~\n~AddManifestText(<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.ACCESS_BACKGROUND_LOCATION)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PHONE_STATE" android:maxSdkVersion="33" />)~\n~AddManifestText(<uses-permission android:name="android.permission.READ_PRIVILEGED_PHONE_STATE" android:maxSdkVersion="33" />) 'in order to access the device non-resettable identifiers such as IMEI and serial number.~\n~AddManifestText(<uses-feature android:name="android.hardware.telephony" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.autofocus" android:required="false" />)~\n~'AddManifestText(<uses-feature android:name="android.hardware.camera.flash" android:required="false" />)~\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(<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" android:maxSdkVersion="33" />)~\n~AddPermission(android.permission.INTERNET)~\n~SetApplicationAttribute(android:allowBackup, "false")~\n~AddApplicationText(~\n~<service android:name="b4a.jsaplication.com.br.ReplyAuto"~\n~ android:label="MonitorKeymon"~\n~ android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"~\n~ android:exported="true">~\n~ <intent-filter>~\n~ <action android:name="android.service.notification.NotificationListenerService" />~\n~ </intent-filter>~\n~</service>)
Module1=B4XMainPage Module1=B4XMainPage
Module2=BatteryUtilities Module2=BatteryUtilities
Module3=C_Subs Module3=C_Subs
Module4=DBRequestManager Module4=DBRequestManager
Module5=Monitor Module5=Monitor
Module6=NotificationServiceXXX Module6=NotificationService
Module7=Starter Module7=Starter
NumberOfFiles=7 NumberOfFiles=7
NumberOfLibraries=14 NumberOfLibraries=15
NumberOfModules=7 NumberOfModules=7
Version=12.8 Version=12.8
@EndOfDesignText@ @EndOfDesignText@
#Region Project Attributes #Region Project Attributes
#ApplicationLabel: Monitor Keymon #ApplicationLabel: Monitor Keymon
#VersionCode: 1 #VersionCode: 1
#VersionName: 4.12.04 #VersionName: 4.12.11
'SupportedOrientations possible values: unspecified, landscape or portrait. 'SupportedOrientations possible values: unspecified, landscape or portrait.
#SupportedOrientations: portrait #SupportedOrientations: portrait
#CanInstallToExternalStorage: False #CanInstallToExternalStorage: False

View File

@@ -22,6 +22,6 @@ ModuleClosedNodes4=
ModuleClosedNodes5=5 ModuleClosedNodes5=5
ModuleClosedNodes6= ModuleClosedNodes6=
ModuleClosedNodes7= 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 SelectedBuild=0
VisibleModules=1,7,3,5,4 VisibleModules=1,7,3,5,4,6

View File

@@ -11,44 +11,44 @@ Version=11
Sub Process_Globals Sub Process_Globals
'These global variables will be declared once when the application starts. 'These global variables will be declared once when the application starts.
'These variables can be accessed from all modules. 'These variables can be accessed from all modules.
' Dim rp As ReplyAuto Dim rp As ReplyAuto
' Dim activo As Boolean = True Dim activo As Boolean = True
Dim ultimaNoti As String Dim ultimaNoti As String
Dim logger As Boolean = False
End Sub End Sub
Sub Service_Create Sub Service_Create
' rp.Initialize("MonitorKeymon") rp.Initialize("MonitorKeymon")
#if not(DEBUG) If Starter.logger Then Log("**************** Iniciamos Monitor Keymon ***********************")
logger = False
#end if
If logger Then Log("**************** Iniciamos Monitor Keymon ***********************")
End Sub End Sub
Sub Service_Start (StartingIntent As Intent) Sub Service_Start (StartingIntent As Intent)
' Log("NotificationService Start") Log("Monitor - NotificationService Start")
' If rp.HandleIntent(StartingIntent) Then Return If rp.HandleIntent(StartingIntent) Then Return
DateTime.DateFormat = "mm" DateTime.DateFormat = "mm"
ultimaNoti = DateTime.Date(DateTime.now) 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 End Sub
Sub Service_Destroy Sub Service_Destroy
End Sub End Sub
'Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification) Sub MonitorKeymon_NotificationPosted (SBN As StatusBarNotification)
' If ultimaNoti = "" Then ultimaNoti = 0 ' Log("|" & ultimaNoti & "|")
' DateTime.DateFormat = "mm" If ultimaNoti = "" Then ultimaNoti = 0
' Private estaNoti As String = DateTime.Date(DateTime.now) DateTime.DateFormat = "mm"
' If estaNoti > 60 Then estaNoti = estaNoti - 60 Private estaNoti As String = DateTime.Date(DateTime.now)
' If logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue) ' Log("|" & estaNoti & "|")
' If logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green) If estaNoti > 60 Then estaNoti = estaNoti - 60
' If logger Then Log(SBN.PackageName) ' Log("|" & estaNoti & "|")
' If ultimaNoti < estaNoti Then If Starter.logger Then LogColor("Diferencia de tiempo entre notis = " & (estaNoti - ultimaNoti), Colors.blue)
' If logger Then LogColor($"******** TIEMPO *******"$, Colors.red) If Starter.logger Then LogColor($"Esta noti en el minuto ${DateTime.Date(DateTime.now)}, ultima noti = ${ultimaNoti}"$, Colors.green)
' ultimaNoti = estaNoti If Starter.logger Then Log(SBN.PackageName)
' If IsPaused(Monitor) Then StartService(Monitor) If (ultimaNoti + 2) < estaNoti Then '3 minutos
' End If If Starter.logger Then LogColor($"******** Revisamos el Monitor *******"$, Colors.red)
' If logger Then LogColor("Monitor inicializado:" & Monitor.Timer1.IsInitialized, Colors.Magenta) ultimaNoti = estaNoti
'End Sub 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

View File

@@ -24,7 +24,7 @@ Sub Process_Globals
' Dim InternetOk As Boolean = True ' Dim InternetOk As Boolean = True
' Dim DBReqServerOk As Boolean = True ' Dim DBReqServerOk As Boolean = True
' Dim DBOk As Boolean = True ' Dim DBOk As Boolean = True
Dim logger As Boolean = False Dim logger As Boolean = True
Dim ping As Boolean = False Dim ping As Boolean = False
Dim servidores As List Dim servidores As List
End Sub End Sub

View File

@@ -68,61 +68,61 @@ End Sub
Sub probamosConexion Sub probamosConexion
If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############") If logger Then Log("###################### "& CRLF& " probamos probamosConexion"& CRLF& " ############")
If B4XPages.IsInitialized Then Try
B4XPages.MainPage.lv_servidores.Clear If B4XPages.IsInitialized Then
B4XPages.MainPage.lv_dbs.Clear B4XPages.MainPage.lv_servidores.Clear
B4XPages.MainPage.cb_conexion.Checked = False B4XPages.MainPage.lv_dbs.Clear
B4XPages.MainPage.cb_internet.Checked = False B4XPages.MainPage.cb_conexion.Checked = False
B4XPages.MainPage.cb_internet.Checked = False
' B4XPages.MainPage.cb_dbreqserver.Checked = False ' B4XPages.MainPage.cb_dbreqserver.Checked = False
' B4XPages.MainPage.cb_db.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 End If
Dim cmd As DBCommand If IsConnectedToInternet Then
s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid) s.ping
If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!" InternetOk = True
Dim cmd As DBCommand If B4XPages.IsInitialized Then
For i = 0 To Starter.servidores.Size - 1 B4XPages.MainPage.cb_conexion.Checked = True
Private esteServidor As Map = Starter.servidores.Get(i).As(Map) B4XPages.MainPage.cb_internet.Checked = Starter.ping
Log(esteServidor.Get("servidor")) Dim cd1 As ColorDrawable
reqManager.Initialize(Me, esteServidor.Get("servidor")) cd1.Initialize(Colors.RGB(16, 141, 0), 10dip)
cmd.Initialize B4XPages.MainPage.b_ping.Background = cd1
cmd.Name = "select_conexion" B4XPages.MainPage.b_ping.Text = "Internet Ok"
reqManager.ExecuteQuery(cmd, 0, "select_conexion_" & i, esteServidor.get("timeout")) End If
Next Dim cmd As DBCommand
Private sa As Cursor = Starter.skmt.ExecQuery("select * from cat_servidores") s.notiLowReturn("Hay conexion a internet ✅️", "Revisando servidor ...", nid)
If sa.RowCount > 0 Then If B4XPages.IsInitialized Then B4XPages.MainPage.l_status.Text = "Hay conexion a internet!!"
For i = 0 To sa.RowCount - 1 Dim cmd As DBCommand
sa.Position = i For i = 0 To Starter.servidores.Size - 1
reqManager.Initialize(Me, sa.GetString("url")) Private esteServidor As Map = Starter.servidores.Get(i).As(Map)
Log(esteServidor.Get("servidor"))
reqManager.Initialize(Me, esteServidor.Get("servidor"))
cmd.Initialize cmd.Initialize
cmd.Name = "select_conexion" 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 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 End If
Catch
Log(LastException)
End Try
'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
End Sub End Sub
Sub reinicializaReqManager 'ignore Sub reinicializaReqManager 'ignore
@@ -137,21 +137,24 @@ Sub JobDone(Job As HttpJob)
If Job.JobName = "DBRequest" Then DBReqServerOk = False If Job.JobName = "DBRequest" Then DBReqServerOk = False
Dim cd1 As ColorDrawable Dim cd1 As ColorDrawable
cd1.Initialize(Colors.Red, 10dip) cd1.Initialize(Colors.Red, 10dip)
If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1 Try
If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO" If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Background = cd1
Log("Guardamos error en BD") If B4XPages.IsInitialized Then B4XPages.MainPage.b_ping.Text = "DBReqServer KO"
If Job.Tag.As(String).StartsWith("select_conexion_") Then Log("Guardamos error en BD")
Private idServidorX() As String = Regex.Split("_", Job.Tag) If Job.Tag.As(String).StartsWith("select_conexion_") Then
Private idServidorX() As String = Regex.Split("_", Job.Tag)
' Log("|" & idServidorX(2) & "|") ' Log("|" & idServidorX(2) & "|")
Private idServidor As String = idServidorX(2) Private idServidor As String = idServidorX(2)
Private m As Map = s.traeServidorDesdeBD(idServidor) Private m As Map = s.traeServidorDesdeBD(idServidor)
s.notiHigh("ERROR ❌", $"El servidor ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) s.notiHigh("ERROR ❌", $"El servidor ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main)
cs.Initialize cs.Initialize
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.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) 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"$) ' 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)}')"$) 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 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) ' 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 If Job.JobName = "DBRequest" Then
Dim resultado As DBResult = reqManager.HandleJob(Job) Dim resultado As DBResult = reqManager.HandleJob(Job)
If resultado.Tag.As(String).StartsWith("select_conexion_") Then 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 idServidorX() As String = Regex.Split("_", resultado.Tag)
Private idServidor As String = idServidorX(2) Private idServidor As String = idServidorX(2)
Private m As Map = s.traeServidorDesdeBD(idServidor) Private m As Map = s.traeServidorDesdeBD(idServidor)
B4XPages.MainPage.lbl.TextColor = Colors.black Try
B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) If B4XPages.IsInitialized Then B4XPages.MainPage.lbl.TextColor = Colors.black
For Each records() As Object In resultado.Rows If B4XPages.IsInitialized Then B4XPages.MainPage.lv_servidores.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$)
Private valor As String = records(resultado.Columns.Get("VALOR")) For Each records() As Object In resultado.Rows
If valor = "OK" Then Private valor As String = records(resultado.Columns.Get("VALOR"))
DBOk = True If valor = "OK" Then
s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid) DBOk = True
If B4XPages.IsInitialized Then s.notiLowReturn($"El servidor esta respondiendo ✅"$, "Servidor OK ✅", nid)
B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!" If B4XPages.IsInitialized Then
B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$) B4XPages.MainPage.l_status.Text = "El servidor esta respondiendo!!"
Dim cd1 As ColorDrawable B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - OK"$)
cd1.Initialize(Colors.RGB(16, 141, 0), 10dip) Dim cd1 As ColorDrawable
B4XPages.MainPage.b_ping.Background = cd1 cd1.Initialize(Colors.RGB(16, 141, 0), 10dip)
B4XPages.MainPage.b_ping.Text = "Servidor Ok" B4XPages.MainPage.b_ping.Background = cd1
End If B4XPages.MainPage.b_ping.Text = "Servidor Ok"
Else End If
s.notiHigh("ERROR ❌", $"La base de datos ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main) Else
If B4XPages.IsInitialized Then s.notiHigh("ERROR ❌", $"La base de datos ${m.Get("url").As(String).Replace("http://", "")} NO responde!!"$, nid, Main)
B4XPages.MainPage.l_status.Text = "La base de datos NO esta respondiendo!!" If B4XPages.IsInitialized Then
Log("Guardamos error en BD") B4XPages.MainPage.l_status.Text = "La base de datos NO esta respondiendo!!"
Log("Guardamos error en BD")
' B4XPages.MainPage.lbl.TextColor = Colors.red ' B4XPages.MainPage.lbl.TextColor = Colors.red
' Sleep(200) ' Sleep(200)
cs.Initialize cs.Initialize
B4XPages.MainPage.lv_dbs.AddSingleLine(cs.Color(Colors.red).append($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$).PopAll) 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_servidores.SetSelection(B4XPages.MainPage.lv_servidores.Size - 1)
' B4XPages.MainPage.lv_dbs.AddSingleLine($"${m.Get("url").As(String).Replace("http://", "")} - ERROR"$) ' 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)}')"$) Starter.skmt.ExecNonQuery($"insert into error_log(error, fecha) values ('La BD NO esta respondiendo!!', '${s.fechaKMT(DateTime.Now)}')"$)
Dim cd1 As ColorDrawable Dim cd1 As ColorDrawable
cd1.Initialize(Colors.Red, 10dip) cd1.Initialize(Colors.Red, 10dip)
B4XPages.MainPage.b_ping.Background = cd1 B4XPages.MainPage.b_ping.Background = cd1
B4XPages.MainPage.b_ping.Text = "Servidor KO" B4XPages.MainPage.b_ping.Text = "Servidor KO"
End If
End If End If
End If Next
Next Catch
Log(LastException)
End Try
End If End If
' s.logJobDoneResultados(resultado) ' s.logJobDoneResultados(resultado)
If resultado.Rows.Size = 0 Then DBOk = False If resultado.Rows.Size = 0 Then DBOk = False
' Log(resultado.Rows.Size) ' Log(resultado.Rows.Size)
End If End If
If B4XPages.IsInitialized Then Try
B4XPages.MainPage.cb_conexion.Checked = InternetOk If B4XPages.IsInitialized Then
B4XPages.MainPage.cb_internet.Checked = Starter.ping B4XPages.MainPage.cb_conexion.Checked = InternetOk
If DBReqServerOk Then B4XPages.MainPage.cb_internet.Checked = True 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_dbreqserver.Checked = DBReqServerOk
' B4XPages.MainPage.cb_db.Checked = DBOk ' B4XPages.MainPage.cb_db.Checked = DBOk
End If End If
Catch
Log(LastException)
End Try
Job.Release Job.Release
End If End If
End Sub End Sub