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.