Sending new value to all users via signIR

3

I need to make all users receive the updated values on their screens as soon as the AutonavHub.client.printPackageInfoFloat(objeto) function is called within $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 monitor-deviceCtrl.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);
        }
    }

});

Doubts

How do all users receive the updated values on their screens via signIR? It's worth pointing out that you can not access / reach the

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

I'm getting it.

    
asked by anonymous 23.05.2017 / 22:39

1 answer

1

To solve the problem. the monitor-devices fileCtrl.js 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-----------------------------//
        });
    }

});
    
26.05.2017 / 19:36