public void OnMsg(LogicalAdvertiseMsg msg) { PhysicalRoute physRoute; MsgEP[] logicalEPs; using (TimedLock.Lock(this.SyncRoot)) { if (!base.EnableP2P) { return; // Don't maintain physical routes if the } // leaf router is not enabled for P2P. physRoute = this.PhysicalRoutes[msg.RouterEP]; if (physRoute == null) { // No physical route exists yet so add one AddPhysicalRoute(msg.RouterEP, msg.AppName, msg.AppDescription, msg.RouterInfo, msg.LogicalEndpointSetID, new IPEndPoint(msg.IPAddress, msg.UdpPort), new IPEndPoint(msg.IPAddress, msg.TcpPort)); physRoute = this.PhysicalRoutes[msg.RouterEP]; } logicalEPs = msg.LogicalEPs; for (int i = 0; i < logicalEPs.Length; i++) { base.LogicalRoutes.Add(new LogicalRoute(logicalEPs[i], physRoute)); } } }
public void Msg_Serialize_LogicalAdvertiseMsg() { LogicalAdvertiseMsg msgIn, msgOut; EnhancedStream es = new EnhancedMemoryStream(); Msg.ClearTypes(); Msg.LoadTypes(Assembly.GetExecutingAssembly()); msgOut = new LogicalAdvertiseMsg(new MsgEP[] { "logical://ep1", "logical://ep2" }, MsgEP.Parse("physical://root.com:80/hub/leaf"), "appname", "appdescription", new MsgRouterInfo(new Version(1000, 0)), 10, 20, Helper.NewGuid()); msgOut._FromEP = MsgEP.Parse("physical://root.com:80/hub/leaf?c=mcast://1.2.3.4:57"); Msg.Save(es, msgOut); es.Seek(0, SeekOrigin.Begin); msgIn = (LogicalAdvertiseMsg)Msg.Load(es); CollectionAssert.AreEqual(msgOut.LogicalEPs, msgIn.LogicalEPs); Assert.AreEqual("physical://root.com:80/hub/leaf", msgIn.RouterEP.ToString()); Assert.AreEqual("appname", msgIn.AppName); Assert.AreEqual("appdescription", msgIn.AppDescription); Assert.AreEqual(new Version(1000, 0), msgIn.RouterInfo.ProtocolVersion); Assert.AreEqual(10, msgIn.UdpPort); Assert.AreEqual(20, msgIn.TcpPort); Assert.AreEqual(msgOut.LogicalEndpointSetID, msgIn.LogicalEndpointSetID); Assert.IsTrue(msgIn.RouterInfo.IsP2P); msgOut = (LogicalAdvertiseMsg)msgIn.Clone(); CollectionAssert.AreEqual(msgOut.LogicalEPs, msgIn.LogicalEPs); Assert.AreEqual("physical://root.com:80/hub/leaf", msgIn.RouterEP.ToString()); Assert.AreEqual("appname", msgIn.AppName); Assert.AreEqual("appdescription", msgIn.AppDescription); Assert.AreEqual(new Version(1000, 0), msgIn.RouterInfo.ProtocolVersion); Assert.AreEqual(10, msgIn.UdpPort); Assert.AreEqual(20, msgIn.TcpPort); Assert.AreEqual(msgOut.LogicalEndpointSetID, msgIn.LogicalEndpointSetID); Assert.IsTrue(msgIn.RouterInfo.IsP2P); }