MqttServer 类 |
命名空间: HslCommunication.MQTT
MqttServer 类型公开以下成员。
名称 | 说明 | |
---|---|---|
![]() | MqttServer |
实例化一个MQTT协议的服务器 Instantiate a MQTT protocol server |
名称 | 说明 | |
---|---|---|
![]() | DownloadFileRedirect |
可以自定义重新指向需要下载的文件路径信息,第一个参数是下载文件名称,第个参数是实际映射名称,需要返回新的文件路径和下载完成是否删除的信息 You can customize the redirection of the file path that needs to be downloaded. The first parameter is the name of the downloaded file, |
![]() | EnableIPv6 |
获取或设置服务器是否支持IPv6的地址协议信息 (继承自 CommunicationTcpServer。)Get or set whether the server supports IPv6 address protocol information |
![]() | IsStarted |
服务器引擎是否启动 (继承自 CommunicationTcpServer。)Whether the server engine is started |
![]() | LogDebugMessage |
记录一些调试日志的委托,将会进行输出调试文本。 (继承自 CommunicationTcpServer。)The delegate that records some debug logs will output debug text. |
![]() ![]() | LogNet |
组件的日志工具,支持日志记录,只要实例化后,当前网络的基本信息,就以DEBUG等级进行输出 (继承自 CommunicationTcpServer。)The component's logging tool supports logging. As long as the instantiation of the basic network information, the output will be output at DEBUG |
![]() | LogStatistics |
获取当前的日志统计信息,可以获取到每个API的每天的调度次数信息,缓存60天数据,如果需要存储本地,需要调用SaveToFile(String)方法。 Get the current log statistics, you can get the daily scheduling times information of each API, and cache 60-day data. If you need to store it locally, you need to call the SaveToFile(String) method. |
![]() | MqttOnlineSessions |
获得当前异步客户端在线的MQTT客户端信息。 Get the MQTT client information of the current asynchronous client online. |
![]() | OnlineCount |
获取当前的在线的客户端数量 Gets the number of clients currently online |
![]() | OnlineSessions |
获得当前所有的在线的MQTT客户端信息,包括异步的客户端及同步请求的客户端。 Obtain all current online MQTT client information, including asynchronous client and synchronous request client. |
![]() | Port |
获取或设置服务器的端口号,如果是设置,需要在服务器启动前设置完成,才能生效。 (继承自 CommunicationTcpServer。)Gets or sets the port number of the server. If it is set, it needs to be set before the server starts to take effect. |
![]() | SocketKeepAliveTime |
获取或设置客户端的Socket的心跳时间信息,这个是Socket底层自动实现的心跳包,不基于协议层实现。默认小于0,不开启心跳检测,如果需要开启,设置 60_000 比较合适,单位毫秒 (继承自 CommunicationTcpServer。)Get or set the heartbeat time information of the Socket of the client. This is the heartbeat packet automatically implemented by the bottom layer of the Socket, not based on the protocol layer. The default value is less than 0, and heartbeat detection is not enabled. If you need to enable it, it is more appropriate to set 60_000, in milliseconds. |
![]() | SyncOnlineSessions |
获得当前同步客户端在线的MQTT客户端信息,如果客户端是短连接,将难以捕获在在线信息。 Obtain the MQTT client information of the current synchronization client online. If the client is a short connection, it will be difficult to capture the online information. |
![]() | TopicStatistics |
获取或设置当前的主题统计信息,默认按照天进行统计,连续统计30天。 You can obtain or set the statistics of the current topic. By default, the statistics are collected every day for 30 consecutive days. |
![]() | TopicWildcard |
获取或设置是否启用订阅主题通配符的功能,默认为 False Gets or sets whether to enable the function of subscribing to the topic wildcard, the default is False |
名称 | 说明 | |
---|---|---|
![]() | CloseFileServer |
关闭文件服务功能
|
![]() | DeleteFileByName |
删除一个指定的文件,如果文件不存在,直接返回 True,如果文件存在则直接删除,删除成功返回 True,如果发生了异常,返回False Delete a specified file, if the file does not exist, return True directly, if the file exists, delete it directly, if the deletion is successful, return True, if an exception occurs, return False |
![]() | DeleteRetainTopic |
删除服务器里的指定主题的驻留消息。 Delete the resident message of the specified topic in the server. |
![]() | Dispose | Performs application-defined tasks associated with freeing, releasing, or resetting unmanaged resources. |
![]() | Dispose(Boolean) |
释放当前的对象
|
![]() | Equals | Determines whether the specified object is equal to the current object. (继承自 Object。) |
![]() | ExtraOnClose |
关闭的时候额外执行的功能代码
(重写 CommunicationTcpServerExtraOnClose.) |
![]() | ExtraOnStart |
服务器启动的时候额外执行的功能代码
(重写 CommunicationTcpServerExtraOnStart.) |
![]() | Finalize | Allows an object to try to free resources and perform other cleanup operations before it is reclaimed by garbage collection. (继承自 Object。) |
![]() | GetAllMqttRpcApiInfo |
获取当前所有注册的RPC接口信息,将返回一个数据列表。 Get all currently registered RPC interface information, and a data list will be returned. |
![]() | GetAllRetainTopics |
获取所有的驻留的消息的主题,如果消息发布的时候没有使用Retain属性,就无法通过本方法查到 Get the subject of all resident messages. If the Retain attribute is not used when the message is published, it cannot be found by this method |
![]() | GetGroupFromFilePath |
根据路径信息获取到文件列表管理容器,如果返回空,表示不存在。 The file list management container is obtained according to the path information. If the return is empty, it means that it does not exist. |
![]() | GetHashCode | Serves as the default hash function. (继承自 Object。) |
![]() | GetMonitorItemsSnapShoot |
获取当前实时的文件上传下载的监控信息,操作的客户端信息,文件分类,文件名,上传或下载的速度等 Obtain current real-time file upload and download monitoring information, operating client information, file classification, file name, upload or download speed, etc. |
![]() | GetMqttSessionsByTopic |
获取订阅了某个主题的所有的会话列表信息 Get all the conversation list information subscribed to a topic |
![]() | GetTrustedClients |
获取受信任的客户端列表 (继承自 CommunicationTcpServer。)Get a list of trusted clients |
![]() | GetType | Gets the Type of the current instance. (继承自 Object。) |
![]() | GroupFileContainerCount |
获取当前的针对文件夹的文件管理容器的数量 Get the current number of file management containers for the folder |
![]() | LogDebugMsg |
记录当前的日志信息
(继承自 CommunicationTcpServer。) |
![]() | MemberwiseClone | Creates a shallow copy of the current Object. (继承自 Object。) |
![]() | PublishAllClientTopicPayload |
向所有的客户端强制发送主题及负载数据,默认消息不驻留 Send subject and payload data to all clients compulsively, and the default message does not retain |
![]() | PublishTopicPayload(String, Byte, Boolean) |
从服务器向订阅了指定的主题的客户端发送消息,默认消息不驻留 Sends a message from the server to a client that subscribes to the specified topic; the default message does not retain |
![]() | PublishTopicPayload(MqttSession, String, Byte) |
向指定的客户端发送主题及负载数据 Sends the topic and payload data to the specified client |
![]() | PublishTopicPayload(String, Byte, Boolean, FuncMqttSession, Boolean) |
使用指定的规则向客户端发布主题及负载数据,可以根据会话的登录用户名,客户端ID信息进行筛选,例如只发布用户名admin的账户:( session ) => session.UserName == "admin" Use the specified rules to publish topic and load data to the client, which can be filtered according to the session login user name and client ID information. For example, only the account with the user name admin is published: ( session ) => session.UserName == "admin" |
![]() | PublishTopicPayload(String, String, Byte, Boolean) |
向指定的客户端ID强制发送消息,默认消息不驻留 Forces a message to the specified client ID, and the default message does not retain |
![]() | RegisterMqttRpcApi(Object) |
注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象 Register an RPC service interface, you can specify the current controller name, and the original object that provides the RPC service |
![]() | RegisterMqttRpcApi(String, Object) |
注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象 Register an RPC service interface, you can specify the current controller name, and the original object that provides the RPC service |
![]() | RegisterMqttRpcApi(String, Object, HslMqttPermissionAttribute) |
注册一个RPC的服务接口,可以指定当前的控制器名称,以及提供RPC服务的原始对象,指定统一的权限控制。 Register an RPC service interface, you can specify the current controller name, and the original object that provides the RPC service, Specify unified access control |
![]() | RemoveAndCloseSession |
让MQTT客户端正常下线,调用本方法即可自由控制会话客户端强制下线操作。
|
![]() | ReportObjectApiMethod |
使用指定的对象来返回网络的API接口,前提是传入的数据为json参数,返回的数据为 OperateResult<string> 数据,详细参照说明 Use the specified object to return the API interface of the network, provided that the incoming data is json parameters and the returned data is OperateResult<string> data, please refer to the description for details |
![]() | ReportOperateResult(MqttSession, OperateResultString) |
向客户端发布一个操作结果的信息,仅用于同步网络的时候反馈操作结果,该操作可能成功,可能失败,客户端就知道服务器发生了什么,以及结果如何。 Publish an operation result information to the client, which is only used to feed back the operation result when synchronizing the network. The operation may succeed or fail, and the client knows what happened to the server and the result. |
![]() | ReportOperateResult(MqttSession, String) |
向客户端发布一个失败的操作信息,仅用于同步网络的时候反馈失败结果,将错误的信息反馈回客户端,客户端就知道服务器发生了什么,为什么反馈失败。 Publish a failed operation information to the client, which is only used to feed back the failure result when synchronizing the network. If the error information is fed back to the client, the client will know what happened to the server and why the feedback failed. |
![]() | ReportProgress |
向客户端发布一个进度报告的信息,仅用于同步网络的时候才支持进度报告,将进度及消息发送给客户端,比如你的服务器需要分成5个部分完成,可以按照百分比提示给客户端当前服务器发生了什么 Publish the information of a progress report to the client. The progress report is only supported when the network is synchronized. The progress and the message are sent to the client. For example, your server needs to be divided into 5 parts to complete. You can prompt the client according to the percentage. What happened to the server |
![]() | ReturnAbsoluteFileName |
返回服务器的绝对路径,包含根目录的信息 [Root Dir][A][B][C]...[FileName] 信息
|
![]() | ServerClose |
关闭服务器的引擎 (继承自 CommunicationTcpServer。)Shut down the server's engine |
![]() | ServerStart |
指定端口号来启动服务器的引擎 (继承自 CommunicationTcpServer。)Specify the port number to start the server's engine |
![]() | ServerStart(Int32) |
指定端口号来启动服务器的引擎 (继承自 CommunicationTcpServer。)Specify the port number to start the server's engine |
![]() | SetSslPipeAction |
设置一个SSL的管道操作对象,在管道实例化之后,可以进行一些初始化的属性设置,例如自定义 SslProtocols 枚举 (继承自 CommunicationTcpServer。) |
![]() | SetTrustedIpAddress |
设置并启动受信任的客户端登录并读写,如果为null,将关闭对客户端的ip验证 (继承自 CommunicationTcpServer。)Set and start the trusted client login and read and write, if it is null, the client's IP verification will be turned off |
![]() | SocketAcceptExtraCheck |
当客户端的socket登录的时候额外检查的操作,并返回操作的结果信息。 (继承自 CommunicationTcpServer。)The operation is additionally checked when the client's socket logs in, and the result information of the operation is returned. |
![]() | ThreadPoolLogin |
当客户端连接到服务器,并听过额外的检查后,进行回调的方法 (重写 CommunicationTcpServerThreadPoolLogin(PipeTcpNet, IPEndPoint).)Callback method when the client connects to the server and has heard additional checks |
![]() | ToString | Returns a string that represents the current object. (重写 ObjectToString.) |
![]() | UnRegisterHttpRpcApiSingle |
卸载一个指定的RPC接口,需要指定唯一的接口名称,如果接口重命名了,需要使用实际访问的时候的接口名称,返回是否成功卸载接口 To uninstall a specified RPC interface, you need to specify a unique interface name. If the interface is renamed, you need to use the interface name during the actual access, and return whether the interface is successfully uninstalled |
![]() | UnRegisterMqttRpcApi(Object) |
卸载一个已经注册的RPC接口,想要卸载指定的接口,此处就需要传入注册时一样的参数 Uninstall a registered RPC interface. If you want to uninstall the specified interface, you need to pass in the same parameters as the registration |
![]() | UnRegisterMqttRpcApi(String, Object) |
卸载一个已经注册的RPC接口,想要卸载指定的接口,此处就需要传入注册时一样的参数 Uninstall a registered RPC interface. If you want to uninstall the specified interface, you need to pass in the same parameters as the registration |
![]() | UseFileServer |
启动文件服务功能,协议头为FILE,需要指定服务器存储的文件路径 Start the file service function, the protocol header is FILE, you need to specify the file path stored by the server |
![]() | UseSSL(X509Certificate) |
使用SSL通信,传递一个证书的对象
(继承自 CommunicationTcpServer。) |
![]() | UseSSL(String, String) |
使用SSL通信,传递一个证书的路径,以及证书的密码
(继承自 CommunicationTcpServer。) |
名称 | 说明 | |
---|---|---|
![]() | ClientVerification |
当客户端连接时,触发的验证事件 Validation event triggered when the client connects |
![]() | FileOperateVerification |
当客户端进行文件操作时,校验客户端合法性的事件,操作码具体查看的常量值 When client performing file operations, it is an event to verify the legitimacy of the client. For the operation code, check the constant value of |
![]() | OnClientApplicationMessageReceive |
当收到客户端发来的MqttClientApplicationMessage消息时触发 Triggered when a MqttClientApplicationMessage message is received from the client |
![]() | OnClientConnected |
Mqtt的客户端连接上来时触发 Triggered when Mqtt client connects |
![]() | OnClientDisConnected |
Mqtt的客户端下线时触发 Triggered when Mqtt client connects |
![]() | OnFileChangedEvent |
文件变化的事件,当文件上传的时候,文件下载的时候,文件被删除的时候触发。 The file change event is triggered when the file is uploaded, when the file is downloaded, or when the file is deleted. |
名称 | 说明 | |
---|---|---|
![]() | socketServer |
核心的socket服务器
(继承自 CommunicationTcpServer。) |
名称 | 说明 | |
---|---|---|
![]() | ToJsonString |
获取当前对象的JSON格式表示的字符串。 (由 HslExtension 定义。)Gets the string represented by the JSON format of the current object. |
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 4; // 返回错误码说明 Return error code description // 1: unacceptable protocol version // 2: identifier rejected // 3: server unavailable // 4: bad user name or password // 5: not authorized }; server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }
server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") { session.ClientId = "admin"; return 0; } if (userName == "hsl" && passwrod == "123456") { session.ClientId = "GM"; return 0; } // 也可以写入中文总经理,方便后续其他接口的权限限制 return 4; // 返回错误码说明 Return error code description // 1: unacceptable protocol version // 2: identifier rejected // 3: server unavailable // 4: bad user name or password // 5: not authorized };
server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") { return 0; } // admin 账户允许发布 admin Account allows posting if (userName == "hsl" && passwrod == "123456") { session.ForbidPublishTopic = true; return 0; } // 禁止发布 Prohibit posting return 4; // 其他账户不允许登录 Other accounts are not allowed to log in // 返回错误码说明 Return error code description // 1: unacceptable protocol version // 2: identifier rejected // 3: server unavailable // 4: bad user name or password // 5: not authorized };
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 4; }; server.OnClientApplicationMessageReceive += ( MqttSession session, MqttClientApplicationMessage message ) => { // 此处举例是打印,当然了,你也可以做一些其他的处理,当所有的客户端进行发布操作的时候,就会触发当前的方法 // The example here is printing. Of course, you can also do some other processing. When all clients perform publishing operations, the current method will be triggered. Console.WriteLine( $"ClientId:[{message.ClientId}] Topic:[{message.Topic}] Payload: {Encoding.UTF8.GetString( message.Payload )}" ); // 如果你想阻止当前的消息推送给客户端,那么可以按照下面的操作 // If you want to prevent the current message from being pushed to the client, then you can follow message.IsCancelPublish = true; }; server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 5; }; server.OnClientApplicationMessageReceive += ( MqttSession session, MqttClientApplicationMessage message ) => { // 此处举例是打印,当然了,你也可以做一些其他的处理,当所有的客户端进行发布操作的时候,就会触发当前的方法 // The example here is printing. Of course, you can also do some other processing. When all clients perform publishing operations, the current method will be triggered. Console.WriteLine( $"ClientId:[{message.ClientId}] Topic:[{message.Topic}] Payload: {Encoding.UTF8.GetString( message.Payload )}" ); // 如果你想阻止当前的消息推送给客户端,那么可以按照下面的操作 // If you want to prevent the current message from being pushed to the client, then you can follow message.IsCancelPublish = true; }; server.OnClientConnected += ( MqttSession session ) => { // 当客户端连接上服务器的时候触发,你可以做一些额外的数据处理,或是情况处理。比如发送一条消息出去 // Triggered when the client connects to the server, you can do some additional data processing or situation processing. Such as sending a message out server.PublishTopicPayload( session, "Online", Encoding.UTF8.GetBytes( "Thank you for use hsl" ) ); }; server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }
public void button1_Click( object sender, EventArgs e ) { // 此处示例是发布给指定的主题 // The example here is posted to the specified topic server.PublishTopicPayload( "Topic", Encoding.UTF8.GetBytes( "Test Data" ) ); // 此处示例是发布给指定的clientId // The example here is posted to the specified clientId server.PublishTopicPayload( "ClientId1", "Topic", Encoding.UTF8.GetBytes( "Test Data" ) ); // 此处的示例是发布给所有的客户端,不管这个客户端有没有订阅相关的主题 // The example here is published to all clients, regardless of whether the client is subscribed to related topics server.PublishAllClientTopicPayload( "Topic", Encoding.UTF8.GetBytes( "Test Data" ) ); // 如果要消息驻留,意思就是当其他的客户端订阅了驻留的主题,会立即收到一条最后更新的数据内容,那么上面的代码可以修改成下面的形式 // If you want the message to reside, it means that when other clients subscribe to the resident topic, they will immediately receive a last updated data content, then the above code can be modified into the following form server.PublishTopicPayload( "Topic", Encoding.UTF8.GetBytes( "Test Data" ), true ); server.PublishTopicPayload( "ClientId1", "Topic", Encoding.UTF8.GetBytes( "Test Data" ), true ); server.PublishAllClientTopicPayload( "Topic", Encoding.UTF8.GetBytes( "Test Data" ), true ); }
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 4; }; server.OnClientApplicationMessageReceive += ( MqttSession session, MqttClientApplicationMessage message ) => { if (session.Protocol == "MQTT") { // 正常的MQTT协议的内容,进行发布订阅操作 // 此处举例是打印,当然了,你也可以做一些其他的处理,当所有的客户端进行发布操作的时候,就会触发当前的方法 // The example here is printing. Of course, you can also do some other processing. When all clients perform publishing operations, the current method will be triggered. Console.WriteLine( $"ClientId:[{message.ClientId}] Topic:[{message.Topic}] Payload: {Encoding.UTF8.GetString( message.Payload )}" ); // 如果你想阻止当前的消息推送给客户端,那么可以按照下面的操作 // If you want to prevent the current message from being pushed to the client, then you can follow message.IsCancelPublish = true; } else { // 同步网络的情况,正常情况都是需要返回信息的,否则客户端就会引发接收超时的异常 // In the case of synchronous network, the normal situation is to return information, otherwise the client will cause an exception of receiving timeout if (message.Topic == "GetA") { server.PublishTopicPayload( session, "Success", Encoding.UTF8.GetBytes( "这是你获取的数据A" ) ); } else if (message.Topic == "GetB") { server.PublishTopicPayload( session, "Success", Encoding.UTF8.GetBytes( "这是你获取的数据B" ) ); } else { // 如果需要返回错误的信息,客户端直接IsSuccess为False,然后这个Message就是下面的字符串 // If you need to return wrong information, the client directly IsSuccess is False, and then this Message is the following string server.ReportOperateResult( session, "当前的操作不支持" ); } } }; server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }
MqttServer server; SiemensS7Net siemens; public void Start( ) { try { siemens = new SiemensS7Net( SiemensPLCS.S1200, "127.0.0.1" ); server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 4; }; server.OnClientApplicationMessageReceive += ( MqttSession session, MqttClientApplicationMessage message ) => { if (session.Protocol == "MQTT") { // 正常的MQTT协议的内容,进行发布订阅操作 // 此处举例是打印,当然了,你也可以做一些其他的处理,当所有的客户端进行发布操作的时候,就会触发当前的方法 // The example here is printing. Of course, you can also do some other processing. When all clients perform publishing operations, the current method will be triggered. Console.WriteLine( $"ClientId:[{message.ClientId}] Topic:[{message.Topic}] Payload: {Encoding.UTF8.GetString( message.Payload )}" ); // 如果你想阻止当前的消息推送给客户端,那么可以按照下面的操作 // If you want to prevent the current message from being pushed to the client, then you can follow message.IsCancelPublish = true; } else { // 同步网络的情况,正常情况都是需要返回信息的,否则客户端就会引发接收超时的异常 // In the case of synchronous network, the normal situation is to return information, otherwise the client will cause an exception of receiving timeout if (message.Topic == "GetA") { server.PublishTopicPayload( session, "Success", Encoding.UTF8.GetBytes( "这是你获取的数据A" ) ); } else if (message.Topic == "GetB") { server.PublishTopicPayload( session, "Success", Encoding.UTF8.GetBytes( "这是你获取的数据B" ) ); } else { // 如果需要返回错误的信息,客户端直接IsSuccess为False,然后这个Message就是下面的字符串 // If you need to return wrong information, the client directly IsSuccess is False, and then this Message is the following string server.ReportOperateResult( session, "当前的操作不支持" ); } } }; // 注册当前的服务,当下面所有的带特性HslMqttApi的方法都暴露出来,其中,设备温度仅支持admin账户设定 // Register the current service, when all the following methods with characteristic HslMqttApi are exposed, // the device temperature only supports the admin account setting server.RegisterMqttRpcApi( this ); server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } } [HslMqttApi( "启动设备" )] public OperateResult StartDevice( ) => siemens.Write( "M100.0", true ); [HslMqttApi( "停止设备" )] public OperateResult StopDevice( ) => siemens.Write( "M100.0", false ); [HslMqttApi( "设置设备的温度信息,当设备处于非工作状态才有效,仅允许admin账户设置" )] [HslMqttPermission( UserName = "admin" )] public OperateResult SetTemperature( float temp ) { // 此处假设设置PLC的温度,当设备停止的时候才能设备 var check = siemens.ReadBool( "M100.0" ).Check( m => m == false, "当前的设备状态在运行中,无法设置!" ); if (!check.IsSuccess) return OperateResult.CreateFailedResult<string>( check ); return siemens.Write( "M200", temp ); } [HslMqttApi( "读取设备的温度信息" )] public OperateResult<float> ReadTemperature( ) => siemens.ReadFloat( "M200" );
MqttServer server; public void Start( ) { try { server = new MqttServer( ); server.ClientVerification += ( MqttSession session, string clientId, string userName, string passwrod ) => { if (userName == "admin" && passwrod == "123456") return 0; return 4; // 返回错误码说明 Return error code description // 1: unacceptable protocol version // 2: identifier rejected // 3: server unavailable // 4: bad user name or password // 5: not authorized }; // 启用文件管理服务 Enable file management service server.UseFileServer( System.IO.Path.Combine( AppDomain.CurrentDomain.BaseDirectory, "FileServer" ) ); // 如果需要启用文件管理的权限,就编写 FileOperateVerification 事件 server.FileOperateVerification += ( MqttSession session, byte code, string[] groups, string[] fileNames ) => { // 此处举个例子,如果用户名为空,不允许删除操作,当然了,你可以自定义任何的规则 if (string.IsNullOrEmpty( session.UserName )) { if (code == MqttControlMessage.FileDelete) return new OperateResult( "Null name not allowed delete!" ); } return OperateResult.CreateSuccessResult( ); }; server.ServerStart( 1883 ); } catch (Exception ex) { Console.WriteLine( "Start Failed: " + ex.Message ); } }