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); }
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"); }
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")); }