private BlazeMessageData EncodeNotification(BlazeNotification notification) { _blazeTypeLookup.TryGetResponseComponentCommand(notification.GetType(), out var component, out var command); var header = new BlazeHeader { Component = component, Command = command, MessageId = 0, //always 0 MessageType = BlazeMessageType.Notification, ErrorCode = notification.BlazeErrorCode }; //TODO: remove stream var notificationOutput = new MemoryStream(); _blazeSerializer.Serialize(notificationOutput, notification); var messageData = new BlazeMessageData { Header = header, Payload = new ReadOnlySequence <byte>(notificationOutput.ToArray()) }; return(messageData); }
public async Task <BlazeMessageData> ProcessMessage(BlazeMessageData requestMessageData) { var requestHeader = requestMessageData.Header; var requestPayload = requestMessageData.Payload; if (_blazeTypeLookup.TryGetRequestType(requestHeader.Component, requestHeader.Command, out var requestType)) { try { var parsedRequest = _blazeDeserializer.Deserialize(requestPayload, requestType); var response = (BlazeResponse)await _mediator.Send(parsedRequest); if (response == null) { Logger.Warn($"Response was null for request {requestType}"); return(null); } var messageType = response.BlazeErrorCode > 0 ? BlazeMessageType.ErrorReply : BlazeMessageType.Reply; var responseHeader = new BlazeHeader { Component = requestHeader.Component, Command = requestHeader.Command, ErrorCode = response.BlazeErrorCode, //TODO: have a better way to handle error code set by the handlers MessageType = messageType, MessageId = requestHeader.MessageId }; //TODO: remove stream var output = new MemoryStream(); _blazeSerializer.Serialize(output, response); var responseMessage = new BlazeMessageData { Header = responseHeader, Payload = new ReadOnlySequence <byte>(output.ToArray()) }; return(responseMessage); } catch (Exception e) { Logger.Error(e); return(null); } } Logger.Error($"Unknown Component: {requestHeader.Component} and Command: 0x{requestHeader.Command:X2}"); _debugParser.TryParseBody(requestPayload); return(null); }
public async Task <IList <BlazeMessageData> > ProcessMessage(BlazeMessageData requestMessageData, ClientContext clientContext) { var requestHeader = requestMessageData.Header; var requestPayload = requestMessageData.Payload; if (_blazeTypeLookup.TryGetRequestType(requestHeader.Component, requestHeader.Command, out var requestType)) { try { var parsedRequest = _blazeDeserializer.Deserialize(requestPayload, requestType); var response = (IBlazeResponse)await _mediator.Send(parsedRequest); var responseHeader = new BlazeHeader { Component = requestHeader.Component, Command = requestHeader.Command, ErrorCode = 0, MessageType = BlazeMessageType.Reply, MessageId = requestHeader.MessageId }; //TODO: remove stream var output = new MemoryStream(); _blazeSerializer.Serialize(output, response); var responseMessage = new BlazeMessageData { Header = responseHeader, Payload = new ReadOnlySequence <byte>(output.ToArray()) }; var responseMessages = new List <BlazeMessageData> { responseMessage }; //Send new notifications while (clientContext.Notifications.TryDequeue(out var notification)) { //TODO: remove stream var notificationOutput = new MemoryStream(); _blazeSerializer.Serialize(notificationOutput, notification.Item2); var messageData = new BlazeMessageData { Header = notification.Item1, Payload = new ReadOnlySequence <byte>(notificationOutput.ToArray()) }; responseMessages.Add(messageData); } return(responseMessages); } catch (Exception e) { Logger.Error(e); return(null); } } Logger.Error($"Unknown Component: {requestHeader.Component} and Command: 0x{requestHeader.Command:X2}"); _debugParser.TryParseBody(requestPayload); return(null); }