コード例 #1
0
        public override async Task <PipeEndpoint> Connect(int index, CancellationToken cancel = default(CancellationToken))
        {
            object connecting_key = new object();

            connecting.Add(Tuple.Create(index, connecting_key));
            int rindex = -1;

            try
            {
                MessageEntry m = new MessageEntry(MessageEntryType.PipeConnectReq, MemberName);
                m.AddElement("index", index);
                MessageEntry ret = await stub.ProcessRequest(m, cancel);

                rindex = (ret.FindElement("index").CastData <int[]>())[0];

                PipeEndpoint e;
                if (early_endpoints.ContainsKey(rindex))
                {
                    e = early_endpoints[rindex];
                    early_endpoints.Remove(rindex);
                }
                else
                {
                    e = new PipeEndpoint(this, rindex);
                }
                pipeendpoints.Add(rindex, e);
                return(e);
            }
            finally
            {
                connecting.RemoveAll(x => Object.ReferenceEquals(x.Item2, connecting_key));
                if (connecting.Count == 0)
                {
                    early_endpoints.Clear();
                }
            }
        }
コード例 #2
0
        public async override Task <WireConnection> Connect(CancellationToken cancel = default(CancellationToken))
        {
            try
            {
                lock (connect_lock)
                {
                    if (connection != null)
                    {
                        throw new InvalidOperationException("Already connected");
                    }
                    connection = new WireConnection(this);
                }
                MessageEntry m   = new MessageEntry(MessageEntryType.WireConnectReq, MemberName);
                MessageEntry ret = await stub.ProcessRequest(m, cancel);


                return(connection);
            }
            catch (Exception e)
            {
                connection = null;
                throw e;
            }
        }