diff --git a/projects/Infrastructure/Web/SignalR/BasePageHub.cs b/projects/Infrastructure/Web/SignalR/BasePageHub.cs index ecb84228..07390750 100644 --- a/projects/Infrastructure/Web/SignalR/BasePageHub.cs +++ b/projects/Infrastructure/Web/SignalR/BasePageHub.cs @@ -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) - { - } } } \ No newline at end of file diff --git a/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs b/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs index 137ef06a..6fb301cc 100644 --- a/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs +++ b/projects/IoT.Shared/Areas/Admin/Controlls/SharedController.cs @@ -47,14 +47,14 @@ namespace IoT.Shared.Areas.Admin.Controlls var group = this.GetNodeNumber(model); this.ToEntity(model, null); var hub = scope.ServiceProvider.GetService>(); - hub.ServerToClient(group, method, model); + hub.ServerToClient(method, model, group); } else { var dataService = scope.ServiceProvider.GetService(); dataService.Edit(model); var iotNodeClient = scope.ServiceProvider.GetService(); - 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>(); - 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.Delete(model); var iotNodeClient = scope.ServiceProvider.GetService(); - iotNodeClient.ClientToServer(method, model); + iotNodeClient.ClientToServer(method, model, null); } } } diff --git a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs index c26cf942..bfd6681e 100644 --- a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs +++ b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHub.cs @@ -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(message, o => o.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.Device.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.Scene.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.IoTTimer.Node.Number == connectionId); + this._dataService.UpdateList(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(message, o => o.IoTTigger.Node.Number == connectionId); + this._dataService.UpdateList(message, o => o.IoTTigger.Node.Number == from); } else if (method == Methods.UpdateIoTTiggerCommandResponse)//接收触发器命令 { @@ -251,6 +255,11 @@ namespace IoTCenter.Services var model = message.FromJson(); this._dataService.Delete(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) { diff --git a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHubExtensions.cs b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHubExtensions.cs index 3b176f94..7eaa9cf0 100644 --- a/projects/IoT.Shared/Services/IoTCenter/IoTCenterHubExtensions.cs +++ b/projects/IoT.Shared/Services/IoTCenter/IoTCenterHubExtensions.cs @@ -6,9 +6,9 @@ namespace IoTCenter.Services { public static class IoTCenterHubExtensions { - public static void ServerToClient(this IHubContext hub, string group, string method, object arg, string fromConnectionId = null) + public static void ServerToClient(this IHubContext 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); } } } \ No newline at end of file diff --git a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs index 4d89f844..554e25e2 100644 --- a/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs +++ b/projects/IoT.Shared/Services/IoTNode/IoTNodeClient.cs @@ -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(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(Device)}")//服务端编辑设备 { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(Device)}")//服务端删除设备 { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(Data)}")//服务端编辑数据 { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(Data)}")//服务端删除数据 { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(Command)}")//服务端编辑命令 { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(Command)}")//服务端删除命令 { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(Scene)}")//服务端编辑场景 { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(Scene)}")//服务端删除场景 { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(IoTTimer)}") { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(IoTTimer)}") { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(IoTTigger)}") { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(IoTTigger)}") { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(SceneCommand)}") { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(SceneCommand)}") { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(IoTTimerCommand)}") { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(IoTTimerCommand)}") { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Edit{nameof(IoTTiggerCommand)}") { var model = message.FromJson(); dataService.Edit(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } else if (method == $"Delete{nameof(IoTTiggerCommand)}") { var model = message.FromJson(); dataService.Delete(model); - this.ClientToServer(method, model); + this.ClientToServer(method, model, null); } - /////////////////////////////////////////////////////////// else if (method == Methods.ExecApi) { var cfg = scope.ServiceProvider.GetService(); var port = cfg["server.urls"].Split(':')[2]; - var url = $"http://localhost:{port}{message}"; + var url = $"http://localhost:{port}{message.FromJson()}"; var httpClient = scope.ServiceProvider.GetService().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(); @@ -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); } } } diff --git a/projects/IoTCenter/Controllers/AppController.cs b/projects/IoTCenter/Controllers/AppController.cs index 67210761..e6d3123d 100644 --- a/projects/IoTCenter/Controllers/AppController.cs +++ b/projects/IoTCenter/Controllers/AppController.cs @@ -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 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 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) diff --git a/projects/IoTCenter/Services/IoTCenterEventHandler.cs b/projects/IoTCenter/Services/IoTCenterEventHandler.cs index 33f464e4..6ae6cf6b 100644 --- a/projects/IoTCenter/Services/IoTCenterEventHandler.cs +++ b/projects/IoTCenter/Services/IoTCenterEventHandler.cs @@ -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) { diff --git a/projects/IoTCenter/Services/IoTCenterJob.cs b/projects/IoTCenter/Services/IoTCenterJob.cs index f8f98d47..7681270f 100644 --- a/projects/IoTCenter/Services/IoTCenterJob.cs +++ b/projects/IoTCenter/Services/IoTCenterJob.cs @@ -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) { diff --git a/projects/IoTCenter/Views/Home/Product.cshtml b/projects/IoTCenter/Views/Home/Product.cshtml index 547d74d8..70d31a3c 100644 --- a/projects/IoTCenter/Views/Home/Product.cshtml +++ b/projects/IoTCenter/Views/Home/Product.cshtml @@ -19,7 +19,8 @@
- + +
@@ -35,14 +36,17 @@

{{item.Name}}

-
+
- + +
diff --git a/projects/IoTCenter/configuration.db b/projects/IoTCenter/configuration.db index dc4203fa..1e456526 100644 Binary files a/projects/IoTCenter/configuration.db and b/projects/IoTCenter/configuration.db differ diff --git a/projects/IoTCenter/iotcenter.db b/projects/IoTCenter/iotcenter.db index 07de4453..5846e47c 100644 Binary files a/projects/IoTCenter/iotcenter.db and b/projects/IoTCenter/iotcenter.db differ diff --git a/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/node.js b/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/node.js index 7aff10fb..95e43809 100644 --- a/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/node.js +++ b/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/node.js @@ -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) diff --git a/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/product.js b/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/product.js index 0b9fb2ab..6a2fa917 100644 --- a/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/product.js +++ b/projects/IoTClient/Assets/StreamingAssets/wwwroot/js/product.js @@ -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) { diff --git a/projects/IoTClient/Assets/StreamingAssets/wwwroot/node.html b/projects/IoTClient/Assets/StreamingAssets/wwwroot/node.html index 7ff674ff..5b83cc43 100644 --- a/projects/IoTClient/Assets/StreamingAssets/wwwroot/node.html +++ b/projects/IoTClient/Assets/StreamingAssets/wwwroot/node.html @@ -130,7 +130,7 @@
场景
- +
diff --git a/projects/IoTNode/DeviceServices/BaseDeviceService.cs b/projects/IoTNode/DeviceServices/BaseDeviceService.cs index 86f45525..53b44e6d 100644 --- a/projects/IoTNode/DeviceServices/BaseDeviceService.cs +++ b/projects/IoTNode/DeviceServices/BaseDeviceService.cs @@ -57,14 +57,14 @@ namespace IoTNode.DeviceServices Console.WriteLine("send device to server"); using var scope = _applicationServices.CreateScope(); var iotNodeClient = scope.ServiceProvider.GetService(); - 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.ClientToServer($"Edit{typeof(Data).Name}", data.To()); + iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", data.To(), null); var eventPubliser = scope.ServiceProvider.GetService(); eventPubliser.Publish(new EntityUpdatedEvent(data)); } diff --git a/projects/IoTNode/iotnode.db b/projects/IoTNode/iotnode.db index aa61029a..80b85d3a 100644 Binary files a/projects/IoTNode/iotnode.db and b/projects/IoTNode/iotnode.db differ