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

View File

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