diff --git a/Sln.Iot.CFX/CFXConnect.cs b/Sln.Iot.CFX/CFXConnect.cs deleted file mode 100644 index 3ec679c..0000000 --- a/Sln.Iot.CFX/CFXConnect.cs +++ /dev/null @@ -1,34 +0,0 @@ -using CFX; -using CFX.Transport; - -namespace Sln.Iot.CFX -{ - /// - /// CFX接口连接类 - /// - public class CFXConnect - { - public AmqpCFXEndpoint Endpoint; - - public CFXConnect() - { - OpenEndpoint(); - } - - public void OpenEndpoint() - { - try - { - Endpoint = new AmqpCFXEndpoint(); - - Endpoint.Open("CFX.S00.OT23022701", new Uri("amqp://")); - - Endpoint.AddPublishChannel(new Uri("amqp://"), "eventAddress"); - } - catch (Exception e) - { - - } - } - } -} diff --git a/Sln.Iot.CFX/CFXHelper.cs b/Sln.Iot.CFX/CFXHelper.cs new file mode 100644 index 0000000..842ade8 --- /dev/null +++ b/Sln.Iot.CFX/CFXHelper.cs @@ -0,0 +1,120 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX +* 唯一标识:B906AE83-E238-4BF5-A269-1A48D38158CC +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:26:56 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using System.Diagnostics; +using CFX; +using CFX.Production; +using CFX.ResourcePerformance; +using CFX.Structures; +using CFX.Transport; +using Sln.Iot.CFX.RequestReceived; + +namespace Sln.Iot.CFX; + +/// +/// +/// +public class CFXHelper +{ + private readonly AmqpCFXEndpoint? _endpoint; + + public CFXHelper(AmqpCFXEndpoint endpoint) + { + _endpoint = endpoint; + + } + + public void Init(string cfxHandle,Uri uri,string address) + { + try + { + if (_endpoint == null) + { + throw new ArgumentNullException($"AmqpCFXEndpoint is null"); + } + + _endpoint.Open(cfxHandle, uri); + + _endpoint.AddPublishChannel(uri, address); + + _endpoint.OnRequestReceived -= Endpoint_OnRequestReceived; + _endpoint.OnRequestReceived += Endpoint_OnRequestReceived; + } + catch (Exception e) + { + throw new InvalidOperationException($"CFX 接口初始化异常:{ e.Message}"); + } + } + + private CFXEnvelope Endpoint_OnRequestReceived(CFXEnvelope request) + { + CFXMessage response = null; + + if (request.MessageBody is AreYouThereRequest) + { + AreYouThereRequestReceived.Handle(request.MessageBody as AreYouThereRequest,out response); + }else if (request.MessageBody is GetEndpointInformationRequest) + { + GetEndpointInformationRequestReceived.Handle(request.MessageBody as GetEndpointInformationRequest,out response); + }else if (request.MessageBody is WhoIsThereRequest) + { + WhoIsThereRequestReceived.Handle(request.MessageBody as WhoIsThereRequest,out response); + }else if (request.MessageBody is GetActiveRecipeRequest) + { + GetActiveRecipeRequestReceived.Handle(request.MessageBody as GetActiveRecipeRequest,out response); + }else if (request.MessageBody is GetActiveFaultsRequest) + { + GetActiveFaultsRequestReceived.Handle(request.MessageBody as GetActiveFaultsRequest,out response); + }else if (request.MessageBody is HandleFaultRequest) + { + HandleFaultRequestReceived.Handle(request.MessageBody as HandleFaultRequest,out response); + } + + CFXEnvelope env = new CFXEnvelope(response); + return env; + } + + /// + /// 主动推送事件 + /// + /// + public void PublishEvent(CFXEnvelope env) + { + + try + { + if (_endpoint == null) + { + throw new ArgumentNullException($"AmqpCFXEndpoint is null"); + } + + _endpoint.Publish(env); + } + catch (Exception e) + { + throw new InvalidOperationException($"推送事件异常:{ e.Message}"); + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs new file mode 100644 index 0000000..1b6de18 --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/AreYouThereRequestReceived.cs @@ -0,0 +1,75 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX.CoreCommunications +* 唯一标识:8D142D51-E08D-42FC-8C59-4551A1B36306 +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 14:58:25 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.1.1-端点在位查询请求 +/// AreYouThereRequest/Response +/// +public class AreYouThereRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(AreYouThereRequest request,out CFXMessage response) + { + // + try + { + response = new AreYouThereResponse() + { + Result = new RequestResult() + { + Result = StatusResult.Success, + ResultCode = 0, + Message = "", + }, + + CFXHandle = "CFX.S07.E022012702", + RequestNetworkUri = "amqp://host33/", + RequestTargetAddress = "/queue/SN23123", + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs new file mode 100644 index 0000000..a10110a --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/GetActiveFaultsRequestReceived.cs @@ -0,0 +1,66 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX +* 唯一标识:CB14024A-08C4-4FF4-BD6C-8E8667D00263 +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:23:00 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.ResourcePerformance; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.4.1.5 - 查询当前有无错误 +/// GetActiveFaultsRequest/Response +/// +public class GetActiveFaultsRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(GetActiveFaultsRequest request, out CFXMessage response) + { + try + { + response = new GetActiveFaultsResponse() + { + + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs new file mode 100644 index 0000000..044d21a --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/GetActiveRecipeRequestReceived.cs @@ -0,0 +1,66 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX +* 唯一标识:686D7EAB-9E42-43B2-B990-AF162E76F781 +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:18:38 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.Production; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.3.1.3 - 获取激活配方请求 +/// GetActiveRecipeRequest/Response +/// +public class GetActiveRecipeRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(GetActiveRecipeRequest request, out CFXMessage response) + { + try + { + response = new GetActiveRecipeResponse() + { + + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs new file mode 100644 index 0000000..ed7ef9c --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/GetEndpointInformationRequestReceived.cs @@ -0,0 +1,65 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX.CoreCommunications +* 唯一标识:4063233D-BE40-415F-B28C-EBA14C47EA52 +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:00:21 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.1.4 - 获取端点信息请求 +/// GetEndpointInformationRequest/Response +/// +public class GetEndpointInformationRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(GetEndpointInformationRequest request, out CFXMessage response) + { + try + { + response = new GetEndpointInformationResponse() + { + + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs new file mode 100644 index 0000000..ea8169c --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/HandleFaultRequestReceived.cs @@ -0,0 +1,66 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX +* 唯一标识:F3C2C0B6-F8E7-4869-B396-291233785B23 +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:20:11 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.ResourcePerformance; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.4.1.4 - 处理故障请求 +/// HandleFaultRequest/Response +/// +public class HandleFaultRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(HandleFaultRequest request, out CFXMessage response) + { + try + { + response = new HandleFaultResponse() + { + + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file diff --git a/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs b/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs new file mode 100644 index 0000000..17008dd --- /dev/null +++ b/Sln.Iot.CFX/RequestReceived/WhoIsThereRequestReceived.cs @@ -0,0 +1,65 @@ +#region << 版 本 注 释 >> + +/*-------------------------------------------------------------------- +* 版权所有 (c) 2025 WenJY 保留所有权利。 +* CLR版本:4.0.30319.42000 +* 机器名称:Mr.Wen's MacBook Pro +* 命名空间:Sln.Iot.CFX.CoreCommunications +* 唯一标识:8E7C0E19-8462-42CA-AC22-F89BF2927C6A +* +* 创建者:WenJY +* 电子邮箱: +* 创建时间:2025-10-24 15:00:54 +* 版本:V1.0.0 +* 描述: +* +*-------------------------------------------------------------------- +* 修改人: +* 时间: +* 修改说明: +* +* 版本:V1.0.0 +*--------------------------------------------------------------------*/ + +#endregion << 版 本 注 释 >> + +using CFX; +using CFX.Structures; + +namespace Sln.Iot.CFX.RequestReceived; + +/// +/// 5.4.1.5 - 广播查询请求 +/// WhoIsThereRequest/Response +/// +public class WhoIsThereRequestReceived +{ + /// + /// + /// + /// + /// + public static void Handle(WhoIsThereRequest request, out CFXMessage response) + { + try + { + response = new WhoIsThereResponse() + { + + }; + } + catch (Exception e) + { + //无法响应时上传NotSupportedResponse + response = new NotSupportedResponse() + { + RequestResult = new RequestResult() + { + Result = StatusResult.Failed, + ResultCode = 0, + Message = e.Message + } + }; + } + } +} \ No newline at end of file