public async Task NegotiateStream_EndReadEndWriteInvalidParameter_Throws()
        {
            byte[] recvBuf = new byte[s_sampleMsg.Length];
            (Stream stream1, Stream stream2) = ConnectedStreams.CreateBidirectional();
            using (var client = new NegotiateStream(stream1))
                using (var server = new NegotiateStream(stream2))
                {
                    await TestConfiguration.WhenAllOrAnyFailedWithTimeout(
                        client.AuthenticateAsClientAsync(CredentialCache.DefaultNetworkCredentials, string.Empty),
                        server.AuthenticateAsServerAsync());

                    await TestConfiguration.WhenAllOrAnyFailedWithTimeout(
                        Task.Factory.FromAsync(client.BeginWrite,
                                               (asyncResult) =>
                    {
                        NegotiateStream authStream = (NegotiateStream)asyncResult.AsyncState;
                        AssertExtensions.Throws <ArgumentNullException>(nameof(asyncResult), () => authStream.EndWrite(null));

                        IAsyncResult result = new MyAsyncResult();
                        AssertExtensions.Throws <ArgumentException>(nameof(asyncResult), () => authStream.EndWrite(result));
                    },
                                               s_sampleMsg, 0, s_sampleMsg.Length, client),
                        Task.Factory.FromAsync(server.BeginRead,
                                               (asyncResult) =>
                    {
                        NegotiateStream authStream = (NegotiateStream)asyncResult.AsyncState;
                        AssertExtensions.Throws <ArgumentNullException>(nameof(asyncResult), () => authStream.EndRead(null));

                        IAsyncResult result = new MyAsyncResult();
                        AssertExtensions.Throws <ArgumentException>(nameof(asyncResult), () => authStream.EndRead(result));
                    },
                                               recvBuf, 0, s_sampleMsg.Length, server));
                }
        }
Exemplo n.º 2
0
        public override IAsyncResult BeginWrite(byte[] buffer, int offset, int size, AsyncCallback callback, object state)
        {
            var action = Interlocked.Exchange(ref writeAction, null);

            if (action == null)
            {
                return(base.BeginWrite(buffer, offset, size, callback, state));
            }

            if (action.Action != null)
            {
                action.Action();
                return(base.BeginWrite(buffer, offset, size, callback, state));
            }

            var myResult        = new MyAsyncResult(action, callback, state);
            var transportResult = base.BeginWrite(buffer, offset, size, WriteCallback, myResult);

            if (transportResult.CompletedSynchronously)
            {
                Task.Factory.StartNew(() => WriteCallback(transportResult));
            }

            return(myResult);
        }
Exemplo n.º 3
0
        public void EndProcessRequest(IAsyncResult result)
        {
            MyAsyncResult rslt = (MyAsyncResult)result;

            rslt.Context.Response.Write(SerializerHelper.ToJson(rslt.Msg));
            rslt.Msg.Content = string.Empty;
        }
        public async Task NegotiateStream_EndAuthenticateInvalidParameter_Throws()
        {
            var network = new VirtualNetwork();

            using (var clientStream = new VirtualNetworkStream(network, isServer: false))
                using (var serverStream = new VirtualNetworkStream(network, isServer: true))
                    using (var client = new NegotiateStream(clientStream))
                        using (var server = new NegotiateStream(serverStream))
                        {
                            await TestConfiguration.WhenAllOrAnyFailedWithTimeout(
                                Task.Factory.FromAsync(client.BeginAuthenticateAsClient, (asyncResult) =>
                            {
                                NegotiateStream authStream = (NegotiateStream)asyncResult.AsyncState;
                                AssertExtensions.Throws <ArgumentNullException>(nameof(asyncResult), () => authStream.EndAuthenticateAsClient(null));

                                IAsyncResult result = new MyAsyncResult();
                                AssertExtensions.Throws <ArgumentException>(nameof(asyncResult), () => authStream.EndAuthenticateAsClient(result));

                                authStream.EndAuthenticateAsClient(asyncResult);
                            }, CredentialCache.DefaultNetworkCredentials, string.Empty, client),

                                Task.Factory.FromAsync(server.BeginAuthenticateAsServer, (asyncResult) =>
                            {
                                NegotiateStream authStream = (NegotiateStream)asyncResult.AsyncState;
                                AssertExtensions.Throws <ArgumentNullException>(nameof(asyncResult), () => authStream.EndAuthenticateAsServer(null));

                                IAsyncResult result = new MyAsyncResult();
                                AssertExtensions.Throws <ArgumentException>(nameof(asyncResult), () => authStream.EndAuthenticateAsServer(result));

                                authStream.EndAuthenticateAsServer(asyncResult);
                            }, server));
                        }
        }
Exemplo n.º 5
0
    static IAsyncResult Begin(int x, AsyncCallback callback, object state)
    {
        Thread        th = new Thread(MyTask);
        MyAsyncResult ar = new MyAsyncResult(x, callback, state);

        th.Start(ar);
        return(ar);
    }
Exemplo n.º 6
0
    static int End(IAsyncResult ar)
    {
        MyAsyncResult mar = (MyAsyncResult)ar;

        mar.AsyncWaitHandle.WaitOne();
        return(mar.Result);    // will throw exception if one
                               // occurred in background task
    }
Exemplo n.º 7
0
        private static void OnSocketCallback(IAsyncResult asyncResult)
        {
            MyAsyncResult receiveAsyncResult = asyncResult.AsyncState as MyAsyncResult;

            if ((receiveAsyncResult != null) && (receiveAsyncResult.Callback != null))
            {
                receiveAsyncResult.AsyncResult = asyncResult;
                receiveAsyncResult.Callback(receiveAsyncResult);
            }
        }
Exemplo n.º 8
0
    public int EndDivide(IAsyncResult result)
    {
        MyAsyncResult internalResult = (MyAsyncResult)result;

        if (internalResult.Exception != null)
        {
            throw internalResult.Exception;
        }
        return(internalResult.Result);
    }
Exemplo n.º 9
0
    public void CancelSort(IAsyncResult asyncResult)
    {
        MyAsyncResult target = asyncResult as MyAsyncResult;

        if (target == null)
        {
            throw new ArgumentException();
        }
        target.Cancel = true;
    }
Exemplo n.º 10
0
    public void EndSort(IAsyncResult asyncResult)
    {
        MyAsyncResult target = asyncResult as MyAsyncResult;

        if (target == null)
        {
            throw new ArgumentException();
        }
        // Add code here to extract any additional information from the IAsyncResult that
        // you might want to return to the client. Perhaps this method will be empty.
    }
Exemplo n.º 11
0
        public int EndSend(IAsyncResult asyncResult)
        {
            MyAsyncResult receiveAsyncResult = asyncResult as MyAsyncResult;

            if (receiveAsyncResult == null)
            {
                throw new ArgumentException("Invalid Async Result", "asyncResult");
            }

            return(_socket.EndSendTo(receiveAsyncResult.AsyncResult));
        }
Exemplo n.º 12
0
        public IAsyncResult BeginSend(byte[] buffer, int offset, int length, IPEndPoint endPoint, AsyncCallback callback, object state)
        {
            MyAsyncResult result =
                new MyAsyncResult()
                {
                    Callback = callback,
                    State = state
                };

            result.AsyncResult = _socket.BeginSendTo(buffer, offset, length, SocketFlags.None, endPoint, OnSocketCallback, result);

            return result;
        }
Exemplo n.º 13
0
        public IAsyncResult BeginSend(byte[] buffer, int offset, int length, IPEndPoint endPoint, AsyncCallback callback, object state)
        {
            MyAsyncResult result =
                new MyAsyncResult()
            {
                Callback = callback,
                State    = state
            };

            result.AsyncResult = _socket.BeginSendTo(buffer, offset, length, SocketFlags.None, endPoint, OnSocketCallback, result);

            return(result);
        }
Exemplo n.º 14
0
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            // 当 cb 被调用时,其内部将会调用 EndProcesssRequest 方法
            // 同时完成 HTTP 最后响应的处理从而完成整个请求

            // 这个方法应该快速返回,避免阻塞线程

            // 此行代码返回后,IIS 工作线程将会返回线程池中,处理其它的 HTTP 请求
            // MyAsyncResult 中的数据处理完成后,应该调用 cb 回调
            // cb 回调将会在内部调用 EndProcessRequest 完成最后的处理
            // 返回的是一个 MyAsyncResult
            // 执行 cb 时的回调参数,也要是同一对象
            myResult = new MyAsyncResult(context, cb, extraData);
            return myResult;
        }
Exemplo n.º 15
0
    static void MyTask(object param)
    {
        MyAsyncResult ar = (MyAsyncResult)param;

        try
        {
            int x = ar.X;
            Thread.Sleep(1000);     // simulate lengthy work
            ar.SignalDone(x * 2);   // demo work = double X
        }
        catch (Exception ex)
        {
            ar.SignalException(ex);
        }
    }
Exemplo n.º 16
0
        public IAsyncResult BeginReceive(AsyncCallback callback, object state)
        {
            MyAsyncResult result =
                new MyAsyncResult()
                {
                    Buffer = new byte[65535],
                    EndPoint = _endPoint,
                    Callback = callback,
                    State = state
                };

            result.AsyncResult = _socket.BeginReceiveFrom(result.Buffer, 0, 65535, SocketFlags.None, ref result.EndPoint, OnSocketCallback, result);

            return result;
        }
Exemplo n.º 17
0
        public IAsyncResult BeginReceive(AsyncCallback callback, object state)
        {
            MyAsyncResult result =
                new MyAsyncResult()
            {
                Buffer   = new byte[65535],
                EndPoint = _endPoint,
                Callback = callback,
                State    = state
            };

            result.AsyncResult = _socket.BeginReceiveFrom(result.Buffer, 0, 65535, SocketFlags.None, ref result.EndPoint, OnSocketCallback, result);

            return(result);
        }
Exemplo n.º 18
0
        public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
        {
            context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
            int mid = int.Parse(context.Request.QueryString["mid"]);

            if (CometManager.Clients.Keys.Contains(mid))
            {
                CometManager.Clients[mid].Context  = context;
                CometManager.Clients[mid].CallBack = cb;
                return(CometManager.Clients[mid]);
            }
            MyAsyncResult asyncResult = new MyAsyncResult(context, cb, mid);

            CometManager.Clients[mid] = asyncResult;
            return(asyncResult);
        }
Exemplo n.º 19
0
    public IAsyncResult BeginSort(IList <T> values, AsyncCallback complete)
    {
        MyAsyncResult asyncResult = new MyAsyncResult();
        Thread        t           = new Thread(() =>
        {
            // Implement your sorting algorithm here.
            // Periodically check asyncResult.Cancel at safe points.
            asyncResult.Complete();
            if (complete != null)
            {
                complete(asyncResult);
            }
        });

        t.Start();
        return(asyncResult);
    }
Exemplo n.º 20
0
    public IAsyncResult BeginDivide(int nominator, int denominator,
                                    AsyncCallback callback, object state)
    {
        MyAsyncResult result = new MyAsyncResult(callback, state);

        ThreadPool.QueueUserWorkItem(cb =>
        {
            Thread.Sleep(10000);

            try
            {
                result.Result = nominator / denominator;
            }
            catch (Exception ex)
            {
                result.Exception = ex;
            }
            result.Complete();
        });

        return(result);
    }
Exemplo n.º 21
0
            public void run()
            {
                if (log.isDebugEnabled())
                {
                    log.debug("run(");
                }

                MyAsyncResult asyncResult = new MyAsyncResult(pthis);

                BAsyncResultIF <BMessage> nextAsyncMethod = new MyAsyncMethod(pthis, asyncResult);

                // Sende den longPoll-Request
                // Im Body befindet sich die Antwort auf die vorige vom Server gestellte Anfrage.
                // Als Ergebnis des longPoll kommt eine neue Serveranfrage (Methode).

                pthis.transport.getWire().sendR(methodResult, nextAsyncMethod);

                if (log.isDebugEnabled())
                {
                    log.debug(")run");
                }
            }
Exemplo n.º 22
0
        public IAsyncResult BeginGetComputers(AsyncCallback callback, object state)
        {
            var entities = new CrmEntitiesEntities();

            var query = (from comp in entities.Computers
                         where comp.Id > 10 && comp.Id < 100
                         orderby comp.Id
                         select comp).Skip(10).Take(25);

            var result = new MyAsyncResult <Computer[]> {
                AsyncState = state
            };

            entities.BeginGetEntities(query, entitiesAsyncResult =>
            {
                IEnumerable <Computer> computers = entities.EndGetEntities <Computer>(entitiesAsyncResult);
                result.Data = computers.ToArray();
                entities.Dispose();
                result.Complete(false);
                callback(result);
            }, null);

            return(result);

            #region TPL Improvements

            var task = Task.Factory.FromAsync <IQueryable <Computer>, IEnumerable <Computer> >(
                entities.BeginGetEntities, entities.EndGetEntities <Computer>, query, state);

            return(task.ContinueWith(res =>
            {
                entities.Dispose();
                callback(task);
            }));

            #endregion
        }
Exemplo n.º 23
0
        public byte[] EndReceive(IAsyncResult asyncResult, out IPEndPoint endPoint)
        {
            MyAsyncResult receiveAsyncResult = asyncResult as MyAsyncResult;

            if (receiveAsyncResult == null)
            {
                throw new ArgumentException("Invalid Async Result", "asyncResult");
            }

            int length = _socket.EndReceiveFrom(receiveAsyncResult.AsyncResult, ref receiveAsyncResult.EndPoint);

            endPoint = receiveAsyncResult.EndPoint as IPEndPoint;

            if (length == 65535)
            {
                return(receiveAsyncResult.Buffer);
            }
            else
            {
                byte[] result = new byte[length];
                Buffer.BlockCopy(receiveAsyncResult.Buffer, 0, result, 0, length);
                return(result);
            }
        }
Exemplo n.º 24
0
 public MyAsyncMethod(HServerR pthis, MyAsyncResult asyncResult)
 {
     this.pthis       = pthis;
     this.asyncResult = asyncResult;
 }