javascript – Sending new value to all users via signIR

Question:

I need to make all users get the updated values ​​on their screens as soon as the AutonavHub.client.printPackageInfoFloat(objeto) is called inside $scope.adicionar = function (objeto) {...} .

Below is my ChatHub.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.AspNet.SignalR;
using Autonav.ServidorWEB.SignalR;
using Autonav.ComunicacaoBanco.Autonav.Entidades;
using Microsoft.AspNet.SignalR.Hubs;

namespace Autonav.ServidorWEB.SignalR
{
    //Envia as informacoes direto para tela de acordo com o seu tipo de dados, para todos os clientes conectados
    public class ChatHub : Hub
    {
        public void SendPackageInfoBitAll(PackageInfoBit objeto)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.printPackageInfoBit(objeto);
        }

        public void SendPackageInfoFloatAll(PackageInfoFloat objeto)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.printPackageInfoFloat(objeto);
        }

        public void SendPackageInfoIntAll(PackageInfoInt objeto)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.printPackageInfoInt(objeto);
        }

        public void SendPackageInfoStringAll(PackageInfoString objeto)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.printPackageInfoString(objeto);
        }


        public void EnviarAlarmeTagAnalogico(DateTime horario, int IdTag, string mensagem, float valor, ETipoDeDado TipoDeDado)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.escreverPacoteDeAlarmeTagAnalogico(horario, IdTag, mensagem, valor, TipoDeDado);
        }

        public void EnviarAlarmeTagDigital(DateTime horario, int IdTag, string mensagem)
        {
        }

        public void RemoverAlarmeTagAnalogico(int IdTag)
        {
            //Instancia o hub de conexao Autonav.
            var AutonavHub = GlobalHost.ConnectionManager.GetHubContext<ChatHub>();
            //Atribui os valores do objeto recebidos a todos clientes conectados no tipo designado.
            AutonavHub.Clients.All.removerAlarmeTagAnalogico(IdTag);
        }
    }
}

Below is my device-monitoring Ctrl.js

app.controller("MonitoracaoDispositivosCtrl", function ($scope, tagsAnalogicoAPI, tagsDigitalAPI) {

    //Retorna a lista de tags cadastrada no banco atraves da API
    $scope.tags = tagsAnalogicoAPI.data.concat(tagsDigitalAPI.data);
    $scope.alarmes = [];

    /*
     * SignalR INICIO
     */

    //faz a conexao com o servidor signalR
    var AutonavHub = $.connection.chatHub;

    //Escreve o pacote de informacoes do tipo bit no value
    AutonavHub.client.printPackageInfoBit = function (PackageInfoBit) {
        if (PackageInfoBit === undefined) return false;
        var posicao = verificaSeExiste(PackageInfoBit);
        if (posicao >= 0) {
            $scope.tags[posicao].Value = PackageInfoBit.Value;
        }
        else {
            return false;
        }
        $scope.$applyAsync();
    };

    //Escreve o pacote de informacoes do tipo float no value
    AutonavHub.client.printPackageInfoFloat = function (PackageInfoFloat) {
        if (PackageInfoFloat === undefined) return false;
        var posicao = verificaSeExiste(PackageInfoFloat);
        if (posicao >= 0) {
            $scope.tags[posicao].Value = PackageInfoFloat.Value;
        }
        else {
            return false;
        }
        $scope.$applyAsync();
    };


    //Escreve o pacote de informacoes do tipo float no value
    AutonavHub.client.printPackageInfoInt = function (PackageInfoInt) {
        if (PackageInfoInt === undefined) return false;
        var posicao = verificaSeExiste(PackageInfoInt);
        if (posicao >= 0) {
            $scope.tags[posicao].Value = PackageInfoInt.Value;
        }
        else {
            return false;
        }
        $scope.$applyAsync();
    };


    //Escreve o pacote de informacoes do tipo String no value
    AutonavHub.client.printPackageInfoString = function (PackageInfoString) {
        if (PackageInfoString === undefined) return false;
        var posicao = verificaSeExiste(PackageInfoString);
        if (posicao >= 0) {
            $scope.tags[posicao].Value = PackageInfoString.Value;
        }
        else {
            return false;
        }
        $scope.$applyAsync();
    };

    AutonavHub.client.escreverPacoteDeAlarmeTagAnalogico = function (Horario, IdTag, Mensagem, Valor, TipoDeDado) {
        if (IdTag == undefined) return false;

        var posicao = verificaSeExisteAlarme(IdTag);
        if (posicao >= 0) {
            $scope.alarmes[posicao] = ConstroiObjetoAlarme(Horario, IdTag, Mensagem, Valor, TipoDeDado);
        }
        else {
            $scope.alarmes.push(ConstroiObjetoAlarme(Horario, IdTag, Mensagem, Valor, TipoDeDado))
        }
        $scope.$apply();
    };

    AutonavHub.client.removerAlarmeTagAnalogico = function (IdTag) {
        if (IdTag == undefined) return false;

        var posicao = verificaSeExisteAlarme(IdTag);
        if (posicao >= 0) {
            $scope.alarmes.splice($scope.alarmes.indexOf($scope.alarmes[posicao]), 1);
        }
        $scope.$apply();
    };

    //MANDA VALORES PARA O SERVIDOR
    $.connection.hub.start().done(function (objeto) {
    AutonavHub.client.printPackageInfoBit(objeto);
    AutonavHub.client.printPackageInfoFloat(objeto);
    AutonavHub.client.printPackageInfoInt(objeto);
    AutonavHub.client.printPackageInfoString(objeto);
    });

    /*
     * SignalR FIM
     */
    //funcao retorna a posicao do elemento do valor designado na lista
    var verificaSeExiste = function (objeto) {
        for (var i = 0; i < $scope.tags.length; i++) {
            if ($scope.tags[i].hasOwnProperty("Id") && $scope.tags[i]["Id"] === objeto.Id) {
                return i;
            }
        }
        return -1;
    };

    var verificaSeExisteAlarme = function (IdTag) {
        for (var i = 0; i < $scope.alarmes.length; i++) {
            if ($scope.alarmes[i].hasOwnProperty("IdTag") && $scope.alarmes[i]["IdTag"] === IdTag) {
                return i;
            }
        }
        return -1;
    };

    var ConstroiObjetoAlarme = function (Horario, IdTag, Mensagem, Valor, TipoDeDado) {
        var alarme = new Object();
        alarme.Horario = Horario;
        alarme.IdTag = IdTag;
        alarme.Mensagem = Mensagem;
        alarme.Valor = Valor;
        alarme.TipoDeDado = TipoDeDado;
        return alarme;
    }

    $scope.alterarValor = function (objeto) {
        $scope.tag = angular.copy(objeto);
        $scope.tag.Nome = objeto.Nome;
        $scope.tag.Valor = objeto.Value;
        $scope.modoAlterar = true;
    }

    $scope.adicionar = function (objeto) {
        $scope.tag = angular.copy(objeto);
        //BYTE
        if ($scope.tag.TipoDeDado.TipoDeDadoValor == 1) {

        }
        //WORD
        if ($scope.tag.TipoDeDado.TipoDeDadoValor == 2) {

        }
        //float
        if ($scope.tag.TipoDeDado.TipoDeDadoValor == 3) {
            //Escreve o pacote de informacoes do tipo float no value
            AutonavHub.client.printPackageInfoFloat(objeto);

        }
        //STRING
        if ($scope.tag.TipoDeDado.TipoDeDadoValor == 4) {
            //Escreve o pacote de informacoes do tipo String no value
            AutonavHub.client.printPackageInfoString(objeto);
        }
    }

});

He doubts

How to make all users get updated values ​​on their screens via signIR? It is worth mentioning that not even accessing/arriving at

$.connection.hub.start().done(function (objeto) {
....
} 

I am accomplishing it.

Answer:

To solve the problem. the monitoring-devicesCtrl.js file should look like this:

 app.controller("MonitoracaoDispositivosCtrl", function ($scope, tagsAnalogicoAPI, tagsDigitalAPI, AlteraValorFloatAPI, AlteraValoresFloatAPI, AlteraValorWordAPI, AlteraValoresWordAPI, AlteraValorStringAPI, AlteraValoresStringAPI, AlteraValorByteAPI, AlteraValoresByteAPI) { //Retorna a lista de tags cadastrada no banco atraves da API $scope.tags = tagsAnalogicoAPI.data.concat(tagsDigitalAPI.data); $scope.alarmes = []; $scope.AlteraValorFloatAPI = AlteraValorFloatAPI.data; $scope.AlteraValorWordAPI = AlteraValorWordAPI.data; $scope.AlteraValorStringAPI = AlteraValorStringAPI.data; $scope.AlteraValorByteAPI = AlteraValorByteAPI.data; /* * SignalR INICIO */ //faz a conexao com o servidor signalR var AutonavHub = $.connection.chatHub; //verifica se o valor de tag byte foi alterado AutonavHub.server.printPackageInfoBit = function (objeto) { console.log(objeto); }; //verifica se o valor de tag word foi alterado AutonavHub.server.printPackageInfoInt = function (objeto) { console.log(objeto); }; //verifica se o valor de tag float foi alterado AutonavHub.server.printPackageInfoFloat = function (objeto) { console.log(objeto); }; //verifica se o valor de tag string foi alterado AutonavHub.server.printPackageInfoString = function (objeto) { console.log(objeto); }; //Escreve o pacote de informacoes do tipo byte no value AutonavHub.client.printPackageInfoBit = function (PackageInfoBit) { if (PackageInfoBit === undefined) return false; var posicao = verificaSeExiste(PackageInfoBit); if (posicao >= 0) { $scope.tags[posicao].Value = PackageInfoBit.Value; } else { return false; } $scope.$applyAsync(); }; //Escreve o pacote de informacoes do tipo float no value AutonavHub.client.printPackageInfoFloat = function (PackageInfoFloat) { if (PackageInfoFloat === undefined) return false; var posicao = verificaSeExiste(PackageInfoFloat); if (posicao >= 0) { $scope.tags[posicao].Value = PackageInfoFloat.Value; } else { return false; } $scope.$applyAsync(); }; //Escreve o pacote de informacoes do tipo word no value AutonavHub.client.printPackageInfoInt = function (PackageInfoInt) { if (PackageInfoInt === undefined) return false; var posicao = verificaSeExiste(PackageInfoInt); if (posicao >= 0) { $scope.tags[posicao].Value = PackageInfoInt.Value; } else { return false; } $scope.$applyAsync(); }; //Escreve o pacote de informacoes do tipo String no value AutonavHub.client.printPackageInfoString = function (PackageInfoString) { if (PackageInfoString === undefined) return false; var posicao = verificaSeExiste(PackageInfoString); if (posicao >= 0) { $scope.tags[posicao].Value = PackageInfoString.Value; } else { return false; } $scope.$applyAsync(); }; AutonavHub.client.escreverPacoteDeAlarmeTagAnalogico = function (Horario, IdTag, Mensagem, Valor, TipoDeDado) { if (IdTag == undefined) return false; var posicao = verificaSeExisteAlarme(IdTag); if (posicao >= 0) { $scope.alarmes[posicao] = ConstroiObjetoAlarme(Horario, IdTag, Mensagem, Valor, TipoDeDado); } else { $scope.alarmes.push(ConstroiObjetoAlarme(Horario, IdTag, Mensagem, Valor, TipoDeDado)) } $scope.$apply(); }; AutonavHub.client.removerAlarmeTagAnalogico = function (IdTag) { if (IdTag == undefined) return false; var posicao = verificaSeExisteAlarme(IdTag); if (posicao >= 0) { $scope.alarmes.splice($scope.alarmes.indexOf($scope.alarmes[posicao]), 1); } $scope.$apply(); }; /* * SignalR FIM */ //funcao retorna a posicao do elemento do valor designado na lista var verificaSeExiste = function (objeto) { for (var i = 0; i < $scope.tags.length; i++) { if ($scope.tags[i].hasOwnProperty("Id") && $scope.tags[i]["Id"] === objeto.Id) { return i; } } return -1; }; var verificaSeExisteAlarme = function (IdTag) { for (var i = 0; i < $scope.alarmes.length; i++) { if ($scope.alarmes[i].hasOwnProperty("IdTag") && $scope.alarmes[i]["IdTag"] === IdTag) { return i; } } return -1; }; var ConstroiObjetoAlarme = function (Horario, IdTag, Mensagem, Valor, TipoDeDado) { var alarme = new Object(); alarme.Horario = Horario; alarme.IdTag = IdTag; alarme.Mensagem = Mensagem; alarme.Valor = Valor; alarme.TipoDeDado = TipoDeDado; return alarme; } $scope.alterarValor = function (objeto) { $scope.tag = angular.copy(objeto); $scope.tag.Nome = objeto.Nome; $scope.tag.Valor = objeto.Value; $scope.modoAlterar = true; } $scope.adicionar = function (objeto) { $.connection.hub.start().done(function () { //-------------------------------INICIO BYTE-----------------------------// if (objeto.TipoDeDado.TipoDeDadoValor == 1) { console.log(objeto); AlteraValorByteAPI.post(objeto).success(function (data, status) { console.log("Alterando valor Byte"); }); } //----------------------------------FIM BYTE-----------------------------// //-------------------------------INICIO WORD-----------------------------// if (objeto.TipoDeDado.TipoDeDadoValor == 2) { console.log(objeto); AlteraValorWordAPI.post(objeto).success(function (data, status) { console.log("Alterando valor Word"); }); } //----------------------------------FIM WORD-----------------------------// //-------------------------------INICIO FLOAT-----------------------------// if (objeto.TipoDeDado.TipoDeDadoValor == 3) { console.log(objeto); AlteraValorFloatAPI.post(objeto).success(function (data, status) { console.log("Alterando valor Float"); }); } //----------------------------------FIM FLOAT-----------------------------// //-----------------------------INICIO STRING-----------------------------// if (objeto.TipoDeDado.TipoDeDadoValor == 4) { console.log(objeto); AlteraValorStringAPI.post(objeto).success(function (data, status) { console.log("Alterando valor Float"); }); } //--------------------------------FIM STRING-----------------------------// }); } });
Scroll to Top
AllEscort