Former-commit-id: ef41f611ba33df299003d0c3eec0040ec6e0366c
TangShanKaiPing
wanggang 6 years ago
parent b66ea0dc3e
commit 92be8b0af2

@ -24,14 +24,5 @@ namespace Infrastructure.Web.SignalR
Console.WriteLine($"{Context.ConnectionId} has disconnected which request url is {Context.GetHttpContext().Request.GetUrl()}");
return base.OnDisconnectedAsync(exception);
}
public virtual void ServerToClient(string group, string method, string message, string fromConnectinId = null)
{
Clients.Group(group).SendAsync(method, message, fromConnectinId);
}
public virtual void ClientToServer(string method, string message, string fromConnectinId)
{
}
}
}

@ -47,14 +47,14 @@ namespace IoT.Shared.Areas.Admin.Controlls
var group = this.GetNodeNumber(model);
this.ToEntity(model, null);
var hub = scope.ServiceProvider.GetService<IHubContext<IoTCenterHub>>();
hub.ServerToClient(group, method, model);
hub.ServerToClient(method, model, group);
}
else
{
var dataService = scope.ServiceProvider.GetService<DataService>();
dataService.Edit<TEntity, TEditModel>(model);
var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
iotNodeClient.ClientToServer(method, model);
iotNodeClient.ClientToServer(method, model, null);
}
return RedirectTo();
}
@ -85,7 +85,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
this.ToEditModel(entity, model);
var group = GetNodeNumber(model);
var hub = scope.ServiceProvider.GetService<IHubContext<IoTCenterHub>>();
hub.ServerToClient(group, method, model);
hub.ServerToClient(method, model, group);
}
else
{
@ -96,7 +96,7 @@ namespace IoT.Shared.Areas.Admin.Controlls
var dataService = scope.ServiceProvider.GetService<DataService>();
dataService.Delete<TEntity, TEditModel>(model);
var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
iotNodeClient.ClientToServer(method, model);
iotNodeClient.ClientToServer(method, model, null);
}
}
}

@ -6,7 +6,6 @@ using Infrastructure.Extensions;
using Infrastructure.Web.SignalR;
using IoT.Shared.Services;
using Microsoft.AspNetCore.SignalR;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using System;
using System.Collections.Generic;
@ -65,9 +64,14 @@ namespace IoTCenter.Services
this._dataService = dataService;
}
public override void ClientToServer(string method, string message, string connectionId)
public void ServerToClient(string method, string message, string toClient, string fromClient = null)
{
Console.WriteLine($"iot center> receive message {method} from {connectionId}");
Clients.Group(toClient).SendAsync(Methods.ServerToClient, method, message, toClient, fromClient);
}
public void ClientToServer(string method, string message, string to, string from = null)
{
Console.WriteLine($"iot center> receive message {method} from {from}");
try
{
//节点上传
@ -89,7 +93,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateDeviceIdListResponse)//接收设备Id列表
{
this._dataService.UpdateList<Device>(message, o => o.Node.Number == connectionId);
this._dataService.UpdateList<Device>(message, o => o.Node.Number == from);
}
else if (method == Methods.UpdateDeviceResponse)//接收设备
{
@ -101,7 +105,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateCommandIdListResponse)//接收命令Id列表
{
this._dataService.UpdateList<Command>(message, o => o.Device.Node.Number == connectionId);
this._dataService.UpdateList<Command>(message, o => o.Device.Node.Number == from);
}
else if (method == Methods.UpdateCommandResponse)//接收命令
{
@ -109,7 +113,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateSceneIdListResponse)//接收场景Id列表
{
this._dataService.UpdateList<Scene>(message, o => o.Node.Number == connectionId);
this._dataService.UpdateList<Scene>(message, o => o.Node.Number == from);
}
else if (method == Methods.UpdateSceneResponse)//接收场景
{
@ -117,7 +121,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateIoTTimerIdListResponse)//接收定时器Id列表
{
this._dataService.UpdateList<IoTTimer>(message, o => o.Node.Number == connectionId);
this._dataService.UpdateList<IoTTimer>(message, o => o.Node.Number == from);
}
else if (method == Methods.UpdateIoTTimerResponse)//接收定时器
{
@ -125,7 +129,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateIoTTiggerIdListResponse)//接收触发器Id列表
{
this._dataService.UpdateList<IoTTigger>(message, o => o.Node.Number == connectionId);
this._dataService.UpdateList<IoTTigger>(message, o => o.Node.Number == from);
}
else if (method == Methods.UpdateIoTTiggerResponse)//接收触发器
{
@ -133,7 +137,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateSceneCommandIdListResponse)//接收场景命令Id列表
{
this._dataService.UpdateList<SceneCommand>(message, o => o.Scene.Node.Number == connectionId);
this._dataService.UpdateList<SceneCommand>(message, o => o.Scene.Node.Number == from);
}
else if (method == Methods.UpdateSceneCommandResponse)//接收场景命令
{
@ -141,7 +145,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateIoTTimerCommandIdListResponse)//接收定时器命令Id列表
{
this._dataService.UpdateList<IoTTimerCommand>(message, o => o.IoTTimer.Node.Number == connectionId);
this._dataService.UpdateList<IoTTimerCommand>(message, o => o.IoTTimer.Node.Number == from);
}
else if (method == Methods.UpdateIoTTimerCommandResponse)//接收定时器命令
{
@ -149,7 +153,7 @@ namespace IoTCenter.Services
}
else if (method == Methods.UpdateIoTTiggerCommandIdListResponse)//接收触发器命令Id列表
{
this._dataService.UpdateList<IoTTiggerCommand>(message, o => o.IoTTigger.Node.Number == connectionId);
this._dataService.UpdateList<IoTTiggerCommand>(message, o => o.IoTTigger.Node.Number == from);
}
else if (method == Methods.UpdateIoTTiggerCommandResponse)//接收触发器命令
{
@ -251,6 +255,11 @@ namespace IoTCenter.Services
var model = message.FromJson<EditIoTTiggerCommandModel>();
this._dataService.Delete<IoTTiggerCommand, EditIoTTiggerCommandModel>(model);
}
//
else if (method == Methods.ApiCallback)
{
this.ServerToClient(method, message, to, from);
}
}
catch (Exception ex)
{
@ -304,14 +313,6 @@ namespace IoTCenter.Services
}
}
public void ApiCallback(string message, string connectionId)
{
if (!string.IsNullOrEmpty(connectionId))
{
this.ServerToClient(connectionId, Methods.ApiCallback, message);
}
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
private async Task LogToInfluxdbAsync(EditDataModel model, string deviceNumber)
{

@ -6,9 +6,9 @@ namespace IoTCenter.Services
{
public static class IoTCenterHubExtensions
{
public static void ServerToClient(this IHubContext<IoTCenterHub> hub, string group, string method, object arg, string fromConnectionId = null)
public static void ServerToClient(this IHubContext<IoTCenterHub> hub, string method, object message, string to, string from = null)
{
hub?.Clients.Group(group).SendAsync(Methods.ServerToClient, method, arg.ToJson(), fromConnectionId);
hub?.Clients.Group(to).SendAsync(Methods.ServerToClient, method, message.ToJson(), to, from);
}
}
}

@ -131,16 +131,16 @@ namespace IoT.Shared.Services
}
this.Connection = new HubConnectionBuilder().WithUrl(url).Build();
this.Connection.Closed += ReConnect;
this.Connection.On(Methods.ServerToClient, (string method, string message, string fromConnectionId) => this.OnServerToClient(method, message, fromConnectionId));
this.Connection.On(Methods.ServerToClient, (string method, string message, string to, string from) => this.OnServerToClient(method, message, to, from));
}
public void ServerToClient(string method, string message, string fromConnectionId)
public void ServerToClient(string method, string message, string to, string from)
{
this.OnServerToClient(method, method, fromConnectionId);
this.OnServerToClient(method, method, to, from);
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public void ClientToServer(string method, object data, string fromConnectionId = null)
public void ClientToServer(string method, object data, string to, string from = null)
{
Task.Run(() =>
{
@ -148,7 +148,7 @@ namespace IoT.Shared.Services
{
if (this.Connection != null && this.Connection.State == HubConnectionState.Connected)
{
this.Connection.SendAsync(Methods.ClientToServer, method, data.ToJson(), fromConnectionId ?? this._cfg["sn"]);
this.Connection.SendAsync(Methods.ClientToServer, method, data.ToJson(), to, from ?? this._cfg["sn"]);
}
else
{
@ -212,7 +212,7 @@ namespace IoT.Shared.Services
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public void OnServerToClient(string method, string message, string fromConnectionId)
public void OnServerToClient(string method, string message, string to, string from)
{
try
{
@ -224,126 +224,126 @@ namespace IoT.Shared.Services
{
var model = message.FromJson<EditNodeModel>();
dataService.Edit<Node, EditNodeModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(Device)}")//服务端编辑设备
{
var model = message.FromJson<EditDeviceModel>();
dataService.Edit<Device, EditDeviceModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(Device)}")//服务端删除设备
{
var model = message.FromJson<EditDeviceModel>();
dataService.Delete<Device, EditDeviceModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(Data)}")//服务端编辑数据
{
var model = message.FromJson<EditDataModel>();
dataService.Edit<Data, EditDataModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(Data)}")//服务端删除数据
{
var model = message.FromJson<EditDataModel>();
dataService.Delete<Data, EditDataModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(Command)}")//服务端编辑命令
{
var model = message.FromJson<EditCommandModel>();
dataService.Edit<Command, EditCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(Command)}")//服务端删除命令
{
var model = message.FromJson<EditCommandModel>();
dataService.Delete<Command, EditCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(Scene)}")//服务端编辑场景
{
var model = message.FromJson<EditSceneModel>();
dataService.Edit<Scene, EditSceneModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(Scene)}")//服务端删除场景
{
var model = message.FromJson<EditSceneModel>();
dataService.Delete<Scene, EditSceneModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(IoTTimer)}")
{
var model = message.FromJson<EditIoTTimerModel>();
dataService.Edit<IoTTimer, EditIoTTimerModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(IoTTimer)}")
{
var model = message.FromJson<EditIoTTimerModel>();
dataService.Delete<IoTTimer, EditIoTTimerModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(IoTTigger)}")
{
var model = message.FromJson<EditIoTTiggerModel>();
dataService.Edit<IoTTigger, EditIoTTiggerModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(IoTTigger)}")
{
var model = message.FromJson<EditIoTTiggerModel>();
dataService.Delete<IoTTigger, EditIoTTiggerModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(SceneCommand)}")
{
var model = message.FromJson<EditSceneCommandModel>();
dataService.Edit<SceneCommand, EditSceneCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(SceneCommand)}")
{
var model = message.FromJson<EditSceneCommandModel>();
dataService.Delete<SceneCommand, EditSceneCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(IoTTimerCommand)}")
{
var model = message.FromJson<EditIoTTimerCommandModel>();
dataService.Edit<IoTTimerCommand, EditIoTTimerCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(IoTTimerCommand)}")
{
var model = message.FromJson<EditIoTTimerCommandModel>();
dataService.Delete<IoTTimerCommand, EditIoTTimerCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Edit{nameof(IoTTiggerCommand)}")
{
var model = message.FromJson<EditIoTTiggerCommandModel>();
dataService.Edit<IoTTiggerCommand, EditIoTTiggerCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
else if (method == $"Delete{nameof(IoTTiggerCommand)}")
{
var model = message.FromJson<EditIoTTiggerCommandModel>();
dataService.Delete<IoTTiggerCommand, EditIoTTiggerCommandModel>(model);
this.ClientToServer(method, model);
this.ClientToServer(method, model, null);
}
///////////////////////////////////////////////////////////
else if (method == Methods.ExecApi)
{
var cfg = scope.ServiceProvider.GetService<IConfiguration>();
var port = cfg["server.urls"].Split(':')[2];
var url = $"http://localhost:{port}{message}";
var url = $"http://localhost:{port}{message.FromJson<string>()}";
var httpClient = scope.ServiceProvider.GetService<IHttpClientFactory>().CreateClient();
var result = httpClient.GetStringAsync(url).Result;
this.Connection.SendAsync(Methods.ClientToServer, Methods.ApiCallback, result, cfg["sn"]);
this.ClientToServer(Methods.ApiCallback, result, from);
}
///////////////////////////////////////////////////////////
else if (method == Methods.ExecScene)
{
var sceneId = message.FromJson<Guid>();
@ -435,13 +435,13 @@ namespace IoT.Shared.Services
var entities = query.ToList();
if (!string.IsNullOrEmpty(updateIdListMethod))
{
this.ClientToServer(updateIdListMethod, entities.Select(o => o.Id).ToList());
this.ClientToServer(updateIdListMethod, entities.Select(o => o.Id).ToList(), null);
}
if (!string.IsNullOrEmpty(updateEntityMethod))
{
foreach (var entity in entities)
{
this.ClientToServer(updateEntityMethod, entity);
this.ClientToServer(updateEntityMethod, entity, null);
}
}
}

@ -119,7 +119,7 @@ namespace IoTCenter.Controllers
.Include(o => o.Devices)
.ThenInclude(o => o.Data)
.Include(o => o.Devices)
.ThenInclude(o => o.Commands)
.ThenInclude(o => o.Node)
.FirstOrDefault(o => o.Number == number);
return Json(model);
}
@ -129,43 +129,25 @@ namespace IoTCenter.Controllers
return Content(System.IO.File.ReadAllText(Path.Combine(this._env.ContentRootPath, "wwwroot", template)));
}
/************************************************************/
public IActionResult GetSceneList(string token)
{
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._sceneRepo.ReadOnlyTable()
.Where(o => o.NodeId == null)
.ToList();
return Json(model);
}
public IActionResult GetDevice(string token, string number)
{
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._deviceRepo.ReadOnlyTable()
.Include(o => o.Data)
.FirstOrDefault(o => o.Number == number);
return Json(model);
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public IActionResult ExecApi(CallApiRequest request)
public IActionResult ExecApi(string token, string connectionId, string number, string method, string query)
{
try
{
var device = this._deviceRepo.ReadOnlyTable().Include(o => o.Node).FirstOrDefault(o => o.Number == request.Number);
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var device = this._deviceRepo.ReadOnlyTable().Include(o => o.Node).FirstOrDefault(o => o.Number == number);
if (device != null)
{
var query = string.Empty;
var query2 = string.Empty;
var parameters = Request.Method.ToUpper() == "GET" ? Request.Query.ToArray() : Request.Form.ToArray();
foreach (var item in parameters.Where(o => o.Key != "ConnectionId" && o.Key != "Method"))
foreach (var item in parameters.Where(o => o.Key.ToLower() != "connectionid" && o.Key.ToLower() != "method"))
{
query = query.SetParam(item.Key, item.Value);
query2 = query2.SetParam(item.Key, item.Value);
}
var message = $"{request.Method}{query}";
this._hub.Clients.Group(device.Node.Number).SendAsync(Methods.ServerToClient, Methods.ExecApi, message, request.ConnectionId);
var message = $"{method}{query2}";
var group = device.Node.Number;
this._hub.ServerToClient(Methods.ExecApi, message, group, connectionId);
}
return Json(ApiResponse.AsyncSuccess());
}
@ -177,16 +159,13 @@ namespace IoTCenter.Controllers
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public IActionResult ExecApiAll(string connectionId, string node, string cmd, List<Guid> id)
public IActionResult ExecScene(string token, string connectionId, Guid id)
{
try
{
var query = string.Empty;
foreach (var item in Request.Query.Where(o => o.Key != "node" && o.Key != "cmd" && !o.Key.StartsWith("id[")))
{
query = query.SetParam(item.Key, item.Value);
}
//this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.ExecAll), connectionId, id, cmd, query);
var userName = User.Identity.IsAuthenticated ? User.Identity.Name : this._jwtHelper.GetPayload(token)["UserName"].ToString();
var scene = this._sceneRepo.ReadOnlyTable().Include(o => o.Node).FirstOrDefault(o => o.Id == id);
this._hub.ServerToClient(Methods.ExecScene, id, scene.Node.Number, connectionId);
return Json(ApiResponse.AsyncSuccess());
}
catch (Exception ex)
@ -196,13 +175,28 @@ namespace IoTCenter.Controllers
}
}
/************************************************************/
public IActionResult GetDevice(string token, string number)
{
var userName = this._jwtHelper.GetPayload(token)["UserName"].ToString();
var model = this._deviceRepo.ReadOnlyTable()
.Include(o => o.Data)
.FirstOrDefault(o => o.Number == number);
return Json(model);
}
[System.Diagnostics.CodeAnalysis.SuppressMessage("Design", "CA1031:不捕获常规异常类型", Justification = "<挂起>")]
public IActionResult ExecScene(string connectionId, Guid id)
public IActionResult ExecApiAll(string connectionId, string node, string cmd, List<Guid> id)
{
try
{
var scene = this._sceneRepo.ReadOnlyTable().Include(o => o.Node).FirstOrDefault(o => o.Id == id);
this._hub.ServerToClient(scene.Node.Number, Methods.ExecScene, id, connectionId);
var query = string.Empty;
foreach (var item in Request.Query.Where(o => o.Key != "node" && o.Key != "cmd" && !o.Key.StartsWith("id[")))
{
query = query.SetParam(item.Key, item.Value);
}
//this._pageHubContext.Clients.Group(node).SendAsync(nameof(INodeService.ExecAll), connectionId, id, cmd, query);
return Json(ApiResponse.AsyncSuccess());
}
catch (Exception ex)
@ -226,7 +220,7 @@ namespace IoTCenter.Controllers
{
try
{
this._hub.ServerToClient(command.Device.Node.Number, Methods.ExecCommand, command.Id, connectionId);
this._hub.ServerToClient(Methods.ExecCommand, command.Id, command.Device.Node.Number, connectionId);
}
catch (Exception ex)
{
@ -248,7 +242,7 @@ namespace IoTCenter.Controllers
try
{
var command = this._commandRepo.ReadOnlyTable().Include(o => o.Device).ThenInclude(o => o.Node).FirstOrDefault(o => o.Id == id);
this._hub.ServerToClient(command.Device.Node.Number, Methods.ExecCommand, command.Id, connectionId);
this._hub.ServerToClient(Methods.ExecCommand, command.Id, command.Device.Node.Number, connectionId);
return Json(ApiResponse.AsyncSuccess());
}
catch (Exception ex)

@ -269,7 +269,7 @@ namespace IoTCenter.Services
{
try
{
hub.ServerToClient("page", $"{typeof(T).Name}{message.Arg}", message.Data);
hub.ServerToClient($"{typeof(T).Name}{message.Arg}", message.Data, "page", null);
}
catch (Exception ex)
{

@ -36,7 +36,7 @@ namespace IoTCenter.Services
{
try
{
this._hub.ServerToClient(command.Device.Node.Number, Methods.ExecCommand, command.Id);
this._hub.ServerToClient(Methods.ExecCommand, command.Id, command.Device.Node.Number, null);
}
catch (Exception ex)
{
@ -58,7 +58,7 @@ namespace IoTCenter.Services
{
try
{
this._hub.ServerToClient(command.Device.Node.Number, Methods.ExecCommand, command.Id);
this._hub.ServerToClient(Methods.ExecCommand, command.Id, command.Device.Node.Number, null);
}
catch (Exception ex)
{

@ -19,7 +19,8 @@
<div class="card">
<div class="card-header">
<div class="card-title">
<label class="btn btn-sm btn-info" style="height:31px;margin-bottom:0;"><input type="checkbox" class="checkall" v-on:change="SelectDevice($event)" />全选</label>
<input type="checkbox" id="All" class="checkall" v-on:change="SelectDevice($event)" />
<label for="All" class="btn btn-sm btn-info" style="height:31px;margin-bottom:0;">全选</label>
<button class="btn btn-sm btn-info uncheck" v-on:click="SelectDevice($event)">反选</button>
</div>
<div class="card-tools">
@ -35,14 +36,17 @@
<div class="card-header">
<h3 class="card-title">{{item.Name}}</h3>
<div class="card-tools">
<div class="custom-control custom-switch" v-if="HasBatchCommand()">
<div class="custom-control custom-switch" v-if="HasBatchCommand()">
<input type="checkbox" name="id[]" class="item" :value="item.Number" v-on:change="SelectDevice($event)">
</div>
</div>
</div>
<a class="box-body" :href="'/Home/Device?number='+item.Number" style="display:block;text-align:center;">
<a class="card-body" :href="'/Home/Device?number='+item.Number" style="display:block;text-align:center;">
<img :alt="item.Name" :src="model.Image" style="margin:0 auto;max-width:64px;" />
</a>
<div class="card-footer">
{{item.Node.Name}}
</div>
</div>
</div>
</div>

Binary file not shown.

@ -235,7 +235,7 @@ $(document).on('change', '#camera', function (e) {
$(document).on('mousedown touchstart', 'img.camera.ajax', function (e) {
var number = $('#camera').val();
var cmd = $(this).attr('data-cmd');
ajax('/App/ExecApi', { connectionId: connectionId, number: number, method: '/Onvif/'+cmd }, 'post');
ajax('/App/ExecApi', { token:token,connectionId: connectionId, number: number, method: '/Onvif/'+cmd }, 'post');
return false;
});
$(document).on('mouseup touchend', 'img.camera.ajax', function (e) {
@ -243,7 +243,7 @@ $(document).on('mouseup touchend', 'img.camera.ajax', function (e) {
var cmd = $(this).attr('data-cmd');
if (cmd!=='Stop') {
setTimeout(function () {
ajax('/App/ExecApi', { number: number, method: '/Onvif/Stop' }, 'post');
ajax('/App/ExecApi', { token: token, connectionId: connectionId, number: number, method: '/Onvif/Stop' }, 'post');
}, 500);
}
return false;
@ -270,13 +270,17 @@ connection.onclose(function (err) {
console.error(err);
setTimeout(connect, 15 * 1000);
});
connection.on("ServerToClient", function (method, json, from) {
connection.on("ServerToClient", function (method, json, to,from) {
console.log(method + ':' + json);
onMessage(method, json, from);
onMessage(method, json,to, from);
});
function onMessage(method, json, from) {
function onMessage(method, json,to, from) {
var item = JSON.parse(json);
if (method == 'DataEntityInserted' || method == 'DataEntityUpdated') {
if (method === 'ApiCallback') {
console.log(json);
}
else if
(method == 'DataEntityInserted' || method == 'DataEntityUpdated') {
var device = Enumerable.from(vm.model.Devices).firstOrDefault(function (o) { return o.Id === item.DeviceId; })
if (device) {
updateItem(device.Data, item);
@ -367,7 +371,10 @@ function init() {
volume = e.target.volume;
},
CallApi(number, method, query) {
ajax('/App/ExecApi', { number: number, method: method, query: query }, 'post');
ajax('/App/ExecApi', { token: token, connectionId: connectionId, number: number, method: method, query: query }, 'post');
},
CallScene(id) {
ajax('/App/ExecScene', { token: token, connectionId: connectionId, id: id }, 'post');
},
AjaxSubmit(event, deviceNumber, dataName) {
var device = Enumerable.from(vm.model.Devices)

@ -226,7 +226,7 @@ $(document).on('change', '#camera', function (e) {
$(document).on('mousedown touchstart', 'img.camera.ajax', function (e) {
var number = $('#camera').val();
var cmd = $(this).attr('data-cmd');
ajax('/App/ExecApi', { connectionId: connectionId, number: number, method: '/Onvif/' + cmd }, 'post');
ajax('/App/ExecApi', { token:token,connectionId: connectionId, number: number, method: '/Onvif/' + cmd }, 'post');
return false;
});
$(document).on('mouseup touchend', 'img.camera.ajax', function (e) {

@ -130,7 +130,7 @@
<div class="card-header">场景</div>
<div class="card-content card-content-padding">
<div class="row">
<label class="button button-raised" v-for="scene in model.Scenes" :data-scene-id="scene.Id">{{scene.Name}}</label>
<label class="button button-raised" v-for="scene in model.Scenes" v-on:click="CallScene(scene.Id)">{{scene.Name}}</label>
</div>
</div>
</div>

@ -57,14 +57,14 @@ namespace IoTNode.DeviceServices
Console.WriteLine("send device to server");
using var scope = _applicationServices.CreateScope();
var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
iotNodeClient.ClientToServer(method, data);
iotNodeClient.ClientToServer(method, data, null);
}
public void SendDataToServer(Data data)
{
using var scope = _applicationServices.CreateScope();
var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", data.To<EditDataModel>());
iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", data.To<EditDataModel>(), null);
var eventPubliser = scope.ServiceProvider.GetService<IEventPublisher>();
eventPubliser.Publish(new EntityUpdatedEvent<Data>(data));
}

Binary file not shown.
Loading…
Cancel
Save