diff --git a/WWCP_OCPPv2.1/Extensions/BinaryStreamsExtensions/Messages/BinaryDataTransferRequest.cs b/WWCP_OCPPv2.1/Extensions/BinaryStreamsExtensions/Messages/BinaryDataTransferRequest.cs index 6917f7c98..a4288d52f 100644 --- a/WWCP_OCPPv2.1/Extensions/BinaryStreamsExtensions/Messages/BinaryDataTransferRequest.cs +++ b/WWCP_OCPPv2.1/Extensions/BinaryStreamsExtensions/Messages/BinaryDataTransferRequest.cs @@ -165,11 +165,17 @@ this.Format. GetHashCode() * 3 ^ /// The request identification. /// The charging station/networking node identification. /// The network path of the request. + /// An optional request timestamp. + /// An optional request timeout. + /// An optional event tracking identification for correlating this request with other events. /// An optional delegate to parse custom BinaryDataTransfer requests. public static BinaryDataTransferRequest Parse(Byte[] Binary, Request_Id RequestId, NetworkingNode_Id DestinationId, NetworkPath NetworkPath, + DateTime? RequestTimestamp = null, + TimeSpan? RequestTimeout = null, + EventTracking_Id? EventTrackingId = null, CustomBinaryParserDelegate? CustomDataTransferRequestParser = null) { @@ -179,6 +185,9 @@ public static BinaryDataTransferRequest Parse(Byte[] NetworkPath, out var binaryDataTransferRequest, out var errorResponse, + RequestTimestamp, + RequestTimeout, + EventTrackingId, CustomDataTransferRequestParser)) { return binaryDataTransferRequest; @@ -202,6 +211,9 @@ public static BinaryDataTransferRequest Parse(Byte[] /// The network path of the request. /// The parsed BinaryDataTransfer request. /// An optional error response. + /// An optional request timestamp. + /// An optional request timeout. + /// An optional event tracking identification for correlating this request with other events. /// An optional delegate to parse custom BinaryDataTransfer requests. public static Boolean TryParse(Byte[] Binary, Request_Id RequestId, @@ -209,6 +221,9 @@ public static Boolean TryParse(Byte[] NetworkPath NetworkPath, [NotNullWhen(true)] out BinaryDataTransferRequest? BinaryDataTransferRequest, [NotNullWhen(false)] out String? ErrorResponse, + DateTime? RequestTimestamp = null, + TimeSpan? RequestTimeout = null, + EventTracking_Id? EventTrackingId = null, CustomBinaryParserDelegate? CustomBinaryDataTransferRequestParser = null) { @@ -317,9 +332,9 @@ public static Boolean TryParse(Byte[] null, //signatures, RequestId, - null, - null, - null, + RequestTimestamp, + RequestTimeout, + EventTrackingId, NetworkPath ); diff --git a/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs deleted file mode 100644 index 175c2e568..000000000 --- a/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Copyright (c) 2014-2024 GraphDefined GmbH - * This file is part of WWCP OCPP - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#region Usings - -using org.GraphDefined.Vanaheimr.Hermod; -using org.GraphDefined.Vanaheimr.Hermod.WebSocket; - -using cloud.charging.open.protocols.OCPP; -using cloud.charging.open.protocols.OCPPv2_1.WebSockets; - -#endregion - -namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode -{ - - /// - /// An incoming BinaryDataTransfer request. - /// - /// The timestamp of the request. - /// The sender of the request. - /// The HTTP Web Socket connection. - /// The BinaryDataTransfer request. - public delegate Task - - OnBinaryDataTransferRequestReceivedDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request); - - - /// - /// An incoming binary data transfer from the given charging station. - /// - /// The timestamp of the request. - /// The sender of the request. - /// The HTTP Web Socket connection. - /// The BinaryDataTransfer request. - /// A token to cancel this request. - public delegate Task - - OnBinaryDataTransferDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request, - CancellationToken CancellationToken); - - - - -} diff --git a/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/DataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/DataTransfer.cs deleted file mode 100644 index a5d9ee096..000000000 --- a/WWCP_OCPPv2.1/NetworkingNode/Messages/IncomingMessages/DataTransfer.cs +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Copyright (c) 2014-2024 GraphDefined GmbH - * This file is part of WWCP OCPP - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#region Usings - -using org.GraphDefined.Vanaheimr.Hermod; -using org.GraphDefined.Vanaheimr.Hermod.WebSocket; - -#endregion - -namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode -{ - - /// - /// A received DataTransfer request. - /// - /// The timestamp of the DataTransfer request. - /// The sender of the DataTransfer request. - /// The HTTP WebSocket server connection. - /// The DataTransfer request. - public delegate Task - - OnDataTransferRequestReceivedDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - DataTransferRequest Request); - - - /// - /// Process a received DataTransfer request. - /// - /// The timestamp of the DataTransfer request. - /// The sender of the DataTransfer request. - /// The HTTP WebSocket server connection. - /// The DataTransfer request. - /// A token to cancel this request. - public delegate Task - - OnDataTransferDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - DataTransferRequest Request, - CancellationToken CancellationToken); - - - /// - /// A sent DataTransfer response. - /// - /// The timestamp of the DataTransfer request. - /// The sender of the DataTransfer request. - /// The HTTP WebSocket server connection. - /// The DataTransfer request. - /// The DataTransfer response. - /// The runtime of the request. - public delegate Task - - OnDataTransferResponseSentDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - DataTransferRequest Request, - DataTransferResponse Response, - TimeSpan Runtime); - -} diff --git a/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs deleted file mode 100644 index 5f282702b..000000000 --- a/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/BinaryDataStreamsExtensions/BinaryDataTransfer.cs +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/DataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/DataTransfer.cs deleted file mode 100644 index 5b3599991..000000000 --- a/WWCP_OCPPv2.1/NetworkingNode/Messages/OutgoingMessages/DataTransfer.cs +++ /dev/null @@ -1,58 +0,0 @@ -/* - * Copyright (c) 2014-2024 GraphDefined GmbH - * This file is part of WWCP OCPP - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#region Usings - -using org.GraphDefined.Vanaheimr.Hermod; -using org.GraphDefined.Vanaheimr.Hermod.WebSocket; - -using cloud.charging.open.protocols.OCPPv2_1.WebSockets; - -#endregion - -namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode -{ - - /// - /// A delegate called whenever a DataTransfer request was sent. - /// - /// The timestamp of the request logging. - /// The sender of the request. - /// The connection of the request. - /// The request. - /// The result of the send message process. - public delegate Task OnDataTransferRequestSentDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - DataTransferRequest Request, - SentMessageResults SendMessageResult); - - /// - /// A delegate called whenever a response to a DataTransfer request was received. - /// - /// The timestamp of the response logging. - /// The sender of the request/response. - /// The request. - /// The response. - /// The runtime of the request/response. - public delegate Task OnDataTransferResponseReceivedDelegate(DateTime Timestamp, - IEventSender Sender, - DataTransferRequest Request, - DataTransferResponse Response, - TimeSpan Runtime); - -} diff --git a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Forwarding/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Forwarding/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs index 17f421d98..210804445 100644 --- a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Forwarding/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs +++ b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Forwarding/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs @@ -94,6 +94,9 @@ public async Task BinaryRequestMessage.NetworkPath, out var request, out var errorResponse, + BinaryRequestMessage.RequestTimestamp, + BinaryRequestMessage.RequestTimeout - Timestamp.Now, + BinaryRequestMessage.EventTrackingId, parentNetworkingNode.OCPP.CustomBinaryDataTransferRequestParser)) { return ForwardingDecision.REJECT(errorResponse); diff --git a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs index 0b0dc164d..8452aa8e8 100644 --- a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs +++ b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs @@ -22,60 +22,116 @@ using org.GraphDefined.Vanaheimr.Hermod.WebSocket; using cloud.charging.open.protocols.OCPPv2_1.WebSockets; -using cloud.charging.open.protocols.OCPPv2_1.CS; -using Org.BouncyCastle.Asn1.Ocsp; #endregion namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode { - #region Delegates + #region Logging Delegates /// - /// An incoming binary data transfer response. + /// A logging delegate called whenever a BinaryDataTransfer request was received. /// - /// The timestamp of the request. + /// The logging timestamp. /// The sender of the request. - /// The HTTP Web Socket connection. + /// The connection of the request. /// The BinaryDataTransfer request. - /// The stop transaction response. - /// The runtime of the request. + /// An optional cancellation token. public delegate Task - OnBinaryDataTransferResponseSentDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request, - BinaryDataTransferResponse Response, - TimeSpan Runtime); + OnBinaryDataTransferRequestReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest Request, + CancellationToken CancellationToken = default); /// - /// An incoming binary data transfer response. + /// A logging delegate called whenever a BinaryDataTransfer response was received. /// - /// The timestamp of the request. + /// The logging timestamp. + /// The sender of the response. + /// The connection of the response. + /// The optional request. + /// The response. + /// The optional runtime of the request/response pair. + /// An optional cancellation token. + public delegate Task OnBinaryDataTransferResponseReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + BinaryDataTransferResponse Response, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); + + + /// + /// A logging delegate called whenever a BinaryDataTransfer request error was received. + /// + /// The logging timestamp. /// The sender of the request. - /// The HTTP Web Socket connection. - /// The optional BinaryDataTransfer request. - /// The RequestErrorMessage. - /// The runtime of the request. - public delegate Task + /// The connection of the request. + /// The optional request. + /// The request error. + /// The optional runtime of the request/request error pair. + /// An optional cancellation token. + public delegate Task OnBinaryDataTransferRequestErrorReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + OCPP_BinaryRequestErrorMessage RequestErrorMessage, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); - OnBinaryDataTransferRequestErrorSentDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest? Request, - OCPP_JSONRequestErrorMessage RequestErrorMessage, - TimeSpan Runtime); + + /// + /// A logging delegate called whenever a BinaryDataTransfer response error was received. + /// + /// The logging timestamp. + /// The sender of the response error. + /// The connection of the response error. + /// The optional request. + /// The optional response. + /// The ResponseErrorMessage. + /// The optional runtime of the request. + /// An optional cancellation token. + public delegate Task OnBinaryDataTransferResponseErrorReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + BinaryDataTransferResponse? Response, + OCPP_BinaryResponseErrorMessage ResponseErrorMessage, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); #endregion + /// + /// A delegate called whenever a BinaryDataTransfer response is expected + /// for a received BinaryDataTransfer request. + /// + /// The logging timestamp. + /// The sender of the request. + /// The connection of the request. + /// The BinaryDataTransfer request. + /// An optional cancellation token. + public delegate Task + + OnBinaryDataTransferDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest Request, + CancellationToken CancellationToken = default); + + public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN { - #region Events + // Wired via reflection! + + #region Receive BinaryDataTransferRequest /// /// An event sent whenever a BinaryDataTransfer request was received. @@ -87,9 +143,6 @@ public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN /// public event OnBinaryDataTransferDelegate? OnBinaryDataTransfer; - #endregion - - #region Receive BinaryDataTransferRequest (wired via reflection!) public async Task @@ -115,6 +168,9 @@ public async Task NetworkPath, out var request, out var errorResponse, + RequestTimestamp, + parentNetworkingNode.OCPP.DefaultRequestTimeout, + EventTrackingId, parentNetworkingNode.OCPP.CustomBinaryDataTransferRequestParser)) { BinaryDataTransferResponse? response = null; @@ -155,7 +211,8 @@ await Task.WhenAll( Timestamp.Now, parentNetworkingNode, WebSocketConnection, - request + request, + CancellationToken )) ); @@ -183,11 +240,13 @@ await HandleErrors( var responseTasks = OnBinaryDataTransfer?. GetInvocationList()?. - SafeSelect(subscriber => (subscriber as OnBinaryDataTransferDelegate)?.Invoke(Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - request, - CancellationToken)). + SafeSelect(subscriber => (subscriber as OnBinaryDataTransferDelegate)?.Invoke( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + request, + CancellationToken + )). ToArray(); response = responseTasks?.Length > 0 @@ -284,106 +343,241 @@ await HandleErrors( #endregion - } - - public partial class OCPPWebSocketAdapterOUT : IOCPPWebSocketAdapterOUT - { - - #region Send OnBinaryDataTransferResponseSent event + #region Receive BinaryDataTransferResponse /// - /// An event sent whenever a response to an incoming BinaryDataTransfer request was sent. + /// An event fired whenever a BinaryDataTransfer response was received. /// - public event OnBinaryDataTransferResponseSentDelegate? OnBinaryDataTransferResponseSent; - - public async Task SendOnBinaryDataTransferResponseSent(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request, - BinaryDataTransferResponse Response, - TimeSpan Runtime) + public event OnBinaryDataTransferResponseReceivedDelegate? OnBinaryDataTransferResponseReceived; + + + public async Task + + Receive_BinaryDataTransferResponse(BinaryDataTransferRequest Request, + Byte[] ResponseBytes, + IWebSocketConnection WebSocketConnection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) + { - var logger = OnBinaryDataTransferResponseSent; - if (logger is not null) + var response = BinaryDataTransferResponse.Failed(Request); + + try { - try - { - - await Task.WhenAll( - logger.GetInvocationList(). - OfType(). - Select(filterDelegate => filterDelegate.Invoke( - Timestamp, - Sender, - Connection, - Request, - Response, - Runtime - )) - ); - } - catch (Exception e) - { - await HandleErrors( - nameof(OCPPWebSocketAdapterOUT), - nameof(OnBinaryDataTransferResponseSent), - e + if (BinaryDataTransferResponse.TryParse(Request, + ResponseBytes, + DestinationId, + NetworkPath, + out response, + out var errorResponse, + ResponseTimestamp, + parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseParser)) { + + parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( + response, + response.ToBinary( + parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseSerializer, + parentNetworkingNode.OCPP.CustomStatusInfoSerializer, + parentNetworkingNode.OCPP.CustomBinarySignatureSerializer, + IncludeSignatures: true + ), + out errorResponse + ); + + #region Send OnBinaryDataTransferResponseReceived event + + await LogEvent( + OnBinaryDataTransferResponseReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + Request, + response, + response.Runtime, + CancellationToken + ) ); + + #endregion + } + else + response = new BinaryDataTransferResponse( + Request, + Result.Format(errorResponse) + ); + + } + catch (Exception e) + { + + response = new BinaryDataTransferResponse( + Request, + Result.FromException(e) + ); + } + return response; + } #endregion - #region Send OnBinaryDataTransferRequestErrorSent event + #region Receive BinaryDataTransferRequestError /// - /// An event sent whenever a RequestError to an incoming BinaryDataTransfer request was sent. + /// An event fired whenever a BinaryDataTransfer request error was received. /// - public event OnBinaryDataTransferRequestErrorSentDelegate? OnBinaryDataTransferRequestErrorSent; - - public async Task SendOnBinaryDataTransferRequestErrorSent(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest? Request, - OCPP_JSONRequestErrorMessage RequestErrorMessage, - TimeSpan Runtime) + public event OnBinaryDataTransferRequestErrorReceivedDelegate? BinaryDataTransferRequestErrorReceived; + + + public async Task + + Receive_BinaryDataTransferRequestError(BinaryDataTransferRequest Request, + OCPP_BinaryRequestErrorMessage RequestErrorMessage, + IWebSocketConnection Connection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) { - var logger = OnBinaryDataTransferRequestErrorSent; - if (logger is not null) - { - try - { - - await Task.WhenAll( - logger.GetInvocationList(). - OfType(). - Select(filterDelegate => filterDelegate.Invoke( - Timestamp, - Sender, - Connection, - Request, - RequestErrorMessage, - Runtime - )) - ); + //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( + // response, + // response.ToJSON( + // parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenInfoSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenSerializer, + // parentNetworkingNode.OCPP.CustomAdditionalInfoSerializer, + // parentNetworkingNode.OCPP.CustomMessageContentSerializer, + // parentNetworkingNode.OCPP.CustomTransactionLimitsSerializer, + // parentNetworkingNode.OCPP.CustomSignatureSerializer, + // parentNetworkingNode.OCPP.CustomCustomDataSerializer + // ), + // out errorResponse + //); + + #region Send BinaryDataTransferRequestErrorReceived event + + await LogEvent( + BinaryDataTransferRequestErrorReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + RequestErrorMessage, + RequestErrorMessage.ResponseTimestamp - Request.RequestTimestamp, + CancellationToken + ) + ); + + #endregion + + + var response = BinaryDataTransferResponse.RequestError( + Request, + RequestErrorMessage.EventTrackingId, + RequestErrorMessage.ErrorCode, + RequestErrorMessage.ErrorDescription, + RequestErrorMessage.ErrorDetails, + RequestErrorMessage.ResponseTimestamp, + RequestErrorMessage.DestinationId, + RequestErrorMessage.NetworkPath + ); + + #region Send OnBinaryDataTransferResponseReceived event + + await LogEvent( + OnBinaryDataTransferResponseReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + response, + response.Runtime, + CancellationToken + ) + ); + + #endregion + + return response; - } - catch (Exception e) - { - await HandleErrors( - nameof(OCPPWebSocketAdapterOUT), - nameof(OnBinaryDataTransferRequestErrorSent), - e - ); - } + } + + #endregion + + #region Receive BinaryDataTransferResponseError + + /// + /// An event fired whenever a BinaryDataTransfer response error was received. + /// + public event OnBinaryDataTransferResponseErrorReceivedDelegate? BinaryDataTransferResponseErrorReceived; + + + public async Task + + Receive_BinaryDataTransferResponseError(BinaryDataTransferRequest? Request, + BinaryDataTransferResponse? Response, + OCPP_BinaryResponseErrorMessage ResponseErrorMessage, + IWebSocketConnection Connection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) + + { + + //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( + // response, + // response.ToJSON( + // parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenInfoSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenSerializer, + // parentNetworkingNode.OCPP.CustomAdditionalInfoSerializer, + // parentNetworkingNode.OCPP.CustomMessageContentSerializer, + // parentNetworkingNode.OCPP.CustomTransactionLimitsSerializer, + // parentNetworkingNode.OCPP.CustomSignatureSerializer, + // parentNetworkingNode.OCPP.CustomCustomDataSerializer + // ), + // out errorResponse + //); + + #region Send BinaryDataTransferResponseErrorReceived event + + await LogEvent( + BinaryDataTransferResponseErrorReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + Response, + ResponseErrorMessage, + Response is not null + ? ResponseErrorMessage.ResponseTimestamp - Response.ResponseTimestamp + : null, + CancellationToken + ) + ); + + #endregion - } } diff --git a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/DataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/DataTransfer.cs index d950b39c8..d0de9ff6e 100644 --- a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/DataTransfer.cs +++ b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Incoming/Common/DataTransfer.cs @@ -30,10 +30,110 @@ namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode { + #region Logging Delegates + + /// + /// A logging delegate called whenever a DataTransfer request was received. + /// + /// The logging timestamp. + /// The sender of the request. + /// The connection of the request. + /// The DataTransfer request. + /// An optional cancellation token. + public delegate Task + + OnDataTransferRequestReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest Request, + CancellationToken CancellationToken = default); + + + /// + /// A logging delegate called whenever a DataTransfer response was received. + /// + /// The logging timestamp. + /// The sender of the response. + /// The connection of the response. + /// The optional request. + /// The response. + /// The optional runtime of the request/response pair. + /// An optional cancellation token. + public delegate Task OnDataTransferResponseReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + DataTransferResponse Response, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); + + + /// + /// A logging delegate called whenever a DataTransfer request error was received. + /// + /// The logging timestamp. + /// The sender of the request. + /// The connection of the request. + /// The optional request. + /// The request error. + /// The optional runtime of the request/request error pair. + /// An optional cancellation token. + public delegate Task OnDataTransferRequestErrorReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + OCPP_JSONRequestErrorMessage RequestErrorMessage, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); + + + /// + /// A logging delegate called whenever a DataTransfer response error was received. + /// + /// The logging timestamp. + /// The sender of the response error. + /// The connection of the response error. + /// The optional request. + /// The optional response. + /// The ResponseErrorMessage. + /// The optional runtime of the request. + /// An optional cancellation token. + public delegate Task OnDataTransferResponseErrorReceivedDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + DataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + TimeSpan? Runtime, + CancellationToken CancellationToken = default); + + #endregion + + + /// + /// A delegate called whenever a DataTransfer response is expected + /// for a received DataTransfer request. + /// + /// The logging timestamp. + /// The sender of the request. + /// The connection of the request. + /// The DataTransfer request. + /// An optional cancellation token. + public delegate Task + + OnDataTransferDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest Request, + CancellationToken CancellationToken = default); + + public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN { - #region Events + // Wired via reflection! + + #region Receive DataTransferRequest /// /// An event sent whenever a DataTransfer request was received. @@ -45,9 +145,6 @@ public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN /// public event OnDataTransferDelegate? OnDataTransfer; - #endregion - - #region Receive DataTransferRequest (wired via reflection!) public async Task @@ -57,7 +154,7 @@ public async Task NetworkPath NetworkPath, EventTracking_Id EventTrackingId, Request_Id RequestId, - JObject JSONRequest, + JObject Request, CancellationToken CancellationToken) { @@ -67,7 +164,7 @@ public async Task try { - if (DataTransferRequest.TryParse(JSONRequest, + if (DataTransferRequest.TryParse(Request, RequestId, DestinationId, NetworkPath, @@ -92,35 +189,45 @@ public async Task out errorResponse)) { - response = new DataTransferResponse( - Request: request, - Result: Result.SignatureError( - $"Invalid signature(s): {errorResponse}" - ) + response = DataTransferResponse.SignatureError( + request, + errorResponse ); } #endregion - #region Send OnDataTransferRequest event + #region Send OnDataTransferRequestReceived event - try + var logger = OnDataTransferRequestReceived; + if (logger is not null) { + try + { - OnDataTransferRequestReceived?.Invoke(Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - request); + await Task.WhenAll( + logger.GetInvocationList(). + OfType(). + Select(filterDelegate => filterDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + request, + CancellationToken + )) + ); + + } + catch (Exception e) + { + await HandleErrors( + nameof(OCPPWebSocketAdapterIN), + nameof(OnDataTransferRequestReceived), + e + ); + } - } - catch (Exception e) - { - await HandleErrors( - nameof(OCPPWebSocketAdapterIN), - nameof(OnDataTransferRequestReceived), - e - ); } #endregion @@ -135,11 +242,13 @@ await HandleErrors( var responseTasks = OnDataTransfer?. GetInvocationList()?. - SafeSelect(subscriber => (subscriber as OnDataTransferDelegate)?.Invoke(Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - request, - CancellationToken)). + SafeSelect(subscriber => (subscriber as OnDataTransferDelegate)?.Invoke( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + request, + CancellationToken + )). ToArray(); response = responseTasks?.Length > 0 @@ -163,11 +272,6 @@ await HandleErrors( response ??= DataTransferResponse.Failed(request); - if (response.NetworkPath.Length == 0) - { - - } - #endregion #region Sign response message @@ -187,12 +291,14 @@ await HandleErrors( #region Send OnDataTransferResponse event - await (parentNetworkingNode.OCPP.OUT as OCPPWebSocketAdapterOUT).SendOnDataTransferResponseSent(Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - request, - response, - response.Runtime); + await (parentNetworkingNode.OCPP.OUT as OCPPWebSocketAdapterOUT).SendOnDataTransferResponseSent( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + request, + response, + response.Runtime + ); #endregion @@ -217,7 +323,7 @@ await HandleErrors( EventTrackingId, RequestId, nameof(Receive_DataTransfer)[8..], - JSONRequest, + Request, errorResponse ); @@ -228,7 +334,7 @@ await HandleErrors( EventTrackingId, RequestId, nameof(Receive_DataTransfer)[8..], - JSONRequest, + Request, e ); } @@ -239,16 +345,149 @@ await HandleErrors( #endregion + #region Receive DataTransferResponse + + /// + /// An event fired whenever a DataTransfer response was received. + /// + public event OnDataTransferResponseReceivedDelegate? OnDataTransferResponseReceived; + + + public async Task + + Receive_DataTransferResponse(DataTransferRequest Request, + JObject ResponseJSON, + IWebSocketConnection WebSocketConnection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) + + { + + var response = DataTransferResponse.Failed(Request); + + try + { + + if (DataTransferResponse.TryParse(Request, + ResponseJSON, + DestinationId, + NetworkPath, + out response, + out var errorResponse, + ResponseTimestamp, + parentNetworkingNode.OCPP.CustomDataTransferResponseParser)) { + + parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( + response, + response.ToJSON( + parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, + parentNetworkingNode.OCPP.CustomStatusInfoSerializer, + parentNetworkingNode.OCPP.CustomSignatureSerializer, + parentNetworkingNode.OCPP.CustomCustomDataSerializer + ), + out errorResponse + ); + + #region Send OnDataTransferResponseReceived event + + await LogEvent( + OnDataTransferResponseReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + WebSocketConnection, + Request, + response, + response.Runtime, + CancellationToken + ) + ); + + #endregion + + } + + else + response = new DataTransferResponse( + Request, + Result.Format(errorResponse) + ); + + } + catch (Exception e) + { + + response = new DataTransferResponse( + Request, + Result.FromException(e) + ); + + } + + return response; + + } + + #endregion + #region Receive DataTransferRequestError + /// + /// An event fired whenever a DataTransfer request error was received. + /// + public event OnDataTransferRequestErrorReceivedDelegate? DataTransferRequestErrorReceived; + + public async Task Receive_DataTransferRequestError(DataTransferRequest Request, OCPP_JSONRequestErrorMessage RequestErrorMessage, - IWebSocketConnection WebSocketConnection) - + IWebSocketConnection Connection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) { + //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( + // response, + // response.ToJSON( + // parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenInfoSerializer, + // parentNetworkingNode.OCPP.CustomIdTokenSerializer, + // parentNetworkingNode.OCPP.CustomAdditionalInfoSerializer, + // parentNetworkingNode.OCPP.CustomMessageContentSerializer, + // parentNetworkingNode.OCPP.CustomTransactionLimitsSerializer, + // parentNetworkingNode.OCPP.CustomSignatureSerializer, + // parentNetworkingNode.OCPP.CustomCustomDataSerializer + // ), + // out errorResponse + //); + + #region Send DataTransferRequestErrorReceived event + + await LogEvent( + DataTransferRequestErrorReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + RequestErrorMessage, + RequestErrorMessage.ResponseTimestamp - Request.RequestTimestamp, + CancellationToken + ) + ); + + #endregion + + var response = DataTransferResponse.RequestError( Request, RequestErrorMessage.EventTrackingId, @@ -260,6 +499,52 @@ public async Task RequestErrorMessage.NetworkPath ); + #region Send OnDataTransferResponseReceived event + + await LogEvent( + OnDataTransferResponseReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + response, + response.Runtime, + CancellationToken + ) + ); + + #endregion + + return response; + + } + + #endregion + + #region Receive DataTransferResponseError + + /// + /// An event fired whenever a DataTransfer response error was received. + /// + public event OnDataTransferResponseErrorReceivedDelegate? DataTransferResponseErrorReceived; + + + public async Task + + Receive_DataTransferResponseError(DataTransferRequest? Request, + DataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + IWebSocketConnection Connection, + NetworkingNode_Id DestinationId, + NetworkPath NetworkPath, + EventTracking_Id EventTrackingId, + Request_Id RequestId, + DateTime? ResponseTimestamp = null, + CancellationToken CancellationToken = default) + + { + //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( // response, // response.ToJSON( @@ -275,36 +560,26 @@ public async Task // out errorResponse //); - #region Send OnDataTransferResponseReceived event - - var logger = OnDataTransferResponseReceived; - if (logger is not null) - { - try - { - - await Task.WhenAll(logger.GetInvocationList(). - OfType(). - Select(loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - // WebSocketConnection, - Request, - response, - response.Runtime - )). - ToArray()); - - } - catch (Exception e) - { - DebugX.Log(e, nameof(OCPPWebSocketAdapterIN) + "." + nameof(OnDataTransferResponseReceived)); - } - } + #region Send DataTransferResponseErrorReceived event + + await LogEvent( + DataTransferResponseErrorReceived, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + Connection, + Request, + Response, + ResponseErrorMessage, + Response is not null + ? ResponseErrorMessage.ResponseTimestamp - Response.ResponseTimestamp + : null, + CancellationToken + ) + ); #endregion - return response; } @@ -312,60 +587,389 @@ await Task.WhenAll(logger.GetInvocationList(). } - public partial class OCPPWebSocketAdapterOUT : IOCPPWebSocketAdapterOUT - { +} - #region Events - /// - /// An event sent whenever a response to a DataTransfer was sent. - /// - public event OnDataTransferResponseSentDelegate? OnDataTransferResponseSent; - #endregion - #region Send OnDataTransferResponse event - public async Task SendOnDataTransferResponseSent(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - DataTransferRequest Request, - DataTransferResponse Response, - TimeSpan Runtime) - { - var logger = OnDataTransferResponseSent; - if (logger is not null) - { - try - { - - await Task.WhenAll(logger.GetInvocationList(). - OfType (). - Select (filterDelegate => filterDelegate.Invoke(Timestamp, - Sender, - Connection, - Request, - Response, - Runtime)). - ToArray()); - } - catch (Exception e) - { - await HandleErrors( - nameof(OCPPWebSocketAdapterOUT), - nameof(OnDataTransferResponseSent), - e - ); - } - } - } - #endregion - } -} + + +///* +// * Copyright (c) 2014-2024 GraphDefined GmbH +// * This file is part of WWCP OCPP +// * +// * Licensed under the Apache License, Version 2.0 (the "License"); +// * you may not use this file except in compliance with the License. +// * You may obtain a copy of the License at +// * +// * http://www.apache.org/licenses/LICENSE-2.0 +// * +// * Unless required by applicable law or agreed to in writing, software +// * distributed under the License is distributed on an "AS IS" BASIS, +// * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// * See the License for the specific language governing permissions and +// * limitations under the License. +// */ + +//#region Usings + +//using Newtonsoft.Json.Linq; + +//using org.GraphDefined.Vanaheimr.Illias; +//using org.GraphDefined.Vanaheimr.Hermod; +//using org.GraphDefined.Vanaheimr.Hermod.WebSocket; + +//using cloud.charging.open.protocols.OCPPv2_1.WebSockets; + +//#endregion + +//namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode +//{ + +// public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN +// { + +// #region Events + +// /// +// /// An event sent whenever a DataTransfer request was received. +// /// +// public event OnDataTransferRequestReceivedDelegate? OnDataTransferRequestReceived; + +// /// +// /// An event sent whenever a DataTransfer request was received for processing. +// /// +// public event OnDataTransferDelegate? OnDataTransfer; + +// #endregion + +// #region Receive DataTransferRequest (wired via reflection!) + +// public async Task + +// Receive_DataTransfer(DateTime RequestTimestamp, +// IWebSocketConnection WebSocketConnection, +// NetworkingNode_Id DestinationId, +// NetworkPath NetworkPath, +// EventTracking_Id EventTrackingId, +// Request_Id RequestId, +// JObject JSONRequest, +// CancellationToken CancellationToken) + +// { + +// OCPP_Response? ocppResponse = null; + +// try +// { + +// if (DataTransferRequest.TryParse(JSONRequest, +// RequestId, +// DestinationId, +// NetworkPath, +// out var request, +// out var errorResponse, +// RequestTimestamp, +// parentNetworkingNode.OCPP.DefaultRequestTimeout, +// EventTrackingId, +// parentNetworkingNode.OCPP.CustomDataTransferRequestParser)) { + +// DataTransferResponse? response = null; + +// #region Verify request signature(s) + +// if (!parentNetworkingNode.OCPP.SignaturePolicy.VerifyRequestMessage( +// request, +// request.ToJSON( +// parentNetworkingNode.OCPP.CustomDataTransferRequestSerializer, +// parentNetworkingNode.OCPP.CustomSignatureSerializer, +// parentNetworkingNode.OCPP.CustomCustomDataSerializer +// ), +// out errorResponse)) +// { + +// response = new DataTransferResponse( +// Request: request, +// Result: Result.SignatureError( +// $"Invalid signature(s): {errorResponse}" +// ) +// ); + +// } + +// #endregion + +// #region Send OnDataTransferRequest event + +// try +// { + +// OnDataTransferRequestReceived?.Invoke(Timestamp.Now, +// parentNetworkingNode, +// WebSocketConnection, +// request); + +// } +// catch (Exception e) +// { +// await HandleErrors( +// nameof(OCPPWebSocketAdapterIN), +// nameof(OnDataTransferRequestReceived), +// e +// ); +// } + +// #endregion + + +// #region Call async subscribers + +// if (response is null) +// { +// try +// { + +// var responseTasks = OnDataTransfer?. +// GetInvocationList()?. +// SafeSelect(subscriber => (subscriber as OnDataTransferDelegate)?.Invoke(Timestamp.Now, +// parentNetworkingNode, +// WebSocketConnection, +// request, +// CancellationToken)). +// ToArray(); + +// response = responseTasks?.Length > 0 +// ? (await Task.WhenAll(responseTasks!)).FirstOrDefault() +// : DataTransferResponse.Failed(request, $"Undefined {nameof(OnDataTransfer)}!"); + +// } +// catch (Exception e) +// { + +// response = DataTransferResponse.ExceptionOccured(request, e); + +// await HandleErrors( +// nameof(OCPPWebSocketAdapterIN), +// nameof(OnDataTransfer), +// e +// ); + +// } +// } + +// response ??= DataTransferResponse.Failed(request); + +// if (response.NetworkPath.Length == 0) +// { + +// } + +// #endregion + +// #region Sign response message + +// parentNetworkingNode.OCPP.SignaturePolicy.SignResponseMessage( +// response, +// response.ToJSON( +// parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, +// parentNetworkingNode.OCPP.CustomStatusInfoSerializer, +// parentNetworkingNode.OCPP.CustomSignatureSerializer, +// parentNetworkingNode.OCPP.CustomCustomDataSerializer +// ), +// out var errorResponse2); + +// #endregion + + +// #region Send OnDataTransferResponse event + +// await (parentNetworkingNode.OCPP.OUT as OCPPWebSocketAdapterOUT).SendOnDataTransferResponseSent(Timestamp.Now, +// parentNetworkingNode, +// WebSocketConnection, +// request, +// response, +// response.Runtime); + +// #endregion + +// ocppResponse = OCPP_Response.JSONResponse( +// EventTrackingId, +// NetworkPath.Source, +// NetworkPath.From(parentNetworkingNode.Id), +// RequestId, +// response.ToJSON( +// parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, +// parentNetworkingNode.OCPP.CustomStatusInfoSerializer, +// parentNetworkingNode.OCPP.CustomSignatureSerializer, +// parentNetworkingNode.OCPP.CustomCustomDataSerializer +// ), +// CancellationToken +// ); + +// } + +// else +// ocppResponse = OCPP_Response.CouldNotParse( +// EventTrackingId, +// RequestId, +// nameof(Receive_DataTransfer)[8..], +// JSONRequest, +// errorResponse +// ); + +// } +// catch (Exception e) +// { +// ocppResponse = OCPP_Response.FormationViolation( +// EventTrackingId, +// RequestId, +// nameof(Receive_DataTransfer)[8..], +// JSONRequest, +// e +// ); +// } + +// return ocppResponse; + +// } + +// #endregion + +// #region Receive DataTransferRequestError + +// public async Task + +// Receive_DataTransferRequestError(DataTransferRequest Request, +// OCPP_JSONRequestErrorMessage RequestErrorMessage, +// IWebSocketConnection WebSocketConnection) + +// { + +// var response = DataTransferResponse.RequestError( +// Request, +// RequestErrorMessage.EventTrackingId, +// RequestErrorMessage.ErrorCode, +// RequestErrorMessage.ErrorDescription, +// RequestErrorMessage.ErrorDetails, +// RequestErrorMessage.ResponseTimestamp, +// RequestErrorMessage.DestinationId, +// RequestErrorMessage.NetworkPath +// ); + +// //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( +// // response, +// // response.ToJSON( +// // parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, +// // parentNetworkingNode.OCPP.CustomIdTokenInfoSerializer, +// // parentNetworkingNode.OCPP.CustomIdTokenSerializer, +// // parentNetworkingNode.OCPP.CustomAdditionalInfoSerializer, +// // parentNetworkingNode.OCPP.CustomMessageContentSerializer, +// // parentNetworkingNode.OCPP.CustomTransactionLimitsSerializer, +// // parentNetworkingNode.OCPP.CustomSignatureSerializer, +// // parentNetworkingNode.OCPP.CustomCustomDataSerializer +// // ), +// // out errorResponse +// //); + +// #region Send OnDataTransferResponseReceived event + +// var logger = OnDataTransferResponseReceived; +// if (logger is not null) +// { +// try +// { + +// await Task.WhenAll(logger.GetInvocationList(). +// OfType(). +// Select(loggingDelegate => loggingDelegate.Invoke( +// Timestamp.Now, +// parentNetworkingNode, +// // WebSocketConnection, +// Request, +// response, +// response.Runtime +// )). +// ToArray()); + +// } +// catch (Exception e) +// { +// DebugX.Log(e, nameof(OCPPWebSocketAdapterIN) + "." + nameof(OnDataTransferResponseReceived)); +// } +// } + +// #endregion + +// return response; + +// } + +// #endregion + +// } + +// public partial class OCPPWebSocketAdapterOUT : IOCPPWebSocketAdapterOUT +// { + +// #region Events + +// /// +// /// An event sent whenever a response to a DataTransfer was sent. +// /// +// public event OnDataTransferResponseSentDelegate? OnDataTransferResponseSent; + +// #endregion + +// #region Send OnDataTransferResponse event + +// public async Task SendOnDataTransferResponseSent(DateTime Timestamp, +// IEventSender Sender, +// IWebSocketConnection Connection, +// DataTransferRequest Request, +// DataTransferResponse Response, +// TimeSpan Runtime) +// { + +// var logger = OnDataTransferResponseSent; +// if (logger is not null) +// { +// try +// { + +// await Task.WhenAll(logger.GetInvocationList(). +// OfType (). +// Select (filterDelegate => filterDelegate.Invoke(Timestamp, +// Sender, +// Connection, +// Request, +// Response, +// Runtime)). +// ToArray()); + +// } +// catch (Exception e) +// { +// await HandleErrors( +// nameof(OCPPWebSocketAdapterOUT), +// nameof(OnDataTransferResponseSent), +// e +// ); +// } + +// } + +// } + +// #endregion + +// } + +//} diff --git a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs index e6c047ea1..df2e8f569 100644 --- a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs +++ b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/BinaryDataStreamsExtensions/BinaryDataTransfer.cs @@ -28,12 +28,12 @@ namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode { - #region Delegates + #region Logging Delegates /// - /// A delegate called whenever a BinaryDataTransfer request was sent. + /// A logging delegate called whenever a BinaryDataTransfer request was sent. /// - /// The timestamp of the request. + /// The logging timestamp. /// The sender of the request. /// The connection of the request. /// The request. @@ -46,37 +46,62 @@ public delegate Task OnBinaryDataTransferRequestSentDelegate(DateTime /// - /// A delegate called whenever a response to a BinaryDataTransfer request was received. + /// A logging delegate called whenever a BinaryDataTransfer response was sent. /// - /// The timestamp of the log request. - /// The sender of the request. - /// The connection of the request. - /// The request. + /// The logging timestamp. + /// The sender of the response. + /// The connection of the response. + /// The optional request. /// The response. - /// The runtime of the request. - public delegate Task OnBinaryDataTransferResponseReceivedDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request, - BinaryDataTransferResponse Response, - TimeSpan Runtime); + /// The optional runtime of the response. + public delegate Task + + OnBinaryDataTransferResponseSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + BinaryDataTransferResponse Response, + TimeSpan? Runtime); /// - /// A delegate called whenever a RequestError to a BinaryDataTransfer request was received. + /// A logging delegate called whenever a BinaryDataTransfer request error was sent. /// - /// The timestamp of the log request. - /// The sender of the request. - /// The connection of the request. - /// The request. - /// The RequestErrorMessage. - /// The runtime of the request. - public delegate Task OnBinaryDataTransferRequestErrorReceivedDelegate(DateTime Timestamp, - IEventSender Sender, - IWebSocketConnection Connection, - BinaryDataTransferRequest Request, - OCPP_BinaryRequestErrorMessage RequestErrorMessage, - TimeSpan Runtime); + /// The logging timestamp. + /// The sender of the request error. + /// The connection of the request error. + /// The optional request (when parsable). + /// The request error message. + /// The optional runtime of the request error messag. + public delegate Task + + OnBinaryDataTransferRequestErrorSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + OCPP_JSONRequestErrorMessage RequestErrorMessage, + TimeSpan? Runtime); + + + /// + /// A logging delegate called whenever a BinaryDataTransfer response error was sent. + /// + /// The logging timestamp. + /// The sender of the response error. + /// The connection of the response error. + /// The optional request. + /// The optional response. + /// The response error message. + /// The optional runtime of the response error message. + public delegate Task + + OnBinaryDataTransferResponseErrorSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + BinaryDataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + TimeSpan? Runtime); #endregion @@ -84,21 +109,13 @@ public delegate Task OnBinaryDataTransferRequestErrorReceivedDelegate(DateTime public partial class OCPPWebSocketAdapterOUT : IOCPPWebSocketAdapterOUT { - #region Events + #region Send BinaryDataTransfer (request) /// - /// An event fired whenever a BinaryDataTransfer request will be sent to the CSMS. + /// An event fired whenever a BinaryDataTransfer request will be sent. /// - public event OnBinaryDataTransferRequestSentDelegate? OnBinaryDataTransferRequestSent; + public event OnBinaryDataTransferRequestSentDelegate? OnBinaryDataTransferRequestSent; - /// - /// An event fired whenever a response to a BinaryDataTransfer request was received. - /// - public event OnBinaryDataTransferResponseReceivedDelegate? OnBinaryDataTransferResponse; - - #endregion - - #region BinaryDataTransfer(Request) /// /// Send vendor-specific binary data. @@ -212,182 +229,90 @@ out var signingErrors #endregion - } - - public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN - { - - #region Receive BinaryDataTransferResponse (wired via reflection!) + #region Send OnBinaryDataTransferResponseSent event /// - /// An event fired whenever a BinaryDataTransfer response was received. + /// An event sent whenever a BinaryDataTransfer response was sent. /// - public event OnBinaryDataTransferResponseReceivedDelegate? OnBinaryDataTransferResponseReceived; - - - public async Task - - Receive_BinaryDataTransferResponse(BinaryDataTransferRequest Request, - Byte[] ResponseBytes, - IWebSocketConnection WebSocketConnection, - NetworkingNode_Id DestinationId, - NetworkPath NetworkPath, - EventTracking_Id EventTrackingId, - Request_Id RequestId, - DateTime? ResponseTimestamp = null, - CancellationToken CancellationToken = default) - - { - - var response = BinaryDataTransferResponse.Failed(Request); - - try - { - - if (BinaryDataTransferResponse.TryParse(Request, - ResponseBytes, - DestinationId, - NetworkPath, - out response, - out var errorResponse, - ResponseTimestamp, - parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseParser)) { - - parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( - response, - response.ToBinary( - parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseSerializer, - parentNetworkingNode.OCPP.CustomStatusInfoSerializer, - parentNetworkingNode.OCPP.CustomBinarySignatureSerializer, - IncludeSignatures: true - ), - out errorResponse - ); - - #region Send OnBinaryDataTransferResponseReceived event - - await LogEvent( - OnBinaryDataTransferResponseReceived, - loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - Request, - response, - response.Runtime - ) - ); - - #endregion - - } - - else - response = new BinaryDataTransferResponse( - Request, - Result.Format(errorResponse) - ); - - } - catch (Exception e) - { - - response = new BinaryDataTransferResponse( - Request, - Result.FromException(e) - ); - - } - - return response; - - } + public event OnBinaryDataTransferResponseSentDelegate? OnBinaryDataTransferResponseSent; + + + public Task SendOnBinaryDataTransferResponseSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest Request, + BinaryDataTransferResponse Response, + TimeSpan Runtime) + + => LogEvent( + OnBinaryDataTransferResponseSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + Response, + Runtime + ) + ); #endregion - #region Receive BinaryDataTransferRequestError + #region Send OnBinaryDataTransferRequestErrorSent event /// - /// An event fired whenever a BinaryDataTransfer RequestError was received. + /// An event sent whenever a BinaryDataTransfer request error was sent. /// - public event OnBinaryDataTransferRequestErrorReceivedDelegate? BinaryDataTransferRequestErrorReceived; - - - public async Task + public event OnBinaryDataTransferRequestErrorSentDelegate? OnBinaryDataTransferRequestErrorSent; + + + public Task SendOnBinaryDataTransferRequestErrorSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + OCPP_JSONRequestErrorMessage RequestErrorMessage, + TimeSpan Runtime) + => LogEvent( + OnBinaryDataTransferRequestErrorSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + RequestErrorMessage, + Runtime + ) + ); - Receive_BinaryDataTransferRequestError(BinaryDataTransferRequest Request, - OCPP_BinaryRequestErrorMessage RequestErrorMessage, - IWebSocketConnection WebSocketConnection, - NetworkingNode_Id DestinationId, - NetworkPath NetworkPath, - EventTracking_Id EventTrackingId, - Request_Id RequestId, - DateTime? ResponseTimestamp = null, - CancellationToken CancellationToken = default) - { - - //parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( - // response, - // response.ToJSON( - // parentNetworkingNode.OCPP.CustomBinaryDataTransferResponseSerializer, - // parentNetworkingNode.OCPP.CustomIdTokenInfoSerializer, - // parentNetworkingNode.OCPP.CustomIdTokenSerializer, - // parentNetworkingNode.OCPP.CustomAdditionalInfoSerializer, - // parentNetworkingNode.OCPP.CustomMessageContentSerializer, - // parentNetworkingNode.OCPP.CustomTransactionLimitsSerializer, - // parentNetworkingNode.OCPP.CustomSignatureSerializer, - // parentNetworkingNode.OCPP.CustomCustomDataSerializer - // ), - // out errorResponse - //); - - #region Send BinaryDataTransferRequestErrorReceived event - - await LogEvent( - BinaryDataTransferRequestErrorReceived, - loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - Request, - RequestErrorMessage, - RequestErrorMessage.ResponseTimestamp - Request.RequestTimestamp - ) - ); - - #endregion - - - var response = BinaryDataTransferResponse.RequestError( - Request, - RequestErrorMessage.EventTrackingId, - RequestErrorMessage.ErrorCode, - RequestErrorMessage.ErrorDescription, - RequestErrorMessage.ErrorDetails, - RequestErrorMessage.ResponseTimestamp, - RequestErrorMessage.DestinationId, - RequestErrorMessage.NetworkPath - ); - - #region Send OnBinaryDataTransferResponseReceived event - - await LogEvent( - OnBinaryDataTransferResponseReceived, - loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - WebSocketConnection, - Request, - response, - response.Runtime - ) - ); - - #endregion + #endregion - return response; + #region Send OnBinaryDataTransferResponseErrorSent event - } + /// + /// An event sent whenever a BinaryDataTransfer response error was sent. + /// + public event OnBinaryDataTransferResponseErrorSentDelegate? OnBinaryDataTransferResponseErrorSent; + + + public Task SendOnBinaryDataTransferResponseErrorSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + BinaryDataTransferRequest? Request, + BinaryDataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + TimeSpan Runtime) + => LogEvent( + OnBinaryDataTransferResponseErrorSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + Response, + ResponseErrorMessage, + Runtime + ) + ); #endregion diff --git a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/DataTransfer.cs b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/DataTransfer.cs index fe9cfe948..a6be93683 100644 --- a/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/DataTransfer.cs +++ b/WWCP_OCPPv2.1/NetworkingNode/OCPPAdapter/Outgoing/Common/DataTransfer.cs @@ -17,12 +17,10 @@ #region Usings -using Newtonsoft.Json.Linq; - using org.GraphDefined.Vanaheimr.Illias; +using org.GraphDefined.Vanaheimr.Hermod; using org.GraphDefined.Vanaheimr.Hermod.WebSocket; -using cloud.charging.open.protocols.OCPP; using cloud.charging.open.protocols.OCPPv2_1.WebSockets; #endregion @@ -30,25 +28,97 @@ namespace cloud.charging.open.protocols.OCPPv2_1.NetworkingNode { + #region Logging Delegates + /// - /// The OCPP adapter for sending messages. + /// A logging delegate called whenever a DataTransfer request was sent. /// + /// The logging timestamp. + /// The sender of the request. + /// The connection of the request. + /// The request. + /// The result of the send message process. + public delegate Task OnDataTransferRequestSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest Request, + SentMessageResults SendMessageResult); + + + /// + /// A logging delegate called whenever a DataTransfer response was sent. + /// + /// The logging timestamp. + /// The sender of the response. + /// The connection of the response. + /// The optional request. + /// The response. + /// The optional runtime of the response. + public delegate Task + + OnDataTransferResponseSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + DataTransferResponse Response, + TimeSpan? Runtime); + + + /// + /// A logging delegate called whenever a DataTransfer request error was sent. + /// + /// The logging timestamp. + /// The sender of the request error. + /// The connection of the request error. + /// The optional request (when parsable). + /// The request error message. + /// The optional runtime of the request error messag. + public delegate Task + + OnDataTransferRequestErrorSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + OCPP_JSONRequestErrorMessage RequestErrorMessage, + TimeSpan? Runtime); + + + /// + /// A logging delegate called whenever a DataTransfer response error was sent. + /// + /// The logging timestamp. + /// The sender of the response error. + /// The connection of the response error. + /// The optional request. + /// The optional response. + /// The response error message. + /// The optional runtime of the response error message. + public delegate Task + + OnDataTransferResponseErrorSentDelegate(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + DataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + TimeSpan? Runtime); + + #endregion + + public partial class OCPPWebSocketAdapterOUT : IOCPPWebSocketAdapterOUT { - #region Events + #region Send DataTransfer (request) /// - /// An event fired whenever a data transfer request will be sent to the CSMS. + /// An event fired whenever a DataTransfer request will be sent. /// - public event OnDataTransferRequestSentDelegate? OnDataTransferRequestSent; - - #endregion + public event OnDataTransferRequestSentDelegate? OnDataTransferRequestSent; - #region DataTransfer(Request) /// - /// Send vendor-specific data. + /// Send vendor-specific binary data. /// /// A DataTransfer request. public async Task DataTransfer(DataTransferRequest Request) @@ -59,6 +129,8 @@ public async Task DataTransfer(DataTransferRequest Request try { + #region Sign request message + if (!parentNetworkingNode.OCPP.SignaturePolicy.SignRequestMessage( Request, Request.ToJSON( @@ -69,76 +141,70 @@ public async Task DataTransfer(DataTransferRequest Request out var signingErrors )) { - response = new DataTransferResponse( + response = DataTransferResponse.SignatureError( Request, - Result.SignatureError(signingErrors) + signingErrors ); } + #endregion + else { + #region Send request message + var sendRequestState = await SendJSONRequestAndWait( - OCPP_JSONRequestMessage.FromRequest( - Request, - Request.ToJSON( - parentNetworkingNode.OCPP.CustomDataTransferRequestSerializer, - parentNetworkingNode.OCPP.CustomSignatureSerializer, - parentNetworkingNode.OCPP.CustomCustomDataSerializer - ) - ), - - async sendMessageResult => { - - #region Send OnDataTransferRequestSent event - - var logger = OnDataTransferRequestSent; - if (logger is not null) - { - try - { - - await Task.WhenAll(logger.GetInvocationList(). - OfType(). - Select(loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - sendMessageResult.Connection, - Request, - sendMessageResult.Result - )). - ToArray()); - - } - catch (Exception e) - { - DebugX.Log(e, nameof(OCPPWebSocketAdapterOUT) + "." + nameof(OnDataTransferRequestSent)); - } - } - - #endregion - - } - - ); + OCPP_JSONRequestMessage.FromRequest( + Request, + Request.ToJSON( + parentNetworkingNode.OCPP.CustomDataTransferRequestSerializer, + parentNetworkingNode.OCPP.CustomSignatureSerializer, + parentNetworkingNode.OCPP.CustomCustomDataSerializer + ) + ), + + sendMessageResult => LogEvent( + OnDataTransferRequestSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp.Now, + parentNetworkingNode, + sendMessageResult.Connection, + Request, + sendMessageResult.Result + ) + ) + + ); - if (sendRequestState.IsValidJSONResponse(Request, out var jsonResponse)) - { + #endregion + if (sendRequestState.IsValidJSONResponse(Request, out var jsonResponse)) response = await (parentNetworkingNode.OCPP.IN as OCPPWebSocketAdapterIN).Receive_DataTransferResponse( - Request, - jsonResponse, - null, - sendRequestState.DestinationIdReceived, - sendRequestState.NetworkPathReceived, - Request. EventTrackingId, - Request. RequestId, - sendRequestState.ResponseTimestamp, - Request. CancellationToken - ); - - } + Request, + jsonResponse, + null, + sendRequestState.DestinationIdReceived, + sendRequestState.NetworkPathReceived, + Request.EventTrackingId, + Request.RequestId, + sendRequestState.ResponseTimestamp, + Request.CancellationToken + ); + + if (sendRequestState.IsValidJSONRequestError(Request, out var jsonRequestError)) + response = await (parentNetworkingNode.OCPP.IN as OCPPWebSocketAdapterIN).Receive_DataTransferRequestError( + Request, + jsonRequestError, + null, + sendRequestState.DestinationIdReceived, + sendRequestState.NetworkPathReceived, + Request.EventTrackingId, + Request.RequestId, + sendRequestState.ResponseTimestamp, + Request.CancellationToken + ); response ??= new DataTransferResponse( Request, @@ -164,119 +230,90 @@ Request. CancellationToken #endregion - } - - - /// - /// The OCPP adapter for receiving messages. - /// - public partial class OCPPWebSocketAdapterIN : IOCPPWebSocketAdapterIN - { - - #region Events + #region Send OnDataTransferResponseSent event /// - /// An event fired whenever a DataTransfer response was received. + /// An event sent whenever a DataTransfer response was sent. /// - public event OnDataTransferResponseReceivedDelegate? OnDataTransferResponseReceived; + public event OnDataTransferResponseSentDelegate? OnDataTransferResponseSent; + + + public Task SendOnDataTransferResponseSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest Request, + DataTransferResponse Response, + TimeSpan Runtime) + + => LogEvent( + OnDataTransferResponseSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + Response, + Runtime + ) + ); #endregion - #region Receive DataTransfer response (wired via reflection!) - - public async Task + #region Send OnDataTransferRequestErrorSent event - Receive_DataTransferResponse(DataTransferRequest Request, - JObject ResponseJSON, - IWebSocketConnection WebSocketConnection, - NetworkingNode_Id DestinationId, - NetworkPath NetworkPath, - EventTracking_Id EventTrackingId, - Request_Id RequestId, - DateTime? ResponseTimestamp = null, - CancellationToken CancellationToken = default) - - { - - var response = DataTransferResponse.Failed(Request); - - try - { - - if (DataTransferResponse.TryParse(Request, - ResponseJSON, - DestinationId, - NetworkPath, - out response, - out var errorResponse, - ResponseTimestamp, - parentNetworkingNode.OCPP.CustomDataTransferResponseParser, - parentNetworkingNode.OCPP.CustomStatusInfoParser, - parentNetworkingNode.OCPP.CustomSignatureParser, - parentNetworkingNode.OCPP.CustomCustomDataParser)) { - - parentNetworkingNode.OCPP.SignaturePolicy.VerifyResponseMessage( - response, - response.ToJSON( - parentNetworkingNode.OCPP.CustomDataTransferResponseSerializer, - parentNetworkingNode.OCPP.CustomStatusInfoSerializer, - parentNetworkingNode.OCPP.CustomSignatureSerializer, - parentNetworkingNode.OCPP.CustomCustomDataSerializer - ), - out errorResponse - ); - - #region Send OnDataTransferResponseReceived event - - var logger = OnDataTransferResponseReceived; - if (logger is not null) - { - try - { - - await Task.WhenAll(logger.GetInvocationList(). - OfType (). - Select (loggingDelegate => loggingDelegate.Invoke( - Timestamp.Now, - parentNetworkingNode, - // WebSocketConnection, - Request, - response, - response.Runtime - )). - ToArray()); - - } - catch (Exception e) - { - DebugX.Log(e, nameof(OCPPWebSocketAdapterIN) + "." + nameof(OnDataTransferResponseReceived)); - } - } - - #endregion - - } - - else - response = new DataTransferResponse( - Request, - Result.Format(errorResponse) - ); - - } - catch (Exception e) - { - - response = new DataTransferResponse( - Request, - Result.FromException(e) - ); + /// + /// An event sent whenever a DataTransfer request error was sent. + /// + public event OnDataTransferRequestErrorSentDelegate? OnDataTransferRequestErrorSent; + + + public Task SendOnDataTransferRequestErrorSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + OCPP_JSONRequestErrorMessage RequestErrorMessage, + TimeSpan Runtime) + => LogEvent( + OnDataTransferRequestErrorSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + RequestErrorMessage, + Runtime + ) + ); - } + #endregion - return response; + #region Send OnDataTransferResponseErrorSent event - } + /// + /// An event sent whenever a DataTransfer response error was sent. + /// + public event OnDataTransferResponseErrorSentDelegate? OnDataTransferResponseErrorSent; + + + public Task SendOnDataTransferResponseErrorSent(DateTime Timestamp, + IEventSender Sender, + IWebSocketConnection Connection, + DataTransferRequest? Request, + DataTransferResponse? Response, + OCPP_JSONResponseErrorMessage ResponseErrorMessage, + TimeSpan Runtime) + => LogEvent( + OnDataTransferResponseErrorSent, + loggingDelegate => loggingDelegate.Invoke( + Timestamp, + Sender, + Connection, + Request, + Response, + ResponseErrorMessage, + Runtime + ) + ); #endregion diff --git a/WWCP_OCPPv2.1_CSMS/HTTPAPI/HTTPAPI.cs b/WWCP_OCPPv2.1_CSMS/HTTPAPI/HTTPAPI.cs index 957e10b4c..c1ee9675e 100644 --- a/WWCP_OCPPv2.1_CSMS/HTTPAPI/HTTPAPI.cs +++ b/WWCP_OCPPv2.1_CSMS/HTTPAPI/HTTPAPI.cs @@ -5588,7 +5588,8 @@ public void AttachCSMS(ACSMSNode NetworkingNode) NetworkingNode.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, - request) => + request, + cancellationToken) => EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.IN.OnDataTransferRequestReceived), new JObject( @@ -5616,38 +5617,51 @@ public void AttachCSMS(ACSMSNode NetworkingNode) NetworkingNode.OCPP.IN.OnDataTransferResponseReceived += (timestamp, sender, - //connection, + connection, request, response, - runtime) => - - EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.IN.OnDataTransferResponseReceived), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToJSON()), - new JProperty("response", response. ToJSON()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + runtime, + cancellationToken) => + + EventLog.SubmitEvent( + nameof(NetworkingNode.OCPP.IN.OnBinaryDataTransferResponseReceived), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToJSON()) + : null, + new JProperty("response", response. ToJSON()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); NetworkingNode.OCPP.OUT.OnDataTransferResponseSent += (timestamp, - sender, - connection, - request, - response, - runtime) => + sender, + connection, + request, + response, + runtime) => - EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.OUT.OnDataTransferResponseSent), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToJSON()), - new JProperty("response", response. ToJSON()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + EventLog.SubmitEvent( + nameof(NetworkingNode.OCPP.OUT.OnBinaryDataTransferResponseSent), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToJSON()) + : null, + new JProperty("response", response. ToJSON()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); #endregion @@ -5656,7 +5670,8 @@ public void AttachCSMS(ACSMSNode NetworkingNode) NetworkingNode.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, - request) => + request, + cancellationToken) => EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.IN.OnBinaryDataTransferRequestReceived), new JObject( @@ -5677,7 +5692,7 @@ public void AttachCSMS(ACSMSNode NetworkingNode) new JObject( new JProperty("timestamp", timestamp. ToIso8601()), new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), + new JProperty("connection", connection.ToJSON()), new JProperty("request", request. ToBinary().ToBase64()) )); @@ -5687,17 +5702,24 @@ public void AttachCSMS(ACSMSNode NetworkingNode) connection, request, response, - runtime) => - - EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.IN.OnBinaryDataTransferResponseReceived), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToBinary().ToBase64()), - new JProperty("response", response. ToBinary().ToBase64()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + runtime, + cancellationToken) => + + EventLog.SubmitEvent( + nameof(NetworkingNode.OCPP.IN.OnBinaryDataTransferResponseReceived), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToBinary().ToBase64()) + : null, + new JProperty("response", response. ToBinary().ToBase64()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); NetworkingNode.OCPP.OUT.OnBinaryDataTransferResponseSent += (timestamp, @@ -5707,15 +5729,21 @@ public void AttachCSMS(ACSMSNode NetworkingNode) response, runtime) => - EventLog.SubmitEvent(nameof(NetworkingNode.OCPP.OUT.OnBinaryDataTransferResponseSent), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToBinary().ToBase64()), - new JProperty("response", response. ToBinary().ToBase64()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + EventLog.SubmitEvent( + nameof(NetworkingNode.OCPP.OUT.OnBinaryDataTransferResponseSent), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToBinary().ToBase64()) + : null, + new JProperty("response", response. ToBinary().ToBase64()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); #endregion diff --git a/WWCP_OCPPv2.1_LocalController/HTTPAPI/HTTPAPI.cs b/WWCP_OCPPv2.1_LocalController/HTTPAPI/HTTPAPI.cs index 0178e84bc..706a3393b 100644 --- a/WWCP_OCPPv2.1_LocalController/HTTPAPI/HTTPAPI.cs +++ b/WWCP_OCPPv2.1_LocalController/HTTPAPI/HTTPAPI.cs @@ -5585,9 +5585,10 @@ public void AttachLocalController(ALocalControllerNode LocalController) #region OnDataTransfer LocalController.OCPP.IN.OnDataTransferRequestReceived += (timestamp, - sender, - connection, - request) => + sender, + connection, + request, + cancellationToken) => EventLog.SubmitEvent(nameof(LocalController.OCPP.IN.OnDataTransferRequestReceived), new JObject( @@ -5614,48 +5615,62 @@ public void AttachLocalController(ALocalControllerNode LocalController) LocalController.OCPP.IN.OnDataTransferResponseReceived += (timestamp, - sender, - //connection, - request, - response, - runtime) => - - EventLog.SubmitEvent(nameof(LocalController.OCPP.IN.OnDataTransferResponseReceived), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToJSON()), - new JProperty("response", response. ToJSON()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + sender, + connection, + request, + response, + runtime, + cancellationToken) => + + EventLog.SubmitEvent( + nameof(LocalController.OCPP.IN.OnBinaryDataTransferResponseReceived), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToJSON()) + : null, + new JProperty("response", response. ToJSON()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); LocalController.OCPP.OUT.OnDataTransferResponseSent += (timestamp, - sender, - connection, - request, - response, - runtime) => + sender, + connection, + request, + response, + runtime) => - EventLog.SubmitEvent(nameof(LocalController.OCPP.OUT.OnDataTransferResponseSent), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToJSON()), - new JProperty("response", response. ToJSON()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + EventLog.SubmitEvent( + nameof(LocalController.OCPP.OUT.OnBinaryDataTransferResponseSent), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToJSON()) + : null, + new JProperty("response", response. ToJSON()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); #endregion #region OnBinaryDataTransfer LocalController.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, - sender, - connection, - request) => + sender, + connection, + request, + cancellationToken) => EventLog.SubmitEvent(nameof(LocalController.OCPP.IN.OnBinaryDataTransferRequestReceived), new JObject( @@ -5676,7 +5691,7 @@ public void AttachLocalController(ALocalControllerNode LocalController) new JObject( new JProperty("timestamp", timestamp. ToIso8601()), new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), + new JProperty("connection", connection.ToJSON()), new JProperty("request", request. ToBinary().ToBase64()) )); @@ -5686,35 +5701,48 @@ public void AttachLocalController(ALocalControllerNode LocalController) connection, request, response, - runtime) => - - EventLog.SubmitEvent(nameof(LocalController.OCPP.IN.OnBinaryDataTransferResponseReceived), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - //new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToBinary().ToBase64()), - new JProperty("response", response. ToBinary().ToBase64()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + runtime, + cancellationToken) => + + EventLog.SubmitEvent( + nameof(LocalController.OCPP.IN.OnBinaryDataTransferResponseReceived), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToBinary().ToBase64()) + : null, + new JProperty("response", response. ToBinary().ToBase64()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); LocalController.OCPP.OUT.OnBinaryDataTransferResponseSent += (timestamp, - sender, - connection, - request, - response, - runtime) => + sender, + connection, + request, + response, + runtime) => - EventLog.SubmitEvent(nameof(LocalController.OCPP.OUT.OnBinaryDataTransferResponseSent), - new JObject( - new JProperty("timestamp", timestamp. ToIso8601()), - new JProperty("sender", sender.Id), - new JProperty("connection", connection.ToJSON()), - new JProperty("request", request. ToBinary().ToBase64()), - new JProperty("response", response. ToBinary().ToBase64()), - new JProperty("runtime", runtime. TotalMilliseconds) - )); + EventLog.SubmitEvent( + nameof(LocalController.OCPP.OUT.OnBinaryDataTransferResponseSent), + JSONObject.Create( + new JProperty("timestamp", timestamp. ToIso8601()), + new JProperty("sender", sender.Id), + new JProperty("connection", connection.ToJSON()), + request is not null + ? new JProperty("request", request. ToBinary().ToBase64()) + : null, + new JProperty("response", response. ToBinary().ToBase64()), + runtime.HasValue + ? new JProperty("runtime", runtime.Value.TotalMilliseconds) + : null + ) + ); #endregion diff --git a/WWCP_OCPPv2.1_Tests/CSMS/CSMS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/CSMS/CSMS_Messages_Tests.cs index 55b5050a1..1d6bff4a6 100644 --- a/WWCP_OCPPv2.1_Tests/CSMS/CSMS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/CSMS/CSMS_Messages_Tests.cs @@ -1608,7 +1608,7 @@ chargingStation2 is not null && var dataTransferRequests = new ConcurrentList(); - chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -1664,7 +1664,7 @@ chargingStation2 is not null && var dataTransferRequests = new ConcurrentList(); - chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -1727,7 +1727,7 @@ chargingStation2 is not null && var dataTransferRequests = new ConcurrentList(); - chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -1787,7 +1787,7 @@ chargingStation2 is not null && var dataTransferRequests = new ConcurrentList(); - chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation1.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/ChargingStation/CS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/ChargingStation/CS_Messages_Tests.cs index 58ff049f9..d54150e44 100644 --- a/WWCP_OCPPv2.1_Tests/ChargingStation/CS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/ChargingStation/CS_Messages_Tests.cs @@ -654,7 +654,7 @@ chargingStation2 is not null && var dataTransferRequests= new ConcurrentList(); - testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -709,7 +709,7 @@ chargingStation2 is not null && var dataTransferRequests= new ConcurrentList(); - testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -771,7 +771,7 @@ chargingStation2 is not null && var dataTransferRequests= new ConcurrentList(); - testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + testCSMS01.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { dataTransferRequests.TryAdd(dataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/CSMS/CSMS_SendBinaryData_Tests.cs b/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/CSMS/CSMS_SendBinaryData_Tests.cs index 505c65ec1..322836f08 100644 --- a/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/CSMS/CSMS_SendBinaryData_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/CSMS/CSMS_SendBinaryData_Tests.cs @@ -65,7 +65,7 @@ chargingStation2 is not null && var binaryDataTransferRequests = new ConcurrentList(); - chargingStation1.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, binaryDataTransferRequest) => { + chargingStation1.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, binaryDataTransferRequest, ct) => { binaryDataTransferRequests.TryAdd(binaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/ChargingStation/CS_SendBinaryData_Tests.cs b/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/ChargingStation/CS_SendBinaryData_Tests.cs index 7793441db..067f01fbf 100644 --- a/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/ChargingStation/CS_SendBinaryData_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/Extensions/BinaryStreamsExtensions/ChargingStation/CS_SendBinaryData_Tests.cs @@ -63,7 +63,7 @@ chargingStation2 is not null && var binaryDataTransferRequests= new ConcurrentList(); - testCSMS01.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, binaryDataTransferRequest) => { + testCSMS01.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, binaryDataTransferRequest, ct) => { binaryDataTransferRequests.TryAdd(binaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/CSMS/CSMS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/CSMS/CSMS_Messages_Tests.cs index b096ba130..2488a443a 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/CSMS/CSMS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/CSMS/CSMS_Messages_Tests.cs @@ -200,7 +200,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - chargingStation1.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, incomingDataTransferRequest) => { + chargingStation1.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, incomingDataTransferRequest, ct) => { csIncomingDataTransferRequests.TryAdd(incomingDataTransferRequest); return Task.CompletedTask; }; @@ -320,7 +320,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - chargingStation1.OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest) => { + chargingStation1.OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest, ct) => { csIncomingBinaryDataTransferRequests.TryAdd(incomingBinaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/ChargingStation/CS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/ChargingStation/CS_Messages_Tests.cs index 501b10f99..34d8a070f 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/ChargingStation/CS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/ChargingStation/CS_Messages_Tests.cs @@ -255,7 +255,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - testCSMS01.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest) => { + testCSMS01.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest, ct) => { csmsIncomingBinaryDataTransferRequests.TryAdd(incomingBinaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs index 55c0bbeb8..b723fd232 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs @@ -218,7 +218,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, DataTransferRequest) => { + chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, DataTransferRequest, ct) => { csDataTransferRequests. TryAdd(DataTransferRequest); return Task.CompletedTask; }; @@ -228,7 +228,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, DataTransferRequest, DataTransferResponse, runtime) => { + CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, DataTransferRequest, DataTransferResponse, runtime, ct) => { csmsDataTransferResponsesReceived.TryAdd(DataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_NN_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_NN_Tests.cs index b1c2a4e80..2bfbde0e5 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_NN_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CSMS_2_NN_Tests.cs @@ -193,7 +193,7 @@ CSMS is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { nnDataTransferRequestsReceived. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -208,7 +208,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csmsDataTransferResponsesReceived.TryAdd(dataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs index f9f9518fc..88797c27e 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs @@ -254,7 +254,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csmsDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -264,7 +264,7 @@ CSMS is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived. TryAdd(dataTransferResponse); return Task.CompletedTask; }; @@ -413,7 +413,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csmsDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -423,7 +423,7 @@ CSMS is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived. TryAdd(dataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_NN_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_NN_Tests.cs index 63d473bea..3bc4280c1 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_NN_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/CS_2_NN_Tests.cs @@ -236,7 +236,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { nnDataTransferRequestsReceived. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -251,7 +251,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived.TryAdd(dataTransferResponse); return Task.CompletedTask; }; @@ -388,7 +388,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, bootNotificationRequest) => { + localController.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, bootNotificationRequest, ct) => { nnBinaryDataTransferRequestsReceived. TryAdd(bootNotificationRequest); return Task.CompletedTask; }; @@ -403,7 +403,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnBinaryDataTransferResponseReceived += (timestamp, sender, connection, bootNotificationRequest, bootNotificationResponse, runtime) => { + chargingStation.OCPP.IN. OnBinaryDataTransferResponseReceived += (timestamp, sender, connection, bootNotificationRequest, bootNotificationResponse, runtime, ct) => { csBinaryDataTransferResponsesReceived.TryAdd(bootNotificationResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CSMS_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CSMS_Tests.cs index c945aa2ad..c14515b85 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CSMS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CSMS_Tests.cs @@ -335,7 +335,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csmsDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -345,7 +345,7 @@ CSMS is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, bootNotificationResponse, runtime) => { + localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, bootNotificationResponse, runtime, ct) => { nnDataTransferResponsesReceived. TryAdd(bootNotificationResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CS_Tests.cs b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CS_Tests.cs index 33a8c2354..578f82848 100644 --- a/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/NetworkingNode/DefaultOverlayNetwork/NN_2_CS_Tests.cs @@ -197,7 +197,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -207,7 +207,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, resetResponse, runtime) => { + localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, resetResponse, runtime, ct) => { nnDataTransferResponsesReceived.TryAdd(resetResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/CSMS/CSMS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/CSMS/CSMS_Messages_Tests.cs index 00e2a8669..1379ca5bd 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/CSMS/CSMS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/CSMS/CSMS_Messages_Tests.cs @@ -200,7 +200,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - chargingStation1.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, incomingDataTransferRequest) => { + chargingStation1.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, incomingDataTransferRequest, ct) => { csIncomingDataTransferRequests.TryAdd(incomingDataTransferRequest); return Task.CompletedTask; }; @@ -320,7 +320,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - chargingStation1.OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest) => { + chargingStation1.OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest, ct) => { csIncomingBinaryDataTransferRequests.TryAdd(incomingBinaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/ChargingStation/CS_Messages_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/ChargingStation/CS_Messages_Tests.cs index aad3bdaa3..63f4ab8df 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/ChargingStation/CS_Messages_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/ChargingStation/CS_Messages_Tests.cs @@ -255,7 +255,7 @@ chargingStation2 is not null && // return Task.CompletedTask; //}; - testCSMS01. OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest) => { + testCSMS01. OCPP.IN. OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, incomingBinaryDataTransferRequest, ct) => { csmsIncomingBinaryDataTransferRequests.TryAdd(incomingBinaryDataTransferRequest); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs index fa0af76ad..52fa80b26 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_CS_Tests.cs @@ -218,7 +218,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, DataTransferRequest) => { + chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, DataTransferRequest, ct) => { csDataTransferRequests. TryAdd(DataTransferRequest); return Task.CompletedTask; }; @@ -228,7 +228,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, DataTransferRequest, DataTransferResponse, runtime) => { + CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, DataTransferRequest, DataTransferResponse, runtime, ct) => { csmsDataTransferResponsesReceived.TryAdd(DataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_LC_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_LC_Tests.cs index f7fde9267..154ec0351 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_LC_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CSMS_2_LC_Tests.cs @@ -194,7 +194,7 @@ CSMS is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + localController.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { nnDataTransferRequestsReceived. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -209,7 +209,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + CSMS. OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csmsDataTransferResponsesReceived.TryAdd(dataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs index ccf227a6c..6e6791e32 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_CSMS_Tests.cs @@ -266,7 +266,7 @@ CSMS is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived. TryAdd(dataTransferResponse); return Task.CompletedTask; }; @@ -425,7 +425,7 @@ CSMS is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived. TryAdd(dataTransferResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_LC_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_LC_Tests.cs index 292c3d7e6..397472e97 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_LC_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/CS_2_LC_Tests.cs @@ -237,7 +237,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + localController.OCPP.IN.OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { nnDataTransferRequestsReceived. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -252,7 +252,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, dataTransferResponse, runtime) => { + chargingStation.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, dataTransferResponse, runtime, ct) => { csDataTransferResponsesReceived.TryAdd(dataTransferResponse); return Task.CompletedTask; }; @@ -389,7 +389,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, bootNotificationRequest) => { + localController.OCPP.IN.OnBinaryDataTransferRequestReceived += (timestamp, sender, connection, bootNotificationRequest, ct) => { nnBinaryDataTransferRequestsReceived. TryAdd(bootNotificationRequest); return Task.CompletedTask; }; @@ -404,7 +404,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnBinaryDataTransferResponseReceived += (timestamp, sender, connection, bootNotificationRequest, bootNotificationResponse, runtime) => { + chargingStation.OCPP.IN. OnBinaryDataTransferResponseReceived += (timestamp, sender, connection, bootNotificationRequest, bootNotificationResponse, runtime, ct) => { csBinaryDataTransferResponsesReceived.TryAdd(bootNotificationResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CSMS_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CSMS_Tests.cs index d7f357c22..8b362f1a3 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CSMS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CSMS_Tests.cs @@ -335,7 +335,7 @@ CSMS is not null && return Task.CompletedTask; }; - CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + CSMS. OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csmsDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -345,7 +345,7 @@ CSMS is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, bootNotificationResponse, runtime) => { + localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, bootNotificationResponse, runtime, ct) => { nnDataTransferResponsesReceived. TryAdd(bootNotificationResponse); return Task.CompletedTask; }; diff --git a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CS_Tests.cs b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CS_Tests.cs index ca1a7e0fd..20034950f 100644 --- a/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CS_Tests.cs +++ b/WWCP_OCPPv2.1_Tests/OverlayNetworking/DefaultOverlayNetwork/LC_2_CS_Tests.cs @@ -197,7 +197,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest) => { + chargingStation.OCPP.IN. OnDataTransferRequestReceived += (timestamp, sender, connection, dataTransferRequest, ct) => { csDataTransferRequests. TryAdd(dataTransferRequest); return Task.CompletedTask; }; @@ -207,7 +207,7 @@ lcOCPPWebSocketServer is not null && return Task.CompletedTask; }; - localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, dataTransferRequest, resetResponse, runtime) => { + localController.OCPP.IN. OnDataTransferResponseReceived += (timestamp, sender, connection, dataTransferRequest, resetResponse, runtime, ct) => { nnDataTransferResponsesReceived.TryAdd(resetResponse); return Task.CompletedTask; };