diff --git a/TinyNet/TinyServer.cpp b/TinyNet/TinyServer.cpp index fe8aca46..ff8f3a6b 100644 --- a/TinyNet/TinyServer.cpp +++ b/TinyNet/TinyServer.cpp @@ -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)) diff --git a/TokenNet/DevicesManagement.cpp b/TokenNet/DevicesManagement.cpp index e69d4256..1e3a4459 100644 --- a/TokenNet/DevicesManagement.cpp +++ b/TokenNet/DevicesManagement.cpp @@ -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; +} + diff --git a/TokenNet/DevicesManagement.h b/TokenNet/DevicesManagement.h index 92ca914d..f7aee507 100644 --- a/TokenNet/DevicesManagement.h +++ b/TokenNet/DevicesManagement.h @@ -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(); }; diff --git a/TokenNet/Gateway.cpp b/TokenNet/Gateway.cpp index 962cd7e9..7d835146 100644 --- a/TokenNet/Gateway.cpp +++ b/TokenNet/Gateway.cpp @@ -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(); }