1.0.0-beta.414.1

Former-commit-id: db5716604343df2afb405cac03f474a82f335c1d
TangShanKaiPing
wanggang 5 years ago
parent 3b063b2ed9
commit 8c2c01e71f

@ -1,4 +1,5 @@
using Infrastructure.Domain;
using Infrastructure.Events;
using Infrastructure.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
@ -23,13 +24,15 @@ namespace Infrastructure.Data
private readonly IHostEnvironment _env;
private readonly IConfiguration _cfg;
private readonly IDbConfig _dbConfig;
private readonly IEventPublisher _publisher;
public EfDbContext(DbContextOptions options, ILogger<EfDbContext> logger, IHostEnvironment env, IConfiguration cfg, IDbConfig dbConfig) : base(options)
public EfDbContext(DbContextOptions options, ILogger<EfDbContext> logger, IHostEnvironment env, IConfiguration cfg, IDbConfig dbConfig, IEventPublisher publisher) : base(options)
{
this._logger = logger;
this._env = env;
this._cfg = cfg;
this._dbConfig = dbConfig;
this._publisher = publisher;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
@ -69,8 +72,8 @@ namespace Infrastructure.Data
public override int SaveChanges()
{
this.ChangeTracker.DetectChanges();
var entries = this.ChangeTracker.Entries().Where(o => o.State == EntityState.Added ||
o.State == EntityState.Modified || o.State == EntityState.Deleted).ToList();
var entries = this.ChangeTracker.Entries().Where(o => o.State == EntityState.Added || o.State == EntityState.Modified || o.State == EntityState.Deleted).ToList();
var events = new List<object>();
foreach (var entry in entries)
{
var entity = entry.Entity as BaseEntity;
@ -86,12 +89,28 @@ namespace Infrastructure.Data
{
(entity as IVersionEntity).RowVersion = Guid.NewGuid().ToString();
}
if (entry.State == EntityState.Added)
{
events.Add(Activator.CreateInstance(typeof(EntityInsertedEvent<>).MakeGenericType(entry.Entity.GetType()), entry.Entity));
}
else if (entry.State == EntityState.Modified)
{
events.Add(Activator.CreateInstance(typeof(EntityUpdatedEvent<>).MakeGenericType(entry.Entity.GetType()), entry.Entity));
}
else if (entry.State == EntityState.Deleted)
{
events.Add(Activator.CreateInstance(typeof(EntityDeletedEvent<>).MakeGenericType(entry.Entity.GetType()), entry.Entity));
}
this._logger.LogDebug($"{nameof(EfDbContext)}>{entity.GetType().Name}:{entry.State}");
}
try
{
return base.SaveChanges();
var result = base.SaveChanges();
if (events.Count > 0)
{
events.ForEach(o => this._publisher.Publish(o));
}
return result;
}
catch (DbUpdateException ex)
{

@ -1,6 +1,4 @@
using System;
namespace Infrastructure.Events
namespace Infrastructure.Events
{
public class EntityInsertedEvent<T> : BaseEvent<T>
{

@ -20,13 +20,12 @@ namespace Infrastructure.Events
Task.Run(() =>
{
using var scope = _applicationServices.CreateScope();
var fullName = typeof(IEventHander<T>).FullName;
var subscribers = scope.ServiceProvider.GetServices<IEventHander<T>>().ToList();
var subscribers = scope.ServiceProvider.GetServices(typeof(IEventHander<>).MakeGenericType(eventMessage.GetType())).ToList();
subscribers.ForEach(subscriber =>
{
try
{
subscriber.Handle(eventMessage);
subscriber.GetType().GetMethod("Handle", new Type[] { eventMessage.GetType() }).Invoke(subscriber, new object[] { eventMessage });
}
catch (Exception ex)
{

@ -5,7 +5,7 @@
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>

@ -5,7 +5,7 @@
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<AddRazorSupportForMvc>true</AddRazorSupportForMvc>
<GenerateEmbeddedFilesManifest>true</GenerateEmbeddedFilesManifest>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>

@ -1,10 +1,7 @@
using Application.Domain.Entities;
using Infrastructure.Application;
using Infrastructure.Application;
using Infrastructure.Data;
using Infrastructure.Domain;
using Infrastructure.Events;
using Infrastructure.Extensions;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Generic;
@ -31,11 +28,7 @@ namespace IoT.Shared.Services
foreach (var entity in entities)
{
repo.Delete(entity);
if (repo.SaveChanges() > 0)
{
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityDeletedEvent<T>(entity));
}
repo.SaveChanges();
}
}
@ -47,26 +40,13 @@ namespace IoT.Shared.Services
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
var model = message.FromJson<T>();
var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id);
var isNew = false;
if (entity == null)
{
entity = Activator.CreateInstance<T>();
repo.Add(entity);
isNew = true;
}
entity.From(model);
if (repo.SaveChanges() > 0)
{
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
if (isNew)
{
eventPublisher.Publish(new EntityInsertedEvent<T>(entity));
}
else
{
eventPublisher.Publish(new EntityUpdatedEvent<T>(entity));
}
}
repo.SaveChanges();
}
public T Edit<T, TEditModel>(TEditModel model)
@ -76,33 +56,13 @@ namespace IoT.Shared.Services
using var scope = this._services.CreateScope();
var repo = scope.ServiceProvider.GetService<IRepository<T>>();
var entity = repo.Table().FirstOrDefault(o => o.Id == model.Id);
var isNew = false;
if (entity == null)
{
entity = Activator.CreateInstance<T>();
repo.Add(entity);
isNew = true;
}
entity.From(model);
if (repo.SaveChanges() > 0)
{
if (entity is Data)
{
var data = entity as Data;
data.Device = scope.ServiceProvider.GetService<IRepository<Device>>().ReadOnlyTable().Include(o => o.Node)
.Where(o => o.Id == data.DeviceId)
.Select(o => new Device { DisplayName = o.DisplayName, Node = new Node { Name = o.Node.Name } }).FirstOrDefault();
}
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
if (isNew)
{
eventPublisher.Publish(new EntityInsertedEvent<T>(entity));
}
else
{
eventPublisher.Publish(new EntityUpdatedEvent<T>(entity));
}
}
repo.SaveChanges();
return entity;
}
@ -118,11 +78,7 @@ namespace IoT.Shared.Services
if (entity != null)
{
repo.Delete(entity);
if (repo.SaveChanges() > 0)
{
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityDeletedEvent<T>(entity));
}
repo.SaveChanges();
}
}
catch (Exception ex)

@ -24,7 +24,6 @@ namespace IoTCenter.Services
{
private readonly IConfiguration _cfg;
private readonly ILogger<IoTCenterHub> _logger;
private readonly IEventPublisher _eventPublisher;
private readonly IRepository<Node> _nodeRepo;
private readonly IRepository<Device> _deviceRepo;
private readonly IRepository<Data> _dataRepo;
@ -41,7 +40,6 @@ namespace IoTCenter.Services
public IoTCenterHub(IConfiguration cfg,
ILogger<IoTCenterHub> logger,
IEventPublisher eventPublisher,
IRepository<Node> nodeRepo,
IRepository<Device> deviceRepo,
IRepository<Data> dataRepo,
@ -58,7 +56,6 @@ namespace IoTCenter.Services
{
this._cfg = cfg;
this._logger = logger;
this._eventPublisher = eventPublisher;
this._nodeRepo = nodeRepo;
this._deviceRepo = deviceRepo;
this._dataRepo = dataRepo;

@ -128,18 +128,24 @@ namespace UserCenter.Controllers
var timer = this._sceneTimerRepo.ReadOnlyTable()
.Include(o => o.Scene).ThenInclude(o => o.SceneCommands).ThenInclude(o => o.Command).ThenInclude(o => o.Device).ThenInclude(o => o.Node)
.FirstOrDefault(o => o.Id == id);
foreach (var sceneCommand in timer.Scene.SceneCommands)
if (timer != null)
{
try
{
this._hub.ServerToClient(Methods.ExecCommand, sceneCommand.CommandId, sceneCommand.Command.Device.Node.Number, null);
}
catch (Exception ex)
foreach (var sceneCommand in timer.Scene.SceneCommands)
{
ex.PrintStack();
try
{
this._hub.ServerToClient(Methods.ExecCommand, sceneCommand.CommandId, sceneCommand.Command.Device.Node.Number, null);
}
catch (Exception ex)
{
ex.PrintStack();
}
}
}
else
{
this._logger.LogError($"timer {id} does not exist");
}
return Ok();
}
catch (Exception ex)

@ -1,7 +1,6 @@
using Application.Domain.Entities;
using Infrastructure.Application;
using Infrastructure.Data;
using Infrastructure.Events;
using Infrastructure.Web.Mvc;
using IoTCenter.Application.Models;
using Microsoft.AspNetCore.Authorization;
@ -14,11 +13,8 @@ namespace IoTCenter.Areas.Admin.Controllers
[Area(nameof(Admin))]
public class GlobalSceneController : CrudController<Scene, PagedListModel<EditGlobalSceneModel>, EditGlobalSceneModel, EditGlobalSceneModel>
{
private readonly IEventPublisher _publiser;
public GlobalSceneController(IRepository<Scene> repo, IEventPublisher publisher) : base(repo)
public GlobalSceneController(IRepository<Scene> repo) : base(repo)
{
this._publiser = publisher;
}
public override IQueryable<Scene> Query(PagedListModel<EditGlobalSceneModel> model, IQueryable<Scene> query)
@ -30,20 +26,5 @@ namespace IoTCenter.Areas.Admin.Controllers
{
base.ToDisplayModel(entity, model);
}
public override void OnInserted(Scene entity)
{
this._publiser.Publish(new EntityInsertedEvent<Scene>(entity));
}
public override void OnUpdated(Scene entity)
{
this._publiser.Publish(new EntityUpdatedEvent<Scene>(entity));
}
public override void OnDeleted(Scene entity)
{
this._publiser.Publish(new EntityDeletedEvent<Scene>(entity));
}
}
}

@ -61,24 +61,5 @@ namespace IoTCenter.Areas.Admin.Controllers
ViewData.Add(model.DeviceId, entity.Data.Device.DisplayName);
}
}
public override void OnInserted(SceneTigger entity)
{
using var scope = this._sp.CreateScope();
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityUpdatedEvent<SceneTigger>(entity));
}
public override void OnUpdated(SceneTigger entity)
{
this.OnInserted(entity);
}
public override void OnDeleted(SceneTigger entity)
{
using var scope = this._sp.CreateScope();
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityDeletedEvent<SceneTigger>(entity));
}
}
}

@ -50,24 +50,5 @@ namespace IoTCenter.Areas.Admin.Controllers
ViewData.Add(model.SceneId, entity.Scene.Name);
}
}
public override void OnInserted(SceneTimer entity)
{
using var scope = this._sp.CreateScope();
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityUpdatedEvent<SceneTimer>(entity));
}
public override void OnUpdated(SceneTimer entity)
{
this.OnInserted(entity);
}
public override void OnDeleted(SceneTimer entity)
{
using var scope = this._sp.CreateScope();
var eventPublisher = scope.ServiceProvider.GetService<IEventPublisher>();
eventPublisher.Publish(new EntityDeletedEvent<SceneTimer>(entity));
}
}
}

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414.1</Version>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Infrastructure\Infrastructure.csproj" />

@ -82,7 +82,7 @@ namespace IoTCenter.Services
{
var url = _cfg.GetConnectionString("JobServer") + "/RecurringJob/AddOrUpdate";
var id = timer.Id.ToString();
this.PostToJobServer(url, new
this.UpdateJobServer(url, new
{
id,
url = $"{_cfg.GetConnectionString("JobCallBack")}/{id}",
@ -98,7 +98,7 @@ namespace IoTCenter.Services
{
var url = _cfg.GetConnectionString("JobServer") + "/RecurringJob/AddOrUpdate";
var id = timer.Id.ToString();
this.PostToJobServer(url, new
this.UpdateJobServer(url, new
{
id,
url = $"{_cfg.GetConnectionString("JobCallBack")}/{id}",
@ -113,7 +113,7 @@ namespace IoTCenter.Services
if (_sceneRepo.ReadOnlyTable().Any(o => o.Id == timer.SceneId && o.NodeId == null))
{
var url = _cfg.GetConnectionString("JobServer") + $"/RecurringJob/Remove/{timer.Id}";
this.PostToJobServer(url);
this.UpdateJobServer(url);
}
}
@ -220,6 +220,7 @@ namespace IoTCenter.Services
public void Handle(EntityUpdatedEvent<Data> message)
{
message.Data.Device = _deviceRepo.ReadOnlyTable().Include(o => o.Node).Where(o => o.Id == message.Data.DeviceId).FirstOrDefault();
this.Notify(message);
this.TiggerHandle(message);
this.LogData(message.Data);
@ -270,7 +271,7 @@ namespace IoTCenter.Services
#endregion Scene
private void PostToJobServer(string url, object data = null)
private void UpdateJobServer(string url, object data = null)
{
try
{

@ -1,15 +1,20 @@
using Infrastructure.Data;
using Application.Domain.Entities;
using Infrastructure.Data;
using Infrastructure.Email;
using Infrastructure.Sms;
using Infrastructure.UI;
using Infrastructure.Web;
using IoT.Shared.Services;
using IoTCenter.Services;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Routing;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace IoTCenter
{
@ -29,6 +34,22 @@ namespace IoTCenter
base.ConfigureServices(services);
}
public override void Configure(IApplicationBuilder app, IWebHostEnvironment env, ILoggerFactory loggerFactory)
{
base.Configure(app, env, loggerFactory);
//
Task.Run(() =>
{
using var scope = app.ApplicationServices.CreateScope();
var tiggerRepo = scope.ServiceProvider.GetService<IRepository<SceneTigger>>();
var tiggers = tiggerRepo.ReadOnlyTable().Where(o => o.Scene.NodeId == null).ToList();
foreach (var tigger in tiggers)
{
IoTCenterEventHandler.Tiggers.TryAdd(tigger.Id, tigger);
}
});
}
public override void ConfigureOptions(IServiceCollection services)
{
services.ConfigureOptions(new FileConfigureOptions(Env, new List<string> { "IoT.Shared" }));

@ -1,6 +1,12 @@
{
"server.urls": "http://*:8011",
"BasePath": "/IoTCenter",
"Logging": {
"LogLevel": {
"Default": "Warning",
"Microsoft": "Warning"
}
},
"tableprefix": "iot",
"useRedisSignalR": "false",
"useConfigServer": "false",

@ -72,8 +72,6 @@ namespace IoTNode.DeviceServices
using var scope = _applicationServices.CreateScope();
var iotNodeClient = scope.ServiceProvider.GetService<IoTNodeClient>();
iotNodeClient.ClientToServer($"Edit{typeof(Data).Name}", data.To<EditDataModel>(), null);
var eventPubliser = scope.ServiceProvider.GetService<IEventPublisher>();
eventPubliser.Publish(new EntityUpdatedEvent<Data>(data));
}
public void UpdateDevice(IRepository<Device> repo, Device device)

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SignalR.Client" Version="3.1.3" />

@ -1,13 +1,10 @@
using Application.Domain.Entities;
using CSScriptLib;
using Hangfire;
using Infrastructure.Data;
using Infrastructure.Events;
using Infrastructure.Extensions;
using Microsoft.Extensions.DependencyInjection;
using System;
using System.Collections.Concurrent;
using System.Linq;
namespace IoTNode.Services
{
@ -21,11 +18,11 @@ namespace IoTNode.Services
IEventHander<EntityUpdatedEvent<Data>>
{
public static ConcurrentDictionary<Guid, SceneTigger> Tiggers = new ConcurrentDictionary<Guid, SceneTigger>();
private readonly IServiceProvider _sp;
private readonly IoTNodeJob _job;
public IoTNodeEventHandler(IServiceProvider sp)
public IoTNodeEventHandler(IoTNodeJob job)
{
this._sp = sp;
this._job = job;
}
public void Handle(EntityInsertedEvent<SceneTimer> message)
@ -50,19 +47,18 @@ namespace IoTNode.Services
public void Handle(EntityUpdatedEvent<SceneTigger> message)
{
Tiggers.TryRemove(message.Data.Id, out SceneTigger tigger);
Tiggers.TryRemove(message.Data.Id, out _);
Tiggers.TryAdd(message.Data.Id, message.Data);
}
public void Handle(EntityDeletedEvent<SceneTigger> message)
{
Tiggers.TryRemove(message.Data.Id, out SceneTigger tigger);
Tiggers.TryRemove(message.Data.Id, out _);
}
public void Handle(EntityUpdatedEvent<Data> message)
{
var data = message.Data;
using var scope = this._sp.CreateScope();
foreach (var item in Tiggers)
{
var tigger = item.Value;
@ -76,8 +72,7 @@ namespace IoTNode.Services
var result = method.Valid(data.Name, data.Key, value, data.Description);
if (result)
{
var job = scope.ServiceProvider.GetService<IoTNodeJob>();
job.TiggerHandle(tigger.Id);
_job.TiggerHandle(tigger.Id);
}
}
catch (Exception ex)

@ -3,7 +3,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>
<None Include="..\.editorconfig" Link=".editorconfig" />

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<TargetLatestRuntimePatch>true</TargetLatestRuntimePatch>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="AspNet.Security.OAuth.GitHub" Version="3.0.0" />

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>

@ -2,7 +2,7 @@
<PropertyGroup>
<TargetFramework>netcoreapp3.1</TargetFramework>
<Version>1.0.0-beta.413</Version>
<Version>1.0.0-beta.414</Version>
</PropertyGroup>
<ItemGroup>

Loading…
Cancel
Save