override public void Start() { ProtocolLog.WriteIf(ProtocolLog.LinkDebug, String.Format("{0}: Starting Connector: {1}, {2}", _local_node.Address, _sender, State)); AbortCheck ac = _abort.Value; if (ac != null) { if (ac(this)) { //We are no longer needed: QueueCloseHandler(null, null); return; } } RpcManager rpc = _local_node.Rpc; Channel results = new Channel(); results.EnqueueEvent += this.EnqueueHandler; results.CloseEvent += this.QueueCloseHandler; try { rpc.Invoke(_sender, results, "sys:ctm.ConnectTo", _ctm.ToDictionary()); } catch { //Looks like the _sender had some problem: QueueCloseHandler(null, null); } }
/** * This is a method for use with the RpcManager. Remote * nodes can call the "sys:ctm.ConnectTo" method to * reach this method */ public IDictionary ConnectTo(IDictionary ht) { ConnectToMessage ctm_req = new ConnectToMessage(ht); //Console.Error.WriteLine("[{0}.ConnectTo({1})]", _n.Address, ctm_req); NodeInfo target = ctm_req.Target; if (_n.Address.Equals(target.Address)) { throw new Exception("Trying to connect to myself!"); } string contype = ctm_req.ConnectionType; Linker l = new Linker(_n, target.Address, target.Transports, contype, ctm_req.Token); //Here we start the job: _n.TaskQueue.Enqueue(l); ConnectToMessage resp = GetCtmResponseTo(ctm_req); //Console.Error.WriteLine("[{0}.ConnectTo()->{1}]", _n.Address, resp); return(resp.ToDictionary()); }
public void HTRoundTrip(ConnectToMessage ctm) { ConnectToMessage ctm2 = new ConnectToMessage(ctm.ToDictionary()); Assert.AreEqual(ctm, ctm2, "CTM HT Roundtrip"); }
public void HTRoundTrip(ConnectToMessage ctm) { ConnectToMessage ctm2 = new ConnectToMessage( ctm.ToDictionary() ); Assert.AreEqual(ctm, ctm2, "CTM HT Roundtrip"); }