Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
dotNET Platform
MQTTnet
比较版本
3b5667c8827a6ad93b3229ee7fcda2457b850db2...18614d4e81b64ca486a5f951a806eea2d495eb21
MQTTnet
项目概览
dotNET Platform
/
MQTTnet
10 个月 前同步成功
通知
0
Star
1
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
MQTTnet
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
源分支
18614d4e81b64ca486a5f951a806eea2d495eb21
选择Git版本
...
目标分支
3b5667c8827a6ad93b3229ee7fcda2457b850db2
选择Git版本
比较
Commits (3)
https://gitcode.net/dotnet/MQTTnet/-/commit/a97e88be29979c976ae8910d91869d90c1bf5a99
Update Client_Subscribe_Samples.cs (#1766)
2023-06-15T17:31:01+02:00
HansM
HansM2013@gmx.de
Fixes <a href="https://github.com/dotnet/MQTTnet/issues/1765" rel="nofollow noreferrer noopener" target="_blank">https://github.com/dotnet/MQTTnet/issues/1765</a>.
https://gitcode.net/dotnet/MQTTnet/-/commit/560e80455ff40dbf4b4724dd58f1b4edb2398625
Update samples (#1768)
2023-06-15T18:32:28+02:00
Christian
6939810+chkr1011@users.noreply.github.com
https://gitcode.net/dotnet/MQTTnet/-/commit/18614d4e81b64ca486a5f951a806eea2d495eb21
Expose configuration of packet fragmentation in server options. (#1769)
2023-06-15T18:51:43+02:00
Christian
6939810+chkr1011@users.noreply.github.com
隐藏空白更改
内联
并排
Showing
7 changed file
with
91 addition
and
4 deletion
+91
-4
.github/workflows/ReleaseNotes.md
.github/workflows/ReleaseNotes.md
+1
-0
Samples/Client/Client_Subscribe_Samples.cs
Samples/Client/Client_Subscribe_Samples.cs
+2
-1
Samples/Server/Server_Retained_Messages_Samples.cs
Samples/Server/Server_Retained_Messages_Samples.cs
+64
-2
Source/MQTTnet/Implementations/MqttTcpServerListener.cs
Source/MQTTnet/Implementations/MqttTcpServerListener.cs
+2
-0
Source/MQTTnet/Implementations/MqttWebSocketChannel.cs
Source/MQTTnet/Implementations/MqttWebSocketChannel.cs
+2
-1
Source/MQTTnet/Server/Options/MqttServerOptionsBuilder.cs
Source/MQTTnet/Server/Options/MqttServerOptionsBuilder.cs
+12
-0
Source/MQTTnet/Server/Options/MqttServerTcpEndpointBaseOptions.cs
...QTTnet/Server/Options/MqttServerTcpEndpointBaseOptions.cs
+8
-0
未找到文件。
.github/workflows/ReleaseNotes.md
浏览文件 @
18614d4e
*
[Client] Fixed _PlatformNotSupportedException_ when using Blazor (#1755, thanks to @Nickztar).
*
[Server] Fixed _NullReferenceException_ in retained messages management (#1762, thanks to @logicaloud).
*
[Server] Exposed new option which allows disabling packet fragmentation (#1753).
Samples/Client/Client_Subscribe_Samples.cs
浏览文件 @
18614d4e
...
...
@@ -6,6 +6,7 @@
// ReSharper disable UnusedMember.Global
// ReSharper disable InconsistentNaming
using
MQTTnet
;
using
MQTTnet.Client
;
using
MQTTnet.Packets
;
using
MQTTnet.Protocol
;
...
...
@@ -176,4 +177,4 @@ public static class Client_Subscribe_Samples
response
.
DumpToConsole
();
}
}
}
\ No newline at end of file
}
Samples/Server/Server_Retained_Messages_Samples.cs
浏览文件 @
18614d4e
...
...
@@ -7,6 +7,8 @@
// ReSharper disable InconsistentNaming
using
System.Text.Json
;
using
MQTTnet.Packets
;
using
MQTTnet.Protocol
;
namespace
MQTTnet.Samples.Server
;
...
...
@@ -32,7 +34,10 @@ public static class Server_Retained_Messages_Samples
{
try
{
eventArgs
.
LoadedRetainedMessages
=
await
JsonSerializer
.
DeserializeAsync
<
List
<
MqttApplicationMessage
>>(
File
.
OpenRead
(
storePath
));
var
models
=
await
JsonSerializer
.
DeserializeAsync
<
List
<
MqttRetainedMessageModel
>>(
File
.
OpenRead
(
storePath
))
??
new
List
<
MqttRetainedMessageModel
>();
var
retainedMessages
=
models
.
Select
(
m
=>
m
.
ToApplicationMessage
()).
ToList
();
eventArgs
.
LoadedRetainedMessages
=
retainedMessages
;
Console
.
WriteLine
(
"Retained messages loaded."
);
}
catch
(
FileNotFoundException
)
...
...
@@ -56,7 +61,9 @@ public static class Server_Retained_Messages_Samples
// used to write all retained messages to dedicated files etc. Then all files must be loaded and a full list
// of retained messages must be provided in the loaded event.
var
buffer
=
JsonSerializer
.
SerializeToUtf8Bytes
(
eventArgs
.
StoredRetainedMessages
);
var
models
=
eventArgs
.
StoredRetainedMessages
.
Select
(
MqttRetainedMessageModel
.
Create
);
var
buffer
=
JsonSerializer
.
SerializeToUtf8Bytes
(
models
);
await
File
.
WriteAllBytesAsync
(
storePath
,
buffer
);
Console
.
WriteLine
(
"Retained messages saved."
);
}
...
...
@@ -79,4 +86,59 @@ public static class Server_Retained_Messages_Samples
Console
.
ReadLine
();
}
}
sealed
class
MqttRetainedMessageModel
{
public
string
?
ContentType
{
get
;
set
;
}
public
byte
[]?
CorrelationData
{
get
;
set
;
}
public
byte
[]?
Payload
{
get
;
set
;
}
public
MqttPayloadFormatIndicator
PayloadFormatIndicator
{
get
;
set
;
}
public
MqttQualityOfServiceLevel
QualityOfServiceLevel
{
get
;
set
;
}
public
string
?
ResponseTopic
{
get
;
set
;
}
public
string
?
Topic
{
get
;
set
;
}
public
List
<
MqttUserProperty
>?
UserProperties
{
get
;
set
;
}
public
static
MqttRetainedMessageModel
Create
(
MqttApplicationMessage
message
)
{
if
(
message
==
null
)
{
throw
new
ArgumentNullException
(
nameof
(
message
));
}
return
new
MqttRetainedMessageModel
{
Topic
=
message
.
Topic
,
// Create a copy of the buffer from the payload segment because
// it cannot be serialized and deserialized with the JSON serializer.
Payload
=
message
.
PayloadSegment
.
ToArray
(),
UserProperties
=
message
.
UserProperties
,
ResponseTopic
=
message
.
ResponseTopic
,
CorrelationData
=
message
.
CorrelationData
,
ContentType
=
message
.
ContentType
,
PayloadFormatIndicator
=
message
.
PayloadFormatIndicator
,
QualityOfServiceLevel
=
message
.
QualityOfServiceLevel
// Other properties like "Retain" are not if interest in the storage.
// That's why a custom model makes sense.
};
}
public
MqttApplicationMessage
ToApplicationMessage
()
{
return
new
MqttApplicationMessage
{
Topic
=
Topic
,
PayloadSegment
=
new
ArraySegment
<
byte
>(
Payload
??
Array
.
Empty
<
byte
>()),
PayloadFormatIndicator
=
PayloadFormatIndicator
,
ResponseTopic
=
ResponseTopic
,
CorrelationData
=
CorrelationData
,
ContentType
=
ContentType
,
UserProperties
=
UserProperties
,
QualityOfServiceLevel
=
QualityOfServiceLevel
,
Dup
=
false
,
Retain
=
true
};
}
}
}
\ No newline at end of file
Source/MQTTnet/Implementations/MqttTcpServerListener.cs
浏览文件 @
18614d4e
...
...
@@ -231,6 +231,7 @@ namespace MQTTnet.Implementations
using
(
var
clientAdapter
=
new
MqttChannelAdapter
(
tcpChannel
,
packetFormatterAdapter
,
_rootLogger
))
{
clientAdapter
.
AllowPacketFragmentation
=
_options
.
AllowPacketFragmentation
;
await
clientHandler
(
clientAdapter
).
ConfigureAwait
(
false
);
}
}
...
...
@@ -255,6 +256,7 @@ namespace MQTTnet.Implementations
{
try
{
// ReSharper disable once MethodHasAsyncOverload
stream
?.
Dispose
();
clientSocket
?.
Dispose
();
}
...
...
Source/MQTTnet/Implementations/MqttWebSocketChannel.cs
浏览文件 @
18614d4e
...
...
@@ -227,11 +227,12 @@ namespace MQTTnet.Implementations
{
clientWebSocket
.
Options
.
UseDefaultCredentials
=
_options
.
UseDefaultCredentials
;
}
#endif
if
(
_options
.
KeepAliveInterval
!=
WebSocket
.
DefaultKeepAliveInterval
)
{
clientWebSocket
.
Options
.
KeepAliveInterval
=
_options
.
KeepAliveInterval
;
}
#endif
#endif
if
(
_options
.
Credentials
!=
null
)
{
...
...
Source/MQTTnet/Server/Options/MqttServerOptionsBuilder.cs
浏览文件 @
18614d4e
...
...
@@ -131,6 +131,18 @@ namespace MQTTnet.Server
return
this
;
}
/// <summary>
/// Usually the MQTT packets can be send partially to improve memory allocations.
/// This is done by using multiple TCP packets or WebSocket frames etc.
/// Unfortunately not all clients do support this and will close the connection when receiving partial packets.
/// </summary>
public
MqttServerOptionsBuilder
WithoutPacketFragmentation
()
{
_options
.
DefaultEndpointOptions
.
AllowPacketFragmentation
=
false
;
_options
.
TlsEndpointOptions
.
AllowPacketFragmentation
=
false
;
return
this
;
}
public
MqttServerOptionsBuilder
WithPersistentSessions
(
bool
value
=
true
)
{
_options
.
EnablePersistentSessions
=
value
;
...
...
Source/MQTTnet/Server/Options/MqttServerTcpEndpointBaseOptions.cs
浏览文件 @
18614d4e
...
...
@@ -23,6 +23,14 @@ namespace MQTTnet.Server
/// </summary>
public
bool
?
KeepAlive
{
get
;
set
;
}
/// <summary>
/// Usually the MQTT packets can be send partially. This is done by using multiple TCP packets
/// or WebSocket frames etc. Unfortunately not all clients do support this feature and
/// will close the connection when receiving such packets. If such clients are connecting to this
/// server the flag must be set to _false_.
/// </summary>
public
bool
AllowPacketFragmentation
{
get
;
set
;
}
=
true
;
/// <summary>
/// Gets or sets the TCP keep alive interval.
/// The value _null_ indicates that the OS and framework defaults should be used.
...
...