Example #1
0
        /// <summary>
        /// 抓取完成回调
        /// </summary>
        /// <param name="data">抓取数据</param>
        private unsafe void onCrawl(int count)
        {
#if HELLO
            if (count <= 10)
            {
                keepAliveCount = 0;
                Interlocked.Increment(ref clientTask.ErrorCount);
                Console.WriteLine("Error[" + count.toString() + "]");
            }
            else if (buffer[9] != '2')
            {
                keepAliveCount = 0;
                Interlocked.Increment(ref clientTask.ErrorCount);
                Console.WriteLine("Error " + System.Text.Encoding.ASCII.GetString(buffer, 0, 12));
            }
            if (keepAliveCount == 0)
            {
                Socket socket = this.socket;
                clientTask.Next(this);
                socket.Close();
            }
            else
            {
                clientTask.Next(this);
            }
#else
            try
            {
                int bodyCount = -1;
                if (count > 0)
                {
                    fixed(byte *bufferFixed = buffer)
                    {
                        byte *end = bufferFixed + count, start = fastCSharp.unsafer.memory.FindLast(bufferFixed, end, 10);

                        if (start != null && (int)(++start - bufferFixed) >= (int)(end - start))
                        {
                            char *write = (char *)bufferFixed;
                            while (start != end)
                            {
                                *write++ = (char)*start++;
                            }
                            bodyCount = (int)(write - (char *)bufferFixed);
                            int value = (requestType & 1) == 0 ? left + right : (left ^ right), returnValue;
                            switch (requestType)
                            {
                            case 0:
                            case 1:
                                returnValue = value + 1;
                                fastCSharp.emit.jsonParser.UnsafeParse <int>((char *)bufferFixed, bodyCount, ref returnValue);
                                break;

                            case 2:
                            case 3:
                            case 4:
                            case 5:
                            case 6:
                            case 7:
                                fastCSharp.code.cSharp.tcpBase.parameterJsonToSerialize <int> return2 = default(fastCSharp.code.cSharp.tcpBase.parameterJsonToSerialize <int>);
                                if (fastCSharp.emit.jsonParser.UnsafeParse <fastCSharp.code.cSharp.tcpBase.parameterJsonToSerialize <int> >((char *)bufferFixed, bodyCount, ref return2))
                                {
                                    returnValue = return2.Return;
                                }
                                else
                                {
                                    returnValue = value + 1;
                                }
                                break;

                            default:
                                returnValue = value + 1;
                                break;
                            }
                            if (returnValue == value)
                            {
                                //Console.WriteLine("OK : " + left.toString() + "," + right.toString() + "[" + value.toString() + "]");
                                return;
                            }
                            Interlocked.Increment(ref clientTask.ErrorCount);
                            Console.WriteLine("Error : " + url + " " + left.toString() + "," + right.toString() + "[" + value.toString() + "] <> " + new string((char *)bufferFixed, 0, bodyCount));
                            return;
                        }
                    }
                }
                keepAliveCount = 0;
                Interlocked.Increment(ref clientTask.ErrorCount);
                Console.WriteLine("Error[" + count.toString() + "," + bodyCount.toString() + "] : " + url);
            }
            finally
            {
                if (keepAliveCount == 0)
                {
                    Socket socket = this.socket;
                    clientTask.Next(this);
                    socket.Close();
                }
                else
                {
                    clientTask.Next(this);
                }
            }
#endif
        }