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-----------------------------// }); } });