Device 不允许手动 Load 避免重复 Load 造成设备数量不对

This commit is contained in:
WangQiang 2016-09-13 07:10:00 +00:00
parent cb73ba8580
commit 5c6585d9a4
4 changed files with 72 additions and 32 deletions

View File

@ -63,12 +63,12 @@ void TinyServer::Start()
//const uint DevSize = 4 << 10;
//pDevMgmt->SetFlashCfg(DevAddr,DevSize);
if (DevicesManagement::Current)
pDevMgmt = DevicesManagement::Current;
else
pDevMgmt = new DevicesManagement();
pDevMgmt = DevicesManagement::CreateDevMgmt();
auto count = pDevMgmt->LoadDev();
//if (DevicesManagement::Current)
// pDevMgmt = DevicesManagement::Current;
//else
// pDevMgmt = new DevicesManagement();
// 添加网关这一条设备信息
if (!pDevMgmt->FindDev(Cfg->Address))

View File

@ -5,11 +5,12 @@ DevicesManagement* DevicesManagement::Current = nullptr;
/******************************** 功能代码 ********************************/
DevicesManagement::DevicesManagement()
{
//DevArr.SetLength(0);
Current = this;
}
//DevicesManagement::DevicesManagement()
//{
// //DevArr.SetLength(0);
// Current = this;
// LoadDev();
//}
DevicesManagement::~DevicesManagement()
{
@ -574,3 +575,12 @@ void DevicesManagement::MaintainState()
}
}
}
DevicesManagement* DevicesManagement::CreateDevMgmt()
{
if (Current)return Current;
Current = new DevicesManagement();
Current->LoadDev();
return Current;
}

View File

@ -23,7 +23,7 @@ public:
static bool InvokeDelete(void * param, const Pair& args, Stream& result);
public:
DevicesManagement();
// DevicesManagement();
~DevicesManagement();
bool SetFlashCfg(uint addr, uint size);
@ -32,11 +32,12 @@ public:
Device* FindDev(byte id)const;
Device* FindDev(const Buffer& hardid) const;
int LoadDev();
void ClearDev();
void ShowDev();
private:
private:
// 不允许外部调用 避免重复LoadDev()
int LoadDev();
// 外部操作使用 DeviceRequest
void SaveDev();
bool DeleteDev(byte id);
@ -79,6 +80,9 @@ private:
DevPrsCallback _DevProcess = nullptr;
void * _ClbkParam = nullptr;
public:
static DevicesManagement* CreateDevMgmt();
};

View File

@ -5,7 +5,7 @@
#include "Security\Crc.h"
// 循环间隔
#define LOOP_Interval 10000
#define LOOP_Interval 20000
bool TokenToTiny(const TokenMessage& msg, TinyMessage& msg2);
void TinyToToken(const TinyMessage& msg, TokenMessage& msg2);
@ -37,6 +37,7 @@ Gateway::~Gateway()
void Gateway::Start()
{
if (Running) return;
Running = true;
TS("Gateway::Start");
@ -50,13 +51,12 @@ void Gateway::Start()
Client->Param = this;
debug_printf("\r\nGateway::Start \r\n");
Server->Start();
pDevMgmt = DevicesManagement::CreateDevMgmt();
// 如果全局都没有设备列表,那就直接创建一个
if (DevicesManagement::Current)
pDevMgmt = DevicesManagement::Current;
else
pDevMgmt = new DevicesManagement();
//if (DevicesManagement::Current)
// pDevMgmt = DevicesManagement::Current;
//else
// pDevMgmt = new DevicesManagement();
// 设备列表服务于Token 保存token的“联系方式”
//pDevMgmt->Port = Client;
@ -64,21 +64,47 @@ void Gateway::Start()
if (pDevMgmt->Length() == 0)
{
// 如果全局设备列表为空则添加一条Addr=1的设备
auto dv = new Device();
dv->Address = 1;
dv->Kind = Sys.Code;
dv->LastTime = Sys.Seconds();
// // 如果全局设备列表为空则添加一条Addr=1的设备
// auto dv = new Device();
// dv->Address = 1;
// dv->Kind = Sys.Code;
// dv->LastTime = Sys.Seconds();
//
// dv->HardID = Sys.ID;
// dv->Name = Sys.Name;
//
// //pDevMgmt->PushDev(dv);
// // 标记为永久在线设备
// dv->Flag.BitFlag.OnlineAlws = 1;
// pDevMgmt->DeviceRequest(DeviceAtions::Register, dv);
dv->HardID = Sys.ID;
dv->Name = Sys.Name;
//pDevMgmt->PushDev(dv);
// 标记为永久在线设备
dv->Flag.BitFlag.OnlineAlws = 1;
pDevMgmt->DeviceRequest(DeviceAtions::Register, dv);
ushort kinds[] = { 0x0201,0x0202,0x0203,0x0431 };
byte ids[12];
Buffer bufids(ids, sizeof(ids));
bufids = Sys.ID;
byte Addr = Sys.Ms();
for (int i = 0; i < ArrayLength(kinds); i++)
{
// 如果全局设备列表为空则添加一条Addr=1的设备
auto dv2 = new Device();
dv2->Address = Addr + i;
dv2->Kind = kinds[i];
dv2->LastTime = Sys.Seconds();
ids[11] += Sys.Ms();
dv2->HardID = ids;
dv2->Name = "测试设备";
//pDevMgmt->PushDev(dv);
// 标记为永久在线设备
dv2->Flag.BitFlag.OnlineAlws = 0;
pDevMgmt->DeviceRequest(DeviceAtions::Register, dv2);
}
}
Server->Start();
Client->Open();
_task = Sys.AddTask(Loop, this, 10000, LOOP_Interval, "设备任务");
@ -331,6 +357,6 @@ void Gateway::Loop(void* param)
gw->SetMode(0);
}
}
// gw->pDevMgmt->MaintainState();
gw->pDevMgmt->MaintainState();
}