using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServices; using System.Text; using System.Threading; namespace HPSocketCS.Extended { /// /// 客户端接收数据缓存对象 /// public class ReceiveCacheBuffer { public ReceiveCacheBuffer() { } public ReceiveCacheBuffer(Int64 _generateId) { this.generateId = _generateId; } Int64 generateId; /// /// 标识ID /// public Int64 GenerateId { get { return generateId; } set { generateId = value; } } string saveToFileName; /// /// 下载文件时,下载的文件要保存的路径文件名 /// public string SaveToFileName { get { return saveToFileName; } set { saveToFileName = value; } } System.IO.MemoryStream dataBuffer = new System.IO.MemoryStream(); /// /// 数据缓存 /// public System.IO.MemoryStream DataBuffer { get { return dataBuffer; } set { dataBuffer = value; } } long length; /// /// 数据长度 /// public long Length { get { return length; } set { length = value; } } /* long _dataBufferLength; /// /// 数据到缓存区和数据长度 /// public long DataBufferLength { get { return _dataBufferLength; } }*/ /// /// 添加数据到缓存区 /// /// public void AddDataToBuffer(byte[] bytes) { dataBuffer.Write(bytes,0,bytes.Length); //dataBuffer.Flush(); // this._dataBufferLength = bytes.Length; // dataBuffer = Marshal.AllocHGlobal(bytes.Length); // Marshal.Copy(bytes, 0, dataBuffer, bytes.Length); } /// /// 获取缓存区中的数据 /// /// public byte[] GetBufferInData() { try { // byte[] retBytes = new byte[DataBufferLength]; // Marshal.Copy(dataBuffer, retBytes, 0, retBytes.Length); return dataBuffer.GetBuffer(); } catch { return null; } } /// /// 接收完成 /// /// public bool ReceiveComplete(byte[] recBytes, bool isComplete) { try { this.IsReceiveComplete = isComplete; this.AddDataToBuffer(recBytes); if (this.IsReceiveComplete) { this.MEvent.Set(); if (this.CallbackFunction != null) { this.CallbackFunction(new ReturnResultObject(generateId, dataBuffer.GetBuffer())); } } return true; } catch { return false; } } System.ComponentModel.BackgroundWorker backgroundWorker; /// /// 线程操作对象 /// public System.ComponentModel.BackgroundWorker BackgroundWorker { get { return backgroundWorker; } set { backgroundWorker = value; } } DelegateExecuteThreadStart callbackFunction; /// /// 回调函数 /// public DelegateExecuteThreadStart CallbackFunction { get { return callbackFunction; } set { callbackFunction = value; } } bool isReceiveComplete = false; /// /// 是否接收完成 /// public bool IsReceiveComplete { get { return isReceiveComplete; } set { isReceiveComplete = value; } } AutoResetEvent mEvent = new AutoResetEvent(false); /// /// 线程通知 /// public AutoResetEvent MEvent { get { return mEvent; } set { mEvent = value; } } /// /// 释放当前对象使用的资源 /// public void Dispose() { try { /* if (dataBuffer != IntPtr.Zero) { Marshal.FreeHGlobal(dataBuffer); }*/ this.dataBuffer.Close(); this.dataBuffer.Dispose(); this.dataBuffer = null; } catch { } try { mEvent.Set(); mEvent.Close(); mEvent.Dispose(); mEvent = null; } catch { } } } }