/// <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 }