提交 2c49ac3e 编写于 作者: W wq1234wq

Merge branch 'master' of https://github.com/IoTSharp/IoTSharp

......@@ -15,7 +15,7 @@
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.1" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="6.0.1" />
<PackageReference Include="EFCore.Sharding.MySql" Version="6.0.0" />
<PackageReference Include="EFCore.Sharding.MySql" Version="6.0.2" />
<PackageReference Include="Pomelo.EntityFrameworkCore.MySql.NetTopologySuite" Version="6.0.1" />
</ItemGroup>
......
......@@ -8,7 +8,7 @@
<PackageReference Include="AspNetCore.HealthChecks.Oracle" Version="6.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Core" Version="6.0.2" />
<PackageReference Include="AspNetCore.HealthChecks.UI.InMemory.Storage" Version="6.0.2" />
<PackageReference Include="EFCore.Sharding.Oracle" Version="6.0.0" />
<PackageReference Include="EFCore.Sharding.Oracle" Version="6.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Relational" Version="6.0.1" />
<PackageReference Include="Oracle.EntityFrameworkCore" Version="6.21.5" />
<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="6.0.1">
......
......@@ -14,12 +14,12 @@
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.1" />
<PackageReference Include="Npgsql" Version="6.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.2" />
<PackageReference Include="EFCore.Sharding.PostgreSql" Version="6.0.0" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="6.0.2" />
<PackageReference Include="Npgsql.Json.NET" Version="6.0.2" />
<PackageReference Include="Npgsql.NodaTime" Version="6.0.2" />
<PackageReference Include="Npgsql" Version="6.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.3" />
<PackageReference Include="EFCore.Sharding.PostgreSql" Version="6.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="6.0.3" />
<PackageReference Include="Npgsql.Json.NET" Version="6.0.3" />
<PackageReference Include="Npgsql.NodaTime" Version="6.0.3" />
</ItemGroup>
<ItemGroup>
......
......@@ -8,7 +8,7 @@
<PackageReference Include="AspNetCore.HealthChecks.SqlServer" Version="6.0.1" />
<PackageReference Include="AspNetCore.HealthChecks.UI.Core" Version="6.0.2" />
<PackageReference Include="AspNetCore.HealthChecks.UI.SqlServer.Storage" Version="6.0.2" />
<PackageReference Include="EFCore.Sharding.SqlServer" Version="6.0.0" />
<PackageReference Include="EFCore.Sharding.SqlServer" Version="6.0.2" />
<PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="6.0.1" />
</ItemGroup>
......
......@@ -14,7 +14,7 @@
</PackageReference>
<PackageReference Include="Microsoft.EntityFrameworkCore.Sqlite" Version="6.0.1" />
<PackageReference Include="Microsoft.Extensions.Diagnostics.HealthChecks" Version="6.0.1" />
<PackageReference Include="EFCore.Sharding.SQLite" Version="6.0.0" />
<PackageReference Include="EFCore.Sharding.SQLite" Version="6.0.2" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\IoTSharp.Data\IoTSharp.Data.csproj" />
......
......@@ -9,7 +9,7 @@
<PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="6.0.1" />
<PackageReference Include="Microsoft.EntityFrameworkCore" Version="6.0.1" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
<PackageReference Include="EFCore.Sharding" Version="6.0.0" />
<PackageReference Include="EFCore.Sharding" Version="6.0.2" />
</ItemGroup>
......
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFrameworks>net452;netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<TargetFrameworks>net462;netstandard2.0;netstandard2.1;net5.0;net6.0</TargetFrameworks>
<Version>1.0.1</Version>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
<PackageLicenseExpression>MIT</PackageLicenseExpression>
......@@ -15,7 +15,7 @@
</PropertyGroup>
<ItemGroup>
<PackageReference Include="MQTTnet" Version="3.1.1" />
<PackageReference Include="MQTTnet" Version="4.0.0-preview3" />
<PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
</ItemGroup>
......
using MQTTnet;
using MQTTnet.Client;
using MQTTnet.Client.Connecting;
using MQTTnet.Client.Disconnecting;
using MQTTnet.Client.Options;
using MQTTnet.Client.Receiving;
using MQTTnet.Diagnostics;
using MQTTnet.Protocol;
using System;
......@@ -21,7 +17,7 @@ namespace IoTSharp.EdgeSdk.MQTT
public string DeviceId { get; set; } = string.Empty;
public Uri BrokerUri { get; set; }
public bool IsConnected => (Client?.IsConnected).GetValueOrDefault();
private IMqttClient Client { get; set; }
private MqttClient Client { get; set; }
public delegate void DLogError(string message,Exception exception );
public event DLogError LogError;
public delegate void DLogInformation(string message);
......@@ -48,9 +44,14 @@ namespace IoTSharp.EdgeSdk.MQTT
.WithTcpServer(uri.Host, uri.Port)
.WithCredentials(username, password)
.Build();
Client.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(args => Client_ApplicationMessageReceived(Client, args));
Client.ConnectedHandler = new MqttClientConnectedHandlerDelegate(args => Client_ConnectedAsync(Client, args));
Client.DisconnectedHandler = new MqttClientDisconnectedHandlerDelegate(async e =>
Client.ApplicationMessageReceivedAsync += Client_ApplicationMessageReceived;
Client.ConnectedAsync += e => {
Client.SubscribeAsync($"/devices/{DeviceId}/rpc/request/+/+");
Client.SubscribeAsync($"/devices/{DeviceId}/attributes/update/", MqttQualityOfServiceLevel.ExactlyOnce);
LogInformation?.Invoke($"CONNECTED WITH SERVER ");
return Task.CompletedTask;
};
Client.DisconnectedAsync+=async e =>
{
try
{
......@@ -60,7 +61,7 @@ namespace IoTSharp.EdgeSdk.MQTT
{
LogError?.Invoke("CONNECTING FAILED", exception);
}
});
};
try
{
......@@ -80,16 +81,11 @@ namespace IoTSharp.EdgeSdk.MQTT
return initok;
}
private void Client_ConnectedAsync(object sender, MqttClientConnectedEventArgs e)
{
Client.SubscribeAsync($"/devices/{DeviceId}/rpc/request/+/+");
Client.SubscribeAsync($"/devices/{DeviceId}/attributes/update/", MqttQualityOfServiceLevel.ExactlyOnce);
LogInformation?.Invoke($"CONNECTED WITH SERVER ");
}
private void Client_ApplicationMessageReceived(object sender, MqttApplicationMessageReceivedEventArgs e)
private Task Client_ApplicationMessageReceived( MqttApplicationMessageReceivedEventArgs e)
{
LogDebug?.Invoke($"ApplicationMessageReceived Topic {e.ApplicationMessage.Topic} QualityOfServiceLevel:{e.ApplicationMessage.QualityOfServiceLevel} Retain:{e.ApplicationMessage.Retain} ");
try
......@@ -118,12 +114,12 @@ namespace IoTSharp.EdgeSdk.MQTT
});
}
}
}
catch (Exception ex)
{
LogError?.Invoke($"ClientId:{e.ClientId} Topic:{e.ApplicationMessage.Topic},Payload:{e.ApplicationMessage.ConvertPayloadToString()}", ex);
}
return Task.CompletedTask;
}
private void ReceiveAttributes(MqttApplicationMessageReceivedEventArgs e)
......@@ -156,21 +152,21 @@ namespace IoTSharp.EdgeSdk.MQTT
public Task UploadAttributeAsync(string _devicename, object obj)
{
return Client.PublishAsync($"devices/{_devicename}/attributes", Newtonsoft.Json.JsonConvert.SerializeObject(obj));
return Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic( $"devices/{_devicename}/attributes").WithPayload( Newtonsoft.Json.JsonConvert.SerializeObject(obj)).Build());
}
public Task UploadTelemetryDataAsync(object obj) => UploadTelemetryDataAsync("me", obj);
public Task UploadTelemetryDataAsync(string _devicename, object obj)
{
return Client.PublishAsync($"devices/{_devicename}/telemetry", Newtonsoft.Json.JsonConvert.SerializeObject(obj));
return Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic($"devices/{_devicename}/telemetry").WithPayload(Newtonsoft.Json.JsonConvert.SerializeObject(obj)).Build());
}
public Task ResponseExecommand(RpcResponse rpcResult)
{
///IoTSharp/Clients/RpcClient.cs#L65 var responseTopic = $"/devices/{deviceid}/rpc/response/{methodName}/{rpcid}";
string topic = $"/devices/{rpcResult.DeviceId}/rpc/response/{rpcResult.Method.ToString()}/{rpcResult.ResponseId}";
return Client.PublishAsync(topic, rpcResult.Data.ToString(), MqttQualityOfServiceLevel.ExactlyOnce);
return Client.PublishAsync(new MqttApplicationMessageBuilder().WithTopic( topic).WithPayload( rpcResult.Data.ToString()).WithQualityOfServiceLevel( MqttQualityOfServiceLevel.ExactlyOnce).Build());
}
public Task RequestAttributes(params string[] args) => RequestAttributes("me", false, args);
public Task RequestAttributes(string _device, params string[] args) => RequestAttributes(_device, false, args);
......@@ -183,7 +179,7 @@ namespace IoTSharp.EdgeSdk.MQTT
Dictionary<string, string> keys = new Dictionary<string, string>();
keys.Add(anySide ? "anySide" : "server", string.Join(",", args));
Client.SubscribeAsync($"/devices/{_device}/attributes/response/{id}", MqttQualityOfServiceLevel.ExactlyOnce);
return Client.PublishAsync(topic, Newtonsoft.Json.JsonConvert.SerializeObject(keys), MqttQualityOfServiceLevel.ExactlyOnce);
return Client.PublishStringAsync(topic, Newtonsoft.Json.JsonConvert.SerializeObject(keys), MqttQualityOfServiceLevel.ExactlyOnce);
}
}
public class RpcRequest
......
......@@ -19,12 +19,12 @@ namespace IoTSharp.Extensions
public class RpcClient : IDisposable
{
private readonly ConcurrentDictionary<string, TaskCompletionSource<byte[]>> _waitingCalls = new ConcurrentDictionary<string, TaskCompletionSource<byte[]>>();
private readonly IMqttClient _mqttClient;
private readonly MqttClient _mqttClient;
private readonly ILogger _logger;
private IMqttClientOptions _mqtt;
private bool disposedValue;
public RpcClient(IMqttClient mqttClient, ILogger logger)
public RpcClient(MqttClient mqttClient, ILogger logger)
{
_mqttClient = mqttClient ?? throw new ArgumentNullException(nameof(mqttClient));
_logger = logger;
......
......@@ -48,9 +48,9 @@ namespace IoTSharp.Dtos
public string IdentityValue { get; set; }
public string IdentityId { get; set; }
#nullable enable
public DeviceModel? Model { get; set; }
#nullable disable
}
}
......@@ -14,7 +14,6 @@ using MQTTnet.Server;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Threading;
using MQTTnet.AspNetCore.Extensions;
using System.Security.Cryptography.X509Certificates;
using MQTTnet;
......@@ -46,6 +45,7 @@ namespace IoTSharp
{
options.WithoutEncryptedEndpoint();
}
options.WithDefaultCommunicationTimeout(TimeSpan.FromSeconds(5));
options.WithPersistentSessions();
options.Build();
}).AddMqttConnectionHandler()
......
......@@ -52,7 +52,7 @@ namespace IoTSharp.Handlers
static long clients = 0;
internal Task Server_ClientConnectedAsync(ClientConnectedEventArgs e)
{
_logger.LogInformation($"Client [{e.ClientId}] connected");
_logger.LogInformation($"Client [{e.ClientId}] {e.Endpoint} {e.UserName} connected");
clients++;
return Task.CompletedTask;
}
......@@ -366,7 +366,7 @@ namespace IoTSharp.Handlers
var devtmp = _dbContext.Device.FirstOrDefault(d => d.Id == dev.Id);
devtmp.LastActive = DateTime.Now;
devtmp.Online = false;
_dbContext.SaveChanges();
await _dbContext.SaveChangesAsync();
_logger.LogInformation($"Server_ClientDisconnected ClientId:{args.ClientId} DisconnectType:{args.DisconnectType} Device is {devtmp.Name }({devtmp.Id}) ");
}
}
......
......@@ -68,7 +68,7 @@
<PackageReference Include="EasyCaching.LiteDB" Version="1.5.0" />
<PackageReference Include="EasyCaching.Redis" Version="1.5.0" />
<PackageReference Include="hyjiacan.pinyin4net" Version="4.1.0" />
<PackageReference Include="InfluxDB.Client" Version="3.2.0" />
<PackageReference Include="InfluxDB.Client" Version="3.3.0" />
<PackageReference Include="IoTSharp.CoAP.NET" Version="2.0.8" />
<PackageReference Include="IoTSharp.X509Extensions" Version="1.4.27" />
<PackageReference Include="Jdenticon-net" Version="3.1.2" />
......@@ -89,14 +89,14 @@
<PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.14.0" />
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="6.0.1" />
<PackageReference Include="MQTTnet" Version="4.0.0-preview1" />
<PackageReference Include="MQTTnet.AspNetCore" Version="4.0.0-preview1" />
<PackageReference Include="MQTTnet.Extensions.Rpc" Version="4.0.0-preview1" />
<PackageReference Include="NetMQ" Version="4.0.1.6" />
<PackageReference Include="Npgsql" Version="6.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.2" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="6.0.2" />
<PackageReference Include="NSwag.AspNetCore" Version="13.15.5" />
<PackageReference Include="MQTTnet" Version="4.0.0-preview3" />
<PackageReference Include="MQTTnet.AspNetCore" Version="4.0.0-preview3" />
<PackageReference Include="MQTTnet.Extensions.Rpc" Version="4.0.0-preview3" />
<PackageReference Include="NetMQ" Version="4.0.1.8" />
<PackageReference Include="Npgsql" Version="6.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="6.0.3" />
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL.NetTopologySuite" Version="6.0.3" />
<PackageReference Include="NSwag.AspNetCore" Version="13.15.7" />
<PackageReference Include="PinusDB" Version="1.0.10" />
<PackageReference Include="PinusDB.HealthChecks" Version="1.0.10" />
<PackageReference Include="ProxyKit" Version="2.3.4" />
......@@ -123,7 +123,7 @@
<PackageReference Include="Microsoft.Extensions.Hosting" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.Abstractions" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Hosting.WindowsServices" Version="6.0.0" />
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.0.0-preview1" />
<PackageReference Include="MQTTnet.Extensions.ManagedClient" Version="4.0.0-preview3" />
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="6.0.1" />
<PackageReference Include="Microsoft.AspNetCore.ApiAuthorization.IdentityServer" Version="6.0.1" />
<PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="6.0.1" />
......
......@@ -2,10 +2,11 @@
{
public class DeviceProp
{
#nullable enable
public Body? body { get; set; }
public Position? position { get; set; }
public Size? size { get; set; }
public Text? text { get; set; }
#nullable disable
}
}
\ No newline at end of file
......@@ -8,10 +8,10 @@
public long[] incomes { get; set; }
public long[] outgoings { get; set; }
#nullable enable
public DeviceProp? prop { get; set; }
#nullable disable
}
}
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册