private void DoPublish(string subject, Message message, uint delay = 0)
        {
            if (Message.RECEIVE_ONLY == subject)
            {
                throw new InvalidOperationException(Resources.NatsMessagingProvider_PublishReceiveOnlyMessage);
            }

            log.Debug(Resources.NatsMessagingProvider_PublishMessage_Fmt, subject, delay, message);
            string formattedMessage = NatsCommand.FormatPublishMessage(subject, message);

            log.Trace(Resources.NatsMessagingProvider_LogSent_Fmt, formattedMessage);

            if (delay == 0)
            {
                Write(formattedMessage);
            }
            else
            {
                var delayTimer = new MessageTimer(delay, formattedMessage)
                {
                    AutoReset = false
                };
                delayTimer.Elapsed += DelayedPublishElapsedHandler;
                delayTimer.Enabled  = true;
            }
        }
        private void SendSubscription(NatsSubscription subscription)
        {
            log.Debug(Resources.NatsMessagingProvider_SubscribingToSubject_Fmt, subscription, subscription.SubscriptionID);
            string formattedMessage = NatsCommand.FormatSubscribeMessage(subscription, subscription.SubscriptionID);

            log.Trace(Resources.NatsMessagingProvider_LogSent_Fmt, formattedMessage);
            Write(formattedMessage);
        }
        private void SendConnectMessage()
        {
            if (NatsMessagingStatus.RUNNING != status)
            {
                throw new InvalidOperationException();
            }

            var message = new Connect
            {
                Verbose  = false,
                Pedantic = false,
            };

            if (false == natsUser.IsNullOrWhiteSpace())
            {
                message.User     = natsUser;
                message.Password = natsPassword ?? String.Empty;
            }

            string msgstr = NatsCommand.FormatConnectMessage(message);

            log.Debug(Resources.NatsMessagingProvider_PublishConnect_Fmt, msgstr);
            Write(msgstr);
        }
 public void Publish(NatsCommand command, Message message)
 {
     DoPublish(command.Command, message);
 }