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; //const uint DevSize = 4 << 10;
//pDevMgmt->SetFlashCfg(DevAddr,DevSize); //pDevMgmt->SetFlashCfg(DevAddr,DevSize);
if (DevicesManagement::Current) pDevMgmt = DevicesManagement::CreateDevMgmt();
pDevMgmt = DevicesManagement::Current;
else
pDevMgmt = new DevicesManagement();
auto count = pDevMgmt->LoadDev(); //if (DevicesManagement::Current)
// pDevMgmt = DevicesManagement::Current;
//else
// pDevMgmt = new DevicesManagement();
// 添加网关这一条设备信息 // 添加网关这一条设备信息
if (!pDevMgmt->FindDev(Cfg->Address)) if (!pDevMgmt->FindDev(Cfg->Address))

View File

@ -5,11 +5,12 @@ DevicesManagement* DevicesManagement::Current = nullptr;
/******************************** 功能代码 ********************************/ /******************************** 功能代码 ********************************/
DevicesManagement::DevicesManagement() //DevicesManagement::DevicesManagement()
{ //{
//DevArr.SetLength(0); // //DevArr.SetLength(0);
Current = this; // Current = this;
} // LoadDev();
//}
DevicesManagement::~DevicesManagement() 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); static bool InvokeDelete(void * param, const Pair& args, Stream& result);
public: public:
DevicesManagement(); // DevicesManagement();
~DevicesManagement(); ~DevicesManagement();
bool SetFlashCfg(uint addr, uint size); bool SetFlashCfg(uint addr, uint size);
@ -32,11 +32,12 @@ public:
Device* FindDev(byte id)const; Device* FindDev(byte id)const;
Device* FindDev(const Buffer& hardid) const; Device* FindDev(const Buffer& hardid) const;
int LoadDev();
void ClearDev(); void ClearDev();
void ShowDev(); void ShowDev();
private: private:
// 不允许外部调用 避免重复LoadDev()
int LoadDev();
// 外部操作使用 DeviceRequest // 外部操作使用 DeviceRequest
void SaveDev(); void SaveDev();
bool DeleteDev(byte id); bool DeleteDev(byte id);
@ -79,6 +80,9 @@ private:
DevPrsCallback _DevProcess = nullptr; DevPrsCallback _DevProcess = nullptr;
void * _ClbkParam = nullptr; void * _ClbkParam = nullptr;
public:
static DevicesManagement* CreateDevMgmt();
}; };

View File

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