Exemple #1
0
        protected virtual void WriteTransactionInfo(TransactionInfo command, BinaryWriter dataOut)
        {
            string          type            = "BEGIN";
            TransactionType transactionType = (TransactionType)command.Type;

            switch (transactionType)
            {
            case TransactionType.Commit:
                command.ResponseRequired = true;
                type = "COMMIT";
                break;

            case TransactionType.Rollback:
                command.ResponseRequired = true;
                type = "ABORT";
                break;
            }

            Tracer.Debug("StompWireFormat - For transaction type: " + transactionType +
                         " we are using command type: " + type);

            StompFrame frame = new StompFrame(type);

            if (command.ResponseRequired)
            {
                frame.SetProperty("receipt", command.CommandId);
            }

            frame.SetProperty("transaction", StompHelper.ToStomp(command.TransactionId));
            frame.ToStream(dataOut);
        }
Exemple #2
0
        protected virtual void WriteConsumerInfo(ConsumerInfo command, BinaryWriter dataOut)
        {
            StompFrame frame = new StompFrame("SUBSCRIBE");

            if (command.ResponseRequired)
            {
                frame.SetProperty("receipt", command.CommandId);
            }

            frame.SetProperty("destination", StompHelper.ToStomp(command.Destination));
            frame.SetProperty("id", StompHelper.ToStomp(command.ConsumerId));
            frame.SetProperty("durable-subscriber-name", command.SubscriptionName);
            frame.SetProperty("selector", command.Selector);
            frame.SetProperty("ack", StompHelper.ToStomp(command.AckMode));

            Tracer.Debug("SUBSCRIBE : Outbound AckMode = " + frame.GetProperty("ack"));

            if (command.NoLocal)
            {
                frame.SetProperty("no-local", command.NoLocal.ToString());
            }

            // ActiveMQ extensions to STOMP

            if (command.Transformation != null)
            {
                frame.SetProperty("transformation", command.Transformation);
            }
            else
            {
                //    frame.SetProperty("transformation", "jms-map-xml");
            }

            frame.SetProperty("activemq.dispatchAsync", command.DispatchAsync);

            if (command.Exclusive)
            {
                frame.SetProperty("activemq.exclusive", command.Exclusive);
            }

            if (command.SubscriptionName != null)
            {
                frame.SetProperty("activemq.subscriptionName", command.SubscriptionName);
                // For an older 4.0 broker we need to set this header so they get the
                // subscription as well..
                frame.SetProperty("activemq.subcriptionName", command.SubscriptionName);
            }

            frame.SetProperty("activemq.maximumPendingMessageLimit", command.MaximumPendingMessageLimit);
            frame.SetProperty("activemq.prefetchSize", command.PrefetchSize);
            frame.SetProperty("activemq.priority", command.Priority);

            if (command.Retroactive)
            {
                frame.SetProperty("activemq.retroactive", command.Retroactive);
            }

            frame.ToStream(dataOut);
        }
Exemple #3
0
        protected virtual void WriteRemoveInfo(RemoveInfo command, BinaryWriter dataOut)
        {
            StompFrame frame = new StompFrame("UNSUBSCRIBE");
            object     id    = command.ObjectId;

            if (id is ConsumerId)
            {
                ConsumerId consumerId = id as ConsumerId;
                if (command.ResponseRequired)
                {
                    frame.SetProperty("receipt", command.CommandId);
                }
                frame.SetProperty("id", StompHelper.ToStomp(consumerId));
                frame.ToStream(dataOut);
            }
        }
Exemple #4
0
        protected virtual void WriteMessageAck(MessageAck command, BinaryWriter dataOut)
        {
            StompFrame frame = new StompFrame("ACK");

            if (command.ResponseRequired)
            {
                frame.SetProperty("receipt", "ignore:" + command.CommandId);
            }

            frame.SetProperty("message-id", StompHelper.ToStomp(command.LastMessageId));

            Tracer.Debug("ACK - Outbound MessageId = " + frame.GetProperty("message-id"));

            if (command.TransactionId != null)
            {
                frame.SetProperty("transaction", StompHelper.ToStomp(command.TransactionId));
            }

            frame.ToStream(dataOut);
        }
Exemple #5
0
        protected virtual void WriteMessage(Message command, BinaryWriter dataOut)
        {
            StompFrame frame = new StompFrame("SEND");

            if (command.ResponseRequired)
            {
                frame.SetProperty("receipt", command.CommandId);
            }

            frame.SetProperty("destination", StompHelper.ToStomp(command.Destination));

            if (command.ReplyTo != null)
            {
                frame.SetProperty("reply-to", StompHelper.ToStomp(command.ReplyTo));
            }
            if (command.CorrelationId != null)
            {
                frame.SetProperty("correlation-id", command.CorrelationId);
            }
            if (command.Expiration != 0)
            {
                frame.SetProperty("expires", command.Expiration);
            }
            if (command.Timestamp != 0)
            {
                frame.SetProperty("timestamp", command.Timestamp);
            }
            if (command.Priority != 4)
            {
                frame.SetProperty("priority", command.Priority);
            }
            if (command.Type != null)
            {
                frame.SetProperty("type", command.Type);
            }
            if (command.TransactionId != null)
            {
                frame.SetProperty("transaction", StompHelper.ToStomp(command.TransactionId));
            }

            frame.SetProperty("persistent", command.Persistent.ToString().ToLower());
            frame.SetProperty("NMSXDeliveryMode", command.Persistent.ToString().ToLower());

            if (command.NMSXGroupID != null)
            {
                frame.SetProperty("JMSXGroupID", command.NMSXGroupID);
                frame.SetProperty("NMSXGroupID", command.NMSXGroupID);
                frame.SetProperty("JMSXGroupSeq", command.NMSXGroupSeq);
                frame.SetProperty("NMSXGroupSeq", command.NMSXGroupSeq);
            }

            // Perform any Content Marshaling.
            command.BeforeMarshall(this);

            // Store the Marshaled Content.
            frame.Content = command.Content;

            if (command is BytesMessage)
            {
                if (command.Content != null && command.Content.Length > 0)
                {
                    frame.SetProperty("content-length", command.Content.Length);
                }

                frame.SetProperty("transformation", "jms-byte");
            }
            else if (command is MapMessage)
            {
                frame.SetProperty("transformation", this.mapMarshaler.Name);
            }

            // Marshal all properties to the Frame.
            IPrimitiveMap map = command.Properties;

            foreach (string key in map.Keys)
            {
                frame.SetProperty(key, map[key]);
            }

            frame.ToStream(dataOut);
        }