Merge branch 'master' of http://192.168.10.111:8383/SIG
This commit is contained in:
73
App_Code/NotificacionesSQLWatcher.vb
Normal file
73
App_Code/NotificacionesSQLWatcher.vb
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
Option Explicit On
|
||||||
|
Option Strict Off
|
||||||
|
Imports System.Data.SqlClient
|
||||||
|
Imports ADSNetLibrary.Helpers
|
||||||
|
Imports Microsoft.AspNet.SignalR
|
||||||
|
|
||||||
|
Public Class NotificacionesSQLWatcher
|
||||||
|
Private _hubContext As IHubContext
|
||||||
|
Public rutadb As String
|
||||||
|
Public Sub New()
|
||||||
|
rutadb = ConfigurationManager.ConnectionStrings("Conexion").ConnectionString
|
||||||
|
' Obtener el contexto del Hub de SignalR
|
||||||
|
_hubContext = GlobalHost.ConnectionManager.GetHubContext(Of Notificaciones)()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Iniciar el proceso de escucha de cambios en SQL
|
||||||
|
Public Sub StartWatching()
|
||||||
|
' Detener y reiniciar SqlDependency para evitar múltiples suscripciones
|
||||||
|
SqlDependency.Stop(rutadb)
|
||||||
|
SqlDependency.Start(rutadb)
|
||||||
|
|
||||||
|
' Iniciar el proceso de escucha
|
||||||
|
RegisterNotification()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Método para registrar notificaciones SQL
|
||||||
|
Private Sub RegisterNotification()
|
||||||
|
Using connection As New SqlConnection(rutadb)
|
||||||
|
' Consulta para detectar cambios recientes
|
||||||
|
Dim command As New SqlCommand(
|
||||||
|
"SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios", connection)
|
||||||
|
|
||||||
|
' Asociar dependencia SQL a la consulta
|
||||||
|
Dim dependency As New SqlDependency(command)
|
||||||
|
AddHandler dependency.OnChange, AddressOf OnNotificationChange
|
||||||
|
|
||||||
|
connection.Open()
|
||||||
|
command.ExecuteReader()
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Método ejecutado cuando ocurre un cambio en la tabla
|
||||||
|
Private Sub OnNotificationChange(sender As Object, e As SqlNotificationEventArgs)
|
||||||
|
' Volver a escuchar cambios inmediatamente
|
||||||
|
RegisterNotification()
|
||||||
|
|
||||||
|
' Enviar notificaciones con los registros actualizados
|
||||||
|
SendNotifications()
|
||||||
|
End Sub
|
||||||
|
|
||||||
|
' Método para enviar notificaciones solo de los registros actualizados
|
||||||
|
Private Sub SendNotifications()
|
||||||
|
Using connection As New SqlConnection(rutadb)
|
||||||
|
Dim query As String = "SELECT CveUsuario, Notificaciones, Fecha FROM NotificacionesUsuarios WHERE Fecha > DATEADD(MINUTE, -1, GETDATE())"
|
||||||
|
Dim command As New SqlCommand(query, connection)
|
||||||
|
|
||||||
|
connection.Open()
|
||||||
|
Dim reader As SqlDataReader = command.ExecuteReader()
|
||||||
|
|
||||||
|
' Iterar sobre los registros actualizados y enviar notificaciones
|
||||||
|
While reader.Read()
|
||||||
|
Dim cveUsuario As Integer = reader("CveUsuario").ToString().ToEntero()
|
||||||
|
Dim notificacion As String = reader("Notificaciones").ToString()
|
||||||
|
Dim fecha As String = reader("Fecha").ToString()
|
||||||
|
|
||||||
|
' Enviar al cliente usando SignalR
|
||||||
|
_hubContext.Clients.Client(Notificaciones.UsuariosConexiones(cveUsuario)).ContadorCampana(notificacion)
|
||||||
|
'_hubContext.Clients.All.broadcastMessage(cveUsuario, notificacion, fecha)
|
||||||
|
End While
|
||||||
|
End Using
|
||||||
|
End Sub
|
||||||
|
End Class
|
||||||
|
|
||||||
@@ -48,6 +48,11 @@
|
|||||||
|
|
||||||
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
|
GlobalConfiguration.Configure(AddressOf WebApiConfig.Register)
|
||||||
GlobalConfiguration.Configuration.EnsureInitialized()
|
GlobalConfiguration.Configuration.EnsureInitialized()
|
||||||
|
|
||||||
|
|
||||||
|
Dim watcher As New NotificacionesSQLWatcher()
|
||||||
|
watcher.StartWatching()
|
||||||
|
|
||||||
End Sub
|
End Sub
|
||||||
|
|
||||||
Sub Application_End(sender As Object, e As EventArgs)
|
Sub Application_End(sender As Object, e As EventArgs)
|
||||||
|
|||||||
@@ -94,10 +94,17 @@ var NotificacionesADS = function () {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
var execContadorCampana = function (contadormessage) {
|
||||||
|
$(".SigCampananoti").text(contadormessage);
|
||||||
|
$(".SigCampananoti").addClass('badge-danger');
|
||||||
|
$(".SigCampananoti").removeClass('badge-default');
|
||||||
|
//console.log('(SignalR) contadormessage \'' + contadormessage);
|
||||||
|
}
|
||||||
var ContadorCampana = function (contadormessage) {
|
var ContadorCampana = function (contadormessage) {
|
||||||
console.log('(SignalR) ContadorCampana \'' + contadormessage);
|
//console.log('(SignalR) ContadorCampana \'' + contadormessage);
|
||||||
localStorage.setItem("ContadorCampana", "");
|
localStorage.setItem("ContadorCampana", '');
|
||||||
localStorage.setItem("ContadorCampana", contadormessage);
|
localStorage.setItem("ContadorCampana", contadormessage);
|
||||||
|
execContadorCampana(contadormessage);
|
||||||
}
|
}
|
||||||
//-------------------------------------------------------------------- EndEventos ----------------------------------------------------------------------
|
//-------------------------------------------------------------------- EndEventos ----------------------------------------------------------------------
|
||||||
function closeopenConexion() {
|
function closeopenConexion() {
|
||||||
@@ -183,7 +190,7 @@ var NotificacionesADS = function () {
|
|||||||
|
|
||||||
case 'ContadorCampana':
|
case 'ContadorCampana':
|
||||||
try {
|
try {
|
||||||
console.log('(SignalR) contadormessage \'' + evt.newValue);
|
execContadorCampana(evt.newValue);
|
||||||
|
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error('(SignalR) contadormessage \''+e);
|
console.error('(SignalR) contadormessage \''+e);
|
||||||
|
|||||||
@@ -136,7 +136,7 @@
|
|||||||
<li class="dropdown dropdown-extended dropdown-notification" id="header_notification_bar" runat="server">
|
<li class="dropdown dropdown-extended dropdown-notification" id="header_notification_bar" runat="server">
|
||||||
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
|
<a href="javascript:;" class="dropdown-toggle" data-toggle="dropdown" data-hover="dropdown" data-close-others="true">
|
||||||
<i class="icon-bell"></i>
|
<i class="icon-bell"></i>
|
||||||
<span class='badge <%=If(countNotificaciones > 0, "badge-danger", "badge-default") %>'><%= countNotificaciones %> </span>
|
<span class='SigCampananoti badge <%=If(countNotificaciones > 0, "badge-danger", "badge-default") %>'><%= countNotificaciones %> </span>
|
||||||
</a>
|
</a>
|
||||||
<ul class="dropdown-menu">
|
<ul class="dropdown-menu">
|
||||||
<li class="external">
|
<li class="external">
|
||||||
|
|||||||
Reference in New Issue
Block a user