SmartOS/TokenNet/TokenDataMessage.cpp

124 lines
2.2 KiB
C++

#include "TokenDataMessage.h"
#include "Message\BinaryPair.h"
TokenDataMessage::TokenDataMessage() : Data(0)
{
ID = 0;
Start = 0;
Size = 0;
HasSize = true;
}
TokenDataMessage::TokenDataMessage(const TokenDataMessage& msg) : MessageBase(msg)
{
ID = msg.ID;
Start = msg.Start;
Size = msg.Size;
Data = msg.Data;
}
// 从数据流中读取消息
bool TokenDataMessage::Read(Stream& ms)
{
BinaryPair bp(ms);
bp.Get("ID", ID);
bp.Get("Start", Start);
bp.Get("Size", Size);
bp.Get("Data", Data);
// 自动设置长度,方便业务层使用
if (Size == 0)
{
HasSize = false;
Size = Data.Length();
}
return true;
}
// 把消息写入数据流中
void TokenDataMessage::Write(Stream& ms) const
{
BinaryPair bp(ms);
if(ID) bp.Set("ID", ID);
bp.Set("Start", Start);
if(HasSize && Size) bp.Set("Size", Size);
if(Data.Length()) bp.Set("Data", Data);
}
// 读取数据
bool TokenDataMessage::ReadData(DataStore& ds)
{
ByteArray bs(Size);
int len = ds.Read(Start, bs);
if(len < 0) return false;
// 设置真实大小
bs.SetLength(len);
return ReadData(bs);
}
// 读取数据
bool TokenDataMessage::ReadData(const Buffer& bs)
{
if(!Size) return false;
TS("TokenDataMessage::ReadData");
//int remain = bs.Length() - Start;
//if(remain < 0) return false;
//int len = Size;
//if(len > remain) len = remain;
//if (len > 0) Data = bs;// .Sub(Start, len);
if (bs.Length() == 0) return false;
Data = bs;
return true;
}
// 写入数据
bool TokenDataMessage::WriteData(DataStore& ds, bool withData)
{
TS("TokenDataMessage::WriteData");
ds.Write(Start, Data);
return true;
}
// 写入数据
bool TokenDataMessage::WriteData(Buffer& bs, bool withData)
{
TS("TokenDataMessage::WriteData");
bs.Copy(Data, Start);
return true;
}
#if DEBUG
// 显示消息内容
String& TokenDataMessage::ToStr(String& str) const
{
str += "DataMsg";
if (Reply) str += '#';
if(ID) str = str + " ID:" + ID;
str = str + " Start:" + Start;
if(HasSize && Size) str = str + " Size:" + Size;
if(Data)
{
str = str + " Data[" + Data.Length() + "]=";
str += Data;
}
return str;
}
#endif