SmartOS/TinyNet/DataMessage.cpp

54 lines
966 B
C++

#include "DataMessage.h"
// 读取数据
bool ReadData(Stream& ms, const Array& bs, uint offset, uint len)
{
TS("DataMessage::ReadData");
int remain = bs.Length() - offset;
if(remain < 0)
{
ms.Write((byte)2);
ms.WriteEncodeInt(offset);
ms.WriteEncodeInt(len);
return false;
}
else
{
ms.WriteEncodeInt(offset);
if(len > remain) len = remain;
if(len > 0) ms.Write(bs.GetBuffer(), offset, len);
return true;
}
}
// 写入数据
bool WriteData(Stream& ms, Array& bs, uint offset, Stream& ds)
{
TS("DataMessage::WriteData");
// 剩余可写字节数
uint len = ds.Remain();
int remain = bs.Length() - offset;
if(remain < 0)
{
ms.Write((byte)2);
ms.WriteEncodeInt(offset);
ms.WriteEncodeInt(len);
return false;
}
else
{
ms.WriteEncodeInt(offset);
if(len > remain) len = remain;
bs.Copy(ds.Current(), len);
ms.WriteEncodeInt(len);
return true;
}
}