Exemple #1
0
        private AsyncResult arQuery;            // The query async result

        /// <summary>
        /// Initiates an asynchronous query operation by sending the message
        /// passed to the target endpoint.
        /// </summary>
        /// <param name="toEP">The target endpoint.</param>
        /// <param name="query">The query message.</param>
        /// <param name="callback">The delegate to be called when the operation completes (or <c>null</c>).</param>
        /// <param name="state">Application specific state (or <c>null</c>).</param>
        /// <returns>The async result used to track the operation.</returns>
        /// <remarks>
        /// <note>
        /// Each call to <see cref="BeginQuery" /> must be matched with a call to <see cref="EndQuery" />.
        /// </note>
        /// </remarks>
        public IAsyncResult BeginQuery(MsgEP toEP, Msg query, AsyncCallback callback, object state)
        {
            Assertion.Test(arQuery == null, "Cannot reuse a query session.");

            this.query = query;

            query._ToEP      = toEP.Clone(true);
            query._FromEP    = base.Router.RouterEP.Clone(true);
            query._SessionID = base.SessionID;
            query._Flags    |= MsgFlag.OpenSession | MsgFlag.ServerSession;

            if (base.Router.DeadRouterDetection)
            {
                query._Flags |= MsgFlag.ReceiptRequest;
            }

            retry     = 0;
            retryTime = base.StartTime + TimeSpan.FromTicks(base.Router.SessionTimeout.Ticks);
            arQuery   = new AsyncResult(base.SessionManager, callback, state);
            response  = null;
            error     = null;

            base.TTD       = DateTime.MaxValue;   // Client side QuerySessions handle their own lifespan
            base.IsRunning = true;

            try
            {
                query._Trace(base.Router, 2, "Q/R Query", null);
                base.SessionManager.ClientStart(this);
                base.Router.Send(query);
            }
            catch (Exception e)
            {
                AsyncResult arTemp;

                arQuery.Notify(e);
                arTemp  = arQuery;
                arQuery = null;

                base.IsRunning = false;

                return(arTemp);
            }

            arQuery.Started();
            return(arQuery);
        }
Exemple #2
0
        public void MsgEP_Broadcast_Physical()
        {
            MsgEP ep;

            ep = new MsgEP("physical://seg0/seg1");
            Assert.IsTrue(ep.IsPhysical);
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1", ep.ToString());
            ep = ep.Clone();
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1", ep.ToString());

            ep = new MsgEP("physical://seg0/seg1?broadcast");
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1?broadcast", ep.ToString());
            ep = ep.Clone();
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1?broadcast", ep.ToString());

            ep = new MsgEP("physical://seg0/seg1?BROADCAST");
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1?broadcast", ep.ToString());
            ep = ep.Clone();
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1?broadcast", ep.ToString());

            ep           = new MsgEP("physical://seg0/seg1");
            ep.Broadcast = true;
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1?broadcast", ep.ToString());

            ep           = new MsgEP("physical://seg0/seg1?broadcast");
            ep.Broadcast = false;
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("physical://seg0/seg1", ep.ToString());

            // Compare() does not ignore the broadcast parameter.

            Assert.IsTrue(MsgEP.Compare("physical://seg0/seg1", "physical://seg0/seg1") == 0);
            Assert.IsTrue(MsgEP.Compare("physical://seg0/seg1", "physical://seg0/seg1?broadcast") != 0);

            // Equals() ignores the broadcast parameter.

            Assert.AreEqual((MsgEP)"physical://seg0/seg1", (MsgEP)"physical://seg0/seg1");
            Assert.AreEqual((MsgEP)"physical://seg0/seg1", (MsgEP)"physical://seg0/seg1?broadcast");
        }
Exemple #3
0
        public void MsgEP_Broadcast_Logical()
        {
            MsgEP ep;

            ep = new MsgEP("logical://seg0/seg1");
            Assert.IsTrue(ep.IsLogical);
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1", ep.ToString());
            ep = ep.Clone();
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1", ep.ToString());

            ep = new MsgEP("logical://seg0/seg1?broadcast");
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1?broadcast", ep.ToString());
            ep = ep.Clone();
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1?broadcast", ep.ToString());

            ep = new MsgEP("logical://seg0/seg1?BROADCAST");
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1?broadcast", ep.ToString());
            ep = ep.Clone();
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1?broadcast", ep.ToString());

            try
            {
                ep = new MsgEP("logical://seg0/seg1?badparam=5");
                Assert.Fail("Expected an ArgumentException");
            }
            catch (Exception e)
            {
                Assert.IsInstanceOfType(e, typeof(ArgumentException));
            }

            ep           = new MsgEP("logical://seg0/seg1");
            ep.Broadcast = true;
            Assert.IsTrue(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1?broadcast", ep.ToString());

            ep           = new MsgEP("logical://seg0/seg1?broadcast");
            ep.Broadcast = false;
            Assert.IsFalse(ep.Broadcast);
            Assert.AreEqual("logical://seg0/seg1", ep.ToString());

            // Compare() does not ignore the broadcast parameter.

            Assert.IsTrue(MsgEP.Compare("logical://seg0/seg1", "logical://seg0/seg1") == 0);
            Assert.IsTrue(MsgEP.Compare("logical://seg0/seg1", "logical://seg0/seg1?broadcast") != 0);

            // Equals() and LogicalMatch() ignore the broadcast parameter.

            Assert.AreEqual((MsgEP)"logical://seg0/seg1", (MsgEP)"logical://seg0/seg1");
            Assert.AreEqual((MsgEP)"logical://seg0/seg1", (MsgEP)"logical://seg0/seg1?broadcast");

            Assert.IsTrue(new MsgEP("logical://seg0/seg1").LogicalMatch("logical://seg0/seg1"));
            Assert.IsTrue(new MsgEP("logical://seg0/seg1").LogicalMatch("logical://seg0/seg1?broadcast"));
            Assert.IsTrue(new MsgEP("logical://seg0/seg1?broadcast").LogicalMatch("logical://seg0/seg1"));
            Assert.IsTrue(new MsgEP("logical://seg0/seg1?broadcast").LogicalMatch("logical://seg0/seg1?broadcast"));
        }