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