修正重复ID问题

This commit is contained in:
WangQiang 2015-12-01 03:00:47 +00:00
parent e95a0923fd
commit 94c006cf2b
1 changed files with 22 additions and 21 deletions

View File

@ -196,6 +196,7 @@ bool TinyServer::OnJoin(const TinyMessage& msg)
dm.ReadMessage(msg); dm.ReadMessage(msg);
// 根据硬件编码找设备 // 根据硬件编码找设备
auto dv = FindDevice(dm.HardID); auto dv = FindDevice(dm.HardID);
bool IsNewDv = false;
if(!dv) if(!dv)
{ {
// 以网关地址为基准,进行递增分配 // 以网关地址为基准,进行递增分配
@ -213,32 +214,35 @@ bool TinyServer::OnJoin(const TinyMessage& msg)
dv->Logins = 0; dv->Logins = 0;
// 节点注册 // 节点注册
dv->RegTime = now; dv->RegTime = now;
dv->Kind = dm.Kind;
dv->HardID = dm.HardID;
dv->Version = dm.Version;
dv->LoginTime = now;
// 生成随机密码。当前时间的MD5
dv->Pass = MD5::Hash(Array(&now, 8));
dv->Pass.SetLength(8); // 小心不要超长
dv->Name = "新设备";
if(dv->Valid())
{
Devices.Push(dv);
SaveDevices(); // 写好相关数据 校验通过才能存flash
}
else
{
delete dv;
return false;
}
} }
// 更新设备信息 // 更新设备信息
Current = dv; Current = dv;
dv->Kind = dm.Kind;
dv->HardID = dm.HardID;
dv->Version = dm.Version;
if(dv->Logins++ == 0) dv->LoginTime = now; if(dv->Logins++ == 0) dv->LoginTime = now;
dv->LastTime = now; dv->LastTime = now;
debug_printf("\r\nTinyServer::设备第 %d 次组网 TranID=0x%04X \r\n", dv->Logins, dm.TranID); debug_printf("\r\nTinyServer::设备第 %d 次组网 TranID=0x%04X \r\n", dv->Logins, dm.TranID);
dv->Show(true); dv->Show(true);
// 生成随机密码。当前时间的MD5
dv->Pass = MD5::Hash(Array(&now, 8));
dv->Pass.SetLength(8); // 小心不要超长
dv->Name = "新设备";
if(dv->Valid())
{
Devices.Push(dv);
SaveDevices(); // 写好相关数据 校验通过才能存flash
}
// 响应 // 响应
TinyMessage rs; TinyMessage rs;
rs.Code = msg.Code; rs.Code = msg.Code;
@ -247,19 +251,16 @@ bool TinyServer::OnJoin(const TinyMessage& msg)
// 发现响应 // 发现响应
dm.Reply = true; dm.Reply = true;
dm.Server = Cfg->Address; dm.Server = Cfg->Address;
dm.Channel = Cfg->Channel; dm.Channel = Cfg->Channel;
dm.Speed = Cfg->Speed / 10; dm.Speed = Cfg->Speed / 10;
dm.Address = dv->Address; dm.Address = dv->Address;
dm.Password = dv->Pass; dm.Password = dv->Pass;
dm.HardID.SetLength(6); // 小心不要超长 dm.HardID.SetLength(6); // 小心不要超长
dm.HardID = Sys.ID; dm.HardID = Sys.ID;
dm.WriteMessage(rs); dm.WriteMessage(rs);
Reply(rs); Reply(rs);
return true; return true;