This commit is contained in:
WangQiang 2016-07-30 07:16:06 +00:00
parent 83640f18c4
commit 25ded4ab71
2 changed files with 16 additions and 14 deletions

View File

@ -7,12 +7,14 @@ UTPacket::UTPacket()
{
Ports.Clear();
Client = nullptr;
Current = this;
}
UTPacket::UTPacket(TokenClient * client)
{
Ports.Clear();
if(client)Client = client;
Set(client);
Current = this;
}
UTPacket::~UTPacket()
@ -20,6 +22,8 @@ UTPacket::~UTPacket()
Ports.Clear();
if (AycUptTaskId)Sys.RemoveTask(AycUptTaskId);
if (CacheA)delete CacheA;
Current = nullptr;
}
bool UTPacket::Set(TokenClient * client)
@ -43,10 +47,10 @@ void UTPacket::AsynUpdata()
bool UTPacket::Send(Buffer &packet)
{
if (!Client|| !packet.Length())return false;
if ( packet.Length() > 256)Client->Invoke("UTPacket", packet); // 超过256 直接发送 减少拷贝的问题
if (!Client || !packet.Length())return false;
if (packet.Length() > 256)Client->Invoke("UTPacket", packet); // 超过256 直接发送 减少拷贝的问题
if (!CacheA)CacheA = new MemoryStream();
if (!AycUptTaskId)AycUptTaskId = Sys.AddTask(&UTPacket::AsynUpdata,this,3000,3000,"UTPacket");
if (!AycUptTaskId)AycUptTaskId = Sys.AddTask(&UTPacket::AsynUpdata, this, 3000, 3000, "UTPacket");
CacheA->Write(packet);
Sys.SetTask(AycUptTaskId, true, 3000); // 默认3秒后发送
@ -57,18 +61,13 @@ bool UTPacket::Send(Buffer &packet)
}
bool UTPacket::Register(byte id, UTPort* port)
bool UTPacket::AndPort(byte id, UTPort* port)
{
Ports.Add((uint)id, port);
return true;
}
bool UTPacket::PressTMsg(const BinaryPair& args, Stream& result)
{
Buffer buff = args.Get("Data"); // 引用源数据区,后面使用要小心,不能修改任何值。
@ -78,7 +77,7 @@ bool UTPacket::PressTMsg(const BinaryPair& args, Stream& result)
void * tail = head + buff.Length(); // 结尾位置
UTPort * port = nullptr;
while (head<tail)
while (head < tail)
{
if ((uint)head->Next() >(uint)tail)break; // 要么越界,要么数据包错

View File

@ -26,13 +26,16 @@ public:
UTPacket(TokenClient * client);
~UTPacket();
// 设置Client对象引用 顺带注册Invoke
bool Set(TokenClient* client);
// 发送 带缓冲区 packet>256Byte则直接发送 不进缓冲区
bool Send(Buffer & packet);
// 异步发送任务
void AsynUpdata();
bool Register(byte id,UTPort* port);
// 添加UTPort成员
bool AndPort(byte id,UTPort* port);
// Invoke回调函数
bool PressTMsg(const BinaryPair& args, Stream& result);
// Client.Register("UTPacket",&UTPacket::PressTMsg,this);
static UTPacket * Current;
#if DEBUG