public RvCertifiedMultiSubjectMessaging(Rv.CMTransport transport, Uri address) : base(address)
 {
     if (transport == null)
     {
         throw new ArgumentNullException(nameof(transport));
     }
     _transport = transport;
 }
        public bool TryCreateMultiSubject(Uri address, out IMultiSubjectMessaging subscriptionGroup)
        {
            if (!address.Scheme.IsRvScheme())
            {
                subscriptionGroup = null;
                return(false);
            }

            var service = address.Host;
            var config  = GetConfig(service);

            var netTrans = new Rv.NetTransport(service, config.Network, config.Daemon);

            switch (address.Scheme)
            {
            case "rv+cm":
                if (string.IsNullOrEmpty(config.CmName))
                {
                    ThrowCmNameNotConfigured();
                }
                var cmt = new Rv.CMTransport(netTrans);     //TODO: what about ledger files?
                subscriptionGroup = new RvMultiSubjectMessaging(cmt, address);
                break;

            case "rv+dq":
                if (string.IsNullOrEmpty(config.CmName))
                {
                    ThrowCmNameNotConfigured();
                }
                var dqt = new Rv.CMQueueTransport(netTrans, config.CmName);     //TODO: other queue parameters need configuring
                subscriptionGroup = new RvMultiSubjectMessaging(dqt, address);
                break;

            default:
                subscriptionGroup = new RvMultiSubjectMessaging(netTrans, address);
                break;
            }
            return(true);
        }