This commit is contained in:
parent
83640f18c4
commit
25ded4ab71
|
@ -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; // 要么越界,要么数据包错
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue