public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody) { RequestBodyState requestBodyState = new RequestBodyState(); requestBodyState.endRequestBody = endRequestBody; requestBodyState.outputStream = outputStream; requestBodyState.buffer = data; int count = (int)(contentLength > SEGMENT_SIZE ? SEGMENT_SIZE : contentLength); try { requestBodyState.complete = count; outputStream.BeginWrite(requestBodyState.buffer, 0, count, AsyncStreamCallback, requestBodyState); } catch (Exception ex) { if (outputStream != null) { outputStream.Close(); } QLog.E(TAG, ex.Message, ex); requestBodyState.endRequestBody(ex); requestBodyState = null; } }
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody = null) { try { int completed = 0; while (completed + SEGMENT_SIZE < contentLength) { outputStream.Write(data, completed, SEGMENT_SIZE); outputStream.Flush(); completed += SEGMENT_SIZE; if (progressCallback != null) { UpdateProgress(completed, contentLength); } } if (completed < contentLength) { //包括本身 //包括本身 outputStream.Write(data, completed, (int)(contentLength - completed)); outputStream.Flush(); if (progressCallback != null) { UpdateProgress(contentLength, contentLength); } } if (endRequestBody != null) { endRequestBody(null); } } catch (Exception ex) { if (endRequestBody != null) { endRequestBody(ex); } else { throw; } } finally { if (outputStream != null) { outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); //QLog.D("XIAO", "stream close"); outputStream = null; } } }
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody) { RequestBodyState requestBodyState = new RequestBodyState(); requestBodyState.endRequestBody = endRequestBody; requestBodyState.outputStream = outputStream; requestBodyState.complete = 0; int size = (int)(contentLength > SEGMENT_SIZE ? SEGMENT_SIZE : contentLength); fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read); fileStream.Seek(fileOffset, SeekOrigin.Begin); try { requestBodyState.buffer = new byte[size];// 4kb long remain = contentLength - requestBodyState.complete; if (remain > 0) { int count = fileStream.Read(requestBodyState.buffer, 0, (int)(requestBodyState.buffer.Length > remain ? remain : requestBodyState.buffer.Length)); requestBodyState.complete = count; outputStream.BeginWrite(requestBodyState.buffer, 0, count, AsyncStreamCallback, requestBodyState); } else { if (fileStream != null) { fileStream.Close(); } if (outputStream != null) { outputStream.Close(); } //write over requestBodyState.endRequestBody(null); requestBodyState = null; } } catch (Exception ex) { if (fileStream != null) { fileStream.Close(); } if (outputStream != null) { outputStream.Close(); } QLog.E(TAG, ex.Message, ex); requestBodyState.endRequestBody(ex); requestBodyState = null; } }
public virtual void EndRequest(ulong hash, int requestNumber, int appStatus) { if (debugEnabled) { Logger.Write(LogLevel.Debug, "lt={0:X} EndRequest reqN={1}", hash, requestNumber); } TransportRequest req = GetRequest(hash); if (req != null && req.RequestNumber == requestNumber) { RemoveRequest(req.Hash); EndRequestBody body = new EndRequestBody(appStatus, ProtocolStatus.RequestComplete); byte[] bodyData = body.GetData(); SendRecord(req.fd, RecordType.EndRequest, req.RequestId, bodyData, 0, bodyData.Length); } else { Logger.Write(LogLevel.Error, "Wrong EndRequest"); } }
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody) { requestBodyState = new RequestBodyState(); requestBodyState.endRequestBody = endRequestBody; requestBodyState.outputStream = outputStream; requestBodyState.complete = 0; //write paramters WriteParameters(outputStream); //写入content-disposition: form-data; name = "file"; filename = "xxx"\r\n WriteFileParameters(outputStream); outputStream.Flush(); int size = (int)(realContentLength > SEGMENT_SIZE ? SEGMENT_SIZE : realContentLength); if (srcPath != null) { try { fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read); fileStream.Seek(fileOffset, SeekOrigin.Begin); requestBodyState.buffer = new byte[size];// 4kb long remain = realContentLength - requestBodyState.complete; if (remain > 0) { int count = fileStream.Read(requestBodyState.buffer, 0, (int)(requestBodyState.buffer.Length > remain ? remain : requestBodyState.buffer.Length)); requestBodyState.complete = count; outputStream.BeginWrite(requestBodyState.buffer, 0, count, AsyncStreamCallback, requestBodyState); } else { if (fileStream != null) { fileStream.Close(); } WriteEndLine(outputStream); outputStream.Flush(); //write over requestBodyState.endRequestBody(null); } } catch (Exception ex) { if (fileStream != null) { fileStream.Close(); } QLog.E(TAG, ex.Message, ex); requestBodyState.endRequestBody(ex); } } else if (data != null) { requestBodyState.buffer = data; try { requestBodyState.complete = size; outputStream.BeginWrite(requestBodyState.buffer, 0, size, AsyncStreamCallback, requestBodyState); } catch (Exception ex) { QLog.E(TAG, ex.Message, ex); requestBodyState.endRequestBody(ex); } } }
/// <summary> /// Asynchronous method: handle request body /// </summary> /// <param name="outputStream"></param> /// <param name="EndRequestBody"></param> public abstract void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody);
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody) { //write paramters WriteParameters(outputStream); //写入content-disposition: form-data; name = "file"; filename = "xxx"\r\n WriteFileParameters(outputStream); outputStream.Flush(); //wrtie content: file or bintary try { if (data != null) { int completed = 0; while (completed + SEGMENT_SIZE < realContentLength) { outputStream.Write(data, completed, SEGMENT_SIZE); outputStream.Flush(); completed += SEGMENT_SIZE; if (progressCallback != null) { UpdateProgress(completed, realContentLength); } } if (completed < realContentLength) { outputStream.Write(data, completed, (int)(realContentLength - completed));//包括本身 if (progressCallback != null) { UpdateProgress(realContentLength, realContentLength); } } WriteEndLine(outputStream); outputStream.Flush(); } else if (srcPath != null) { byte[] buffer = new byte[SEGMENT_SIZE]; // 64kb int bytesRead = 0; long completed = bytesRead; fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read); fileStream.Seek(fileOffset, SeekOrigin.Begin); long remain = realContentLength - completed; if (remain > 0) { while ((bytesRead = fileStream.Read(buffer, 0, (int)(buffer.Length > remain ? remain : buffer.Length))) != 0) { outputStream.Write(buffer, 0, bytesRead); outputStream.Flush(); completed += bytesRead; if (progressCallback != null) { UpdateProgress(completed, realContentLength); } remain = realContentLength - completed; if (remain == 0) { break; } } } else { if (progressCallback != null) { completed += bytesRead; UpdateProgress(completed, realContentLength); } } WriteEndLine(outputStream); outputStream.Flush(); } endRequestBody(null); } catch (Exception ex) { endRequestBody(ex); } finally { if (fileStream != null) { fileStream.Close(); fileStream.Dispose(); //QLog.D("XIAO", "stream close"); fileStream = null; } if (outputStream != null) { outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); //QLog.D("XIAO", "stream close"); outputStream = null; } } }
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody) { FileStream fileStream = null; try { byte[] buffer = new byte[SEGMENT_SIZE]; int bytesRead = 0; long completed = bytesRead; fileStream = new FileStream(srcPath, FileMode.Open, FileAccess.Read); fileStream.Seek(fileOffset, SeekOrigin.Begin);//seek to designated position long remain = contentLength - completed; if (remain > 0) { while ((bytesRead = fileStream.Read(buffer, 0, (int)(buffer.Length > remain ? remain : buffer.Length))) != 0) { outputStream.Write(buffer, 0, bytesRead); outputStream.Flush(); completed += bytesRead; if (progressCallback != null) { UpdateProgress(completed, contentLength); } remain = contentLength - completed; if (remain == 0) { break; } } } else { if (progressCallback != null) { UpdateProgress(completed, contentLength); } } buffer = null; endRequestBody(null); } catch (Exception ex) { QLog.E(TAG, ex.Message, ex); endRequestBody(ex); } finally { if (fileStream != null) { fileStream.Close(); fileStream.Dispose(); //QLog.D("XIAO", "stream close"); fileStream = null; } if (outputStream != null) { outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); //QLog.D("XIAO", "stream close"); outputStream = null; } } }
public override void StartHandleRequestBody(Stream outputStream, EndRequestBody endRequestBody = null) { try { byte[] buffer = new byte[SEGMENT_SIZE]; int bytesRead = 0; long completed = bytesRead; //seek to designated position //seek to designated position stream.Seek(fileOffset, SeekOrigin.Begin); long remain = contentLength - completed; if (remain > 0) { while ((bytesRead = stream.Read(buffer, 0, (int)(buffer.Length > remain ? remain : buffer.Length))) != 0) { outputStream.Write(buffer, 0, bytesRead); outputStream.Flush(); completed += bytesRead; if (progressCallback != null) { UpdateProgress(completed, contentLength); } remain = contentLength - completed; if (remain == 0) { break; } } } else { if (progressCallback != null) { UpdateProgress(completed, contentLength); } } buffer = null; if (endRequestBody != null) { endRequestBody(null); } } catch (Exception ex) { if (endRequestBody != null) { endRequestBody(ex); } else { throw; } } finally { if (outputStream != null) { outputStream.Flush(); outputStream.Close(); outputStream.Dispose(); //QLog.D("XIAO", "stream close"); outputStream = null; } } }