protected virtual ICommand ReadMessage(StompFrame frame) { frame.RemoveProperty(PropertyKeys.Transformation); var message = new BytesMessage { Content = frame.Content }; // Remove any receipt header we might have attached if the outbound command was // sent with response required set to true frame.RemoveProperty(PropertyKeys.Receipt); // Clear any attached content length headers as they aren't needed anymore and can // clutter the Message Properties. frame.RemoveProperty(PropertyKeys.ContentLength); message.Type = frame.RemoveProperty(PropertyKeys.Type); message.Destination = Destination.ConvertToDestination(frame.RemoveProperty(PropertyKeys.Destination), SkipDestinationNameFormatting); message.ReplyTo = Destination.ConvertToDestination(frame.RemoveProperty(PropertyKeys.ReplyTo), SkipDestinationNameFormatting); message.TargetConsumerId = new(frame.RemoveProperty(PropertyKeys.Subscription)); message.CorrelationId = frame.RemoveProperty(PropertyKeys.CorrelationId); message.MessageId = new(frame.RemoveProperty(PropertyKeys.MessageId)); message.Persistent = StompHelper.ToBool(frame.RemoveProperty(PropertyKeys.Persistent), false); // If it came from NMS.Stomp we added this header to ensure its reported on the // receiver side. if (frame.HasProperty(PropertyKeys.NmsxDeliveryMode)) { message.Persistent = StompHelper.ToBool(frame.RemoveProperty(PropertyKeys.NmsxDeliveryMode), false); } if (frame.HasProperty(PropertyKeys.Priority)) { message.Priority = Byte.Parse(frame.RemoveProperty(PropertyKeys.Priority)); } if (frame.HasProperty(PropertyKeys.TimeStamp)) { message.Timestamp = Int64.Parse(frame.RemoveProperty(PropertyKeys.TimeStamp)); } if (frame.HasProperty(PropertyKeys.Expires)) { message.Expiration = Int64.Parse(frame.RemoveProperty(PropertyKeys.Expires)); } if (frame.RemoveProperty(PropertyKeys.Redelivered) != null) { message.RedeliveryCounter = 1; } // now lets add the generic headers foreach (var key in frame.Properties.Keys) { var value = frame.Properties[key]; message.Headers[key] = value; } return(new MessageDispatch(message.TargetConsumerId, message.Destination, message, message.RedeliveryCounter)); }
protected virtual ICommand ReadConnected(StompFrame frame) { _remoteWireFormatInfo = new(); if (frame.HasProperty(PropertyKeys.Version)) { _remoteWireFormatInfo.Version = Single.Parse(frame.RemoveProperty(PropertyKeys.Version), CultureInfo.InvariantCulture); if (_remoteWireFormatInfo.Version > 1.0f) { _encodeHeaders = true; } if (frame.HasProperty(PropertyKeys.Session)) { _remoteWireFormatInfo.Session = frame.RemoveProperty(PropertyKeys.Session); } if (frame.HasProperty(PropertyKeys.HartBeat)) { var hearBeats = frame.RemoveProperty(PropertyKeys.HartBeat) .Split(",".ToCharArray()); if (hearBeats.Length != 2) { throw new IoException("Malformed heartbeat property in Connected Frame."); } _remoteWireFormatInfo.WriteCheckInterval = Int32.Parse(hearBeats[0] .Trim()); _remoteWireFormatInfo.ReadCheckInterval = Int32.Parse(hearBeats[1] .Trim()); } } else { _remoteWireFormatInfo.ReadCheckInterval = 0; _remoteWireFormatInfo.WriteCheckInterval = 0; _remoteWireFormatInfo.Version = 1.0f; } if (_connectedResponseId != -1) { var answer = new Response { CorrelationId = _connectedResponseId }; SendCommand(answer); _connectedResponseId = -1; } else { throw new IoException("Received Connected Frame without a set Response Id for it."); } return(_remoteWireFormatInfo); }