¿Sábias que puedes enviar eventos desde el servidor a los navegadores?

Creado por Rubén Pardo Orero, Modificado el Tue, 28 May 2024 a las 02:04 PM por Rubén Pardo Orero

Y de esta forma realizar acciones sin que el usuario intervenga.

Para ello necesitas disparar el evento desde un proceso de DLL (mediante cron, crud o menú) y capturarlo desde JS y reaccionar de la forma deseada.

El código de dll de ejemplo sería así:


using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Security;
using System.Text;
using System.Threading.Tasks;
using FLEXYGO.Objects;
using FLEXYGO.Web;
using FLEXYGO.Caching;
using FLEXYGO.Utilities.General;
using FLEXYGO.Exceptions;
using FLEXYGO.Processing;
using static FLEXYGO.Processing.ProcessManager;
using FLEXYGO.Configuration.Tokens;
using FLEXYGO.Objects.Settings;
using static FLEXYGO.Utilities.SQL.SQLUtilities;
using static FLEXYGO.Utilities.General.Util;
using System.Web.Hosting;
using System.Net.Mail;
using FLEXYGO.Data;
using System.IO.Compression;
using FLEXYGO.Security;
using System.Net;
using System.Web;
using FLEXYGO.Localization;
using FLEXYGO.Interfaces.SignalR.Events;
using FlexyGo.SignalR;

namespace Ejemplo{
    public class Eventos    {
        // <summary>
        // Disparar un evento desde el servidor para que reaccione un usuario en concreto.
        // </summary>
        // <param name="Entity">Entity with current object.</param>
        // <param name="Ret">ProcessHelper class with context and return data.</param>
        // <returns>True if works, false if not.</returns>
        public static bool Disparar_evento(EntityObject Entity, ref ProcessHelper Ret)
        {
            try
            {
                // Preparamos un objeto cualquiera con los datos que queremos hacer llegar al cliente.
                object[] sender = new object[2];
                sender[0] = new { firstName = "john", lastName = "walter" };
                sender[1] = new { brand = "BMW" };

                // Genera un evento de clase push y tipo updated y asigna los datos que queremos hacer llegar al cliente.
                EventHelper ev = new EventHelper(eEventClass.Push, eEventType.Updated) { sender = sender };
                ev.masterIdentity = "Evento_Prueba";
                
                //Disparar evento a un usuario en concreto.
                Events.FireGenericUserEvent(ev, "admin");

                //Disparar evento a un ID de usuario en concreto.
                //Events.FireGenericUserIDEvent(ev,"1");

                //Disparar evento a todos los usuarios.
                //Events.FireGenericAllUserEvent(ev);

                Ret.Success = true;
                return true;
            }
            catch (Exception ex)
            {
                Ret.Success = false;
                Ret.LastException = ex;
                return false;
            }
        }
    }
}



Y el código de JS de ejemplo así:


flexygo.events.off(document'push''updated');
flexygo.events.on(document'push''updated', capturar_evento);

function capturar_evento(e){    
  if(e.masterIdentity=='Evento_Prueba'){
        debugger;
        console.log(e.sender);
        console.log(e.sender[0].firstName); //john
        console.log(e.sender[0].lastName); //walter 
        console.log(e.sender[1].brand); //BMW
   }
}

¿Le ha sido útil este artículo?

¡Qué bien!

Gracias por sus comentarios

¡Sentimos mucho no haber sido de ayuda!

Gracias por sus comentarios

¡Háganos saber cómo podemos mejorar este artículo!

Seleccione al menos una de las razones
Se requiere la verificación del CAPTCHA.

Sus comentarios se han enviado

Agradecemos su esfuerzo e intentaremos corregir el artículo