Example #1
0
        /// <summary>
        /// 获取数据
        /// </summary>
        private void dataAsync()
        {
            try
            {
#if DOTNET2
                Socket socket = new Net.UnionType { Value = receiveAsyncEventArgs.AsyncState }.Socket;
                if (socket == Socket)
                {
                    receiveCount += socket.EndReceive(receiveAsyncEventArgs, out socketError);
                    if (socketError == SocketError.Success)
                    {
#else
                CHECK:
                if (receiveAsyncEventArgs.SocketError == SocketError.Success)
                {
                    receiveCount += receiveAsyncEventArgs.BytesTransferred;
#endif
                        if (compressionDataSize <= receiveCount - receiveIndex)
                        {
                            fixed (byte* receiveDataFixed = ReceiveBuffer.Buffer)
                            {
                                receiveDataStart = receiveDataFixed + ReceiveBuffer.StartIndex;
                                doCommandLoop();
                                if (loop(false)) return;
                            }
                        }
                        else
                        {
#if DOTNET2
                            if (socket == Socket)
                            {
                                socket.BeginReceive(ReceiveBuffer.Buffer, ReceiveBuffer.StartIndex + receiveCount, receiveBufferSize - receiveCount, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                                if (socketError == SocketError.Success) return;
                            }
#else
                        Socket socket = Socket;
                        if (socket != null)
                        {
                            receiveAsyncEventArgs.SetBuffer(ReceiveBuffer.StartIndex + receiveCount, receiveBufferSize - receiveCount);
                            if (socket.ReceiveAsync(receiveAsyncEventArgs)) return;
                            goto CHECK;

                        }
#endif
                        }
#if DOTNET2
                    }
#endif
                }
#if !DOTNET2
                else socketError = receiveAsyncEventArgs.SocketError;
#endif
            }
            catch (Exception error)
            {
                Server.Log.add(AutoCSer.Log.LogType.Debug, error);
            }
            close();
        }
Example #2
0
        /// <summary>
        /// 获取数据
        /// </summary>
        /// <returns></returns>
        private bool bigDataAsync()
        {
#if DOTNET2
            if (!receiveAsyncEventArgs.CompletedSynchronously) Server.CancelReceiveVerifyCommandTimeout(this);
            Socket socket = new Net.UnionType { Value = receiveAsyncEventArgs.AsyncState }.Socket;
            if (socket == Socket)
            {
                int count = socket.EndReceive(receiveAsyncEventArgs, out socketError);
                if (socketError == SocketError.Success)
                {
#else
            Server.CancelReceiveVerifyCommandTimeout(this);
            CHECK:
            if (receiveAsyncEventArgs.SocketError == SocketError.Success)
            {
                int count = receiveAsyncEventArgs.BytesTransferred;
#endif
                    int nextSize = compressionDataSize - (receiveBigBufferCount += count);
                    if (nextSize == 0)
                    {
                        ReceiveSizeLessCount = 0;
                        doCommandBig();
                        if (isReceiveCommand()) return true;
                    }
                    else if (count >= TcpServer.Server.MinSocketSize || (count > 0 && ReceiveSizeLessCount++ == 0))
                    {
#if DOTNET2
                        if (socket == Socket)
                        {
                            IAsyncResult async = socket.BeginReceive(ReceiveBigBuffer.Buffer, ReceiveBigBuffer.StartIndex + receiveBigBufferCount, nextSize, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                            if (socketError == SocketError.Success)
                            {
                                if (!async.CompletedSynchronously) Server.PushReceiveVerifyCommandTimeout(this, Socket);
                                return true;
                            }
                        }
#else
                    Socket socket = Socket;
                    if (socket != null)
                    {
                        receiveAsyncEventArgs.SetBuffer(ReceiveBigBuffer.Buffer, ReceiveBigBuffer.StartIndex + receiveBigBufferCount, nextSize);
                        if (socket.ReceiveAsync(receiveAsyncEventArgs))
                        {
                            Server.PushReceiveVerifyCommandTimeout(this, Socket);
                            return true;
                        }
                        goto CHECK;
                    }
#endif
                    }
#if DOTNET2
                }
#endif
            }
#if !DOTNET2
            else socketError = receiveAsyncEventArgs.SocketError;
#endif
            return false;
        }
Example #3
0
        /// <summary>
        /// 获取数据
        /// </summary>
        private void compressionDataAsync()
        {
            try
            {
#if DOTNET2
                Socket socket = new Net.UnionType { Value = receiveAsyncEventArgs.AsyncState }.Socket;
                if (socket == Socket)
                {
                    receiveCount += socket.EndReceive(receiveAsyncEventArgs, out socketError);
                    if (socketError == SocketError.Success)
                    {
#else
                CHECK:
                if (receiveAsyncEventArgs.SocketError == SocketError.Success)
                {
                    receiveCount += receiveAsyncEventArgs.BytesTransferred;
#endif
                        int nextSize = compressionDataSize - (receiveCount - receiveIndex);
                        if (nextSize == 0)
                        {
                            if (doCompressionCommand() && isReceiveCommand()) return;
                        }
                        else
                        {
#if DOTNET2
                            if (socket == Socket)
                            {
                                socket.BeginReceive(ReceiveBuffer.Buffer, ReceiveBuffer.StartIndex + receiveCount, nextSize, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                                if (socketError == SocketError.Success) return;
                            }
#else
                        Socket socket = Socket;
                        if (socket != null)
                        {
                            receiveAsyncEventArgs.SetBuffer(ReceiveBuffer.StartIndex + receiveCount, nextSize);
                            if (socket.ReceiveAsync(receiveAsyncEventArgs)) return;
                            goto CHECK;

                        }
#endif
                        }
#if DOTNET2
                    }
#endif
                }
#if !DOTNET2
                else socketError = receiveAsyncEventArgs.SocketError;
#endif
            }
            catch (Exception error)
            {
                Server.Log.add(AutoCSer.Log.LogType.Debug, error);
            }
            close();
        }
Example #4
0
        /// <summary>
        /// 获取数据
        /// </summary>
        private void bigDataAsync()
        {
            try
            {
#if DOTNET2
                Socket socket = new Net.UnionType { Value = receiveAsyncEventArgs.AsyncState }.Socket;
                if (socket == Socket)
                {
                    receiveBigBufferCount += socket.EndReceive(receiveAsyncEventArgs, out socketError);
                    if (socketError == SocketError.Success)
                    {
#else
                CHECK:
                if (receiveAsyncEventArgs.SocketError == SocketError.Success)
                {
                    receiveBigBufferCount += receiveAsyncEventArgs.BytesTransferred;
#endif
                        int nextSize = compressionDataSize - receiveBigBufferCount;
                        if (nextSize == 0)
                        {
                            doCommandBig();
                            if (isReceiveCommand()) return;
                        }
                        else
                        {
#if DOTNET2
                            if (socket == Socket)
                            {
                                socket.BeginReceive(ReceiveBigBuffer.Buffer, ReceiveBigBuffer.StartIndex + receiveBigBufferCount, nextSize, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                                if (socketError == SocketError.Success) return;
                            }
#else
                        Socket socket = Socket;
                        if (socket != null)
                        {
#if !DotNetStandard
                            while (Interlocked.CompareExchange(ref receiveAsyncLock, 1, 0) != 0) Thread.Sleep(0);
#endif
                            receiveAsyncEventArgs.SetBuffer(ReceiveBigBuffer.Buffer, ReceiveBigBuffer.StartIndex + receiveBigBufferCount, nextSize);
                            if (socket.ReceiveAsync(receiveAsyncEventArgs))
                            {
#if !DotNetStandard
                                Interlocked.Exchange(ref receiveAsyncLock, 0);
#endif
                                return;
                            }
#if !DotNetStandard
                            Interlocked.Exchange(ref receiveAsyncLock, 0);
#endif
                            goto CHECK;
                        }
#endif
                        }
#if DOTNET2
                    }
#endif
                }
#if !DOTNET2
                else socketError = receiveAsyncEventArgs.SocketError;
#endif
            }
            catch (Exception error)
            {
                Server.Log.Add(AutoCSer.Log.LogType.Debug, error);
            }
            close();
        }
Example #5
0
        /// <summary>
        /// 数据接收完成后的处理
        /// </summary>
        /// <returns></returns>
        private bool onReceive()
#endif
        {
#if DOTNET2
            System.Net.Sockets.Socket socket = new Net.UnionType { Value = async.AsyncState }.Socket;
            if (socket == Socket)
            {
                SocketError socketError;
                int count = socket.EndReceive(async, out socketError);
                if (socketError == SocketError.Success)
                {
#else
        START:
            if (receiveAsyncEventArgs.SocketError == SocketError.Success)
            {
                int count = receiveAsyncEventArgs.BytesTransferred;
#endif
                    Data.MoveStart(count);
                    if (Data.Length == 0)
                    {
                        ReceiveSizeLessCount = 0;
                        switch (ReceiveType)
                        {
                            case ReceiveType.Response:
                                if ((Header.ContentLength -= Buffer.Length) <= 0) return responseHeader();
                                Data.Set(Buffer.Buffer, Buffer.StartIndex, Math.Min(Header.ContentLength, Buffer.Length));
#if DOTNET2
                                if (socket == Socket)
                                {
                                    async = socket.BeginReceive(Data.Array, Data.Start, Data.Length, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                                    if (socketError == SocketError.Success)
                                    {
                                        if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket);
                                        return true;
                                    }
                                }
                                return false;
#else
                            System.Net.Sockets.Socket socket = Socket;
                            if (socket == null) return false;
                            while (Interlocked.CompareExchange(ref ReceiveAsyncLock, 1, 0) != 0) Thread.Sleep(0);
                            receiveAsyncEventArgs.SetBuffer(Data.Array, Data.Start, Data.Length);
                            if (socket.ReceiveAsync(receiveAsyncEventArgs))
                            {
                                Http.Header.ReceiveTimeout.Push(this, socket);
                                Interlocked.Exchange(ref ReceiveAsyncLock, 0);
                                return true;
                            }
                            Interlocked.Exchange(ref ReceiveAsyncLock, 0);
                            goto START;
#endif
                            case ReceiveType.GetForm: return OnGetForm();
                        }
                    }
                    if ((count >= TcpServer.Server.MinSocketSize || (count > 0 && ReceiveSizeLessCount++ == 0)) && Date.NowTime.Now <= Timeout)
                    {
#if DOTNET2
                        if (socket == Socket)
                        {
                            async = socket.BeginReceive(Data.Array, Data.Start, Data.Length, SocketFlags.None, out socketError, onReceiveAsyncCallback, socket);
                            if (socketError == SocketError.Success)
                            {
                                if (!async.CompletedSynchronously) Http.Header.ReceiveTimeout.Push(this, socket);
                                return true;
                            }
                        }
#else
                    System.Net.Sockets.Socket socket = Socket;
                    if (socket == null) return false;
                    while (Interlocked.CompareExchange(ref ReceiveAsyncLock, 1, 0) != 0) Thread.Sleep(0);
                    receiveAsyncEventArgs.SetBuffer(Data.Start, Data.Length);
                    if (socket.ReceiveAsync(receiveAsyncEventArgs))
                    {
                        Http.Header.ReceiveTimeout.Push(this, socket);
                        Interlocked.Exchange(ref ReceiveAsyncLock, 0);
                        return true;
                    }
                    Interlocked.Exchange(ref ReceiveAsyncLock, 0);
                    goto START;
#endif
                }
#if DOTNET2
                }
#endif
            }
            return false;
        }