FindAll(ids[]) ok

Invoke  Gateway/Study  OK
This commit is contained in:
WangQiang 2016-09-13 04:04:36 +00:00
parent d74e402eea
commit cb73ba8580
3 changed files with 28 additions and 29 deletions

View File

@ -305,26 +305,26 @@ bool DevicesManagement::DeviceProcess(DeviceAtions act, const Pair& args, Stream
ByteArray ids; ByteArray ids;
args.Get("ids", ids); args.Get("ids", ids);
// result.Write(ids.Length());
for (int i = 0; i < ids.Length(); i++) // 判定依据需要修改 for (int i = 0; i < ids.Length(); i++) // 判定依据需要修改
{ {
// 获取数据ms // 获取数据ms
MemoryStream dvms; MemoryStream dvms;
// 序列化一个DevInfo到ms // 序列化一个DevInfo到ms
if (!GetDevInfo(ids[i], dvms))continue; if (!GetDevInfo(ids[i], dvms))continue;
// 转换为ByteArray // 转换为ByteArray
ByteArray dvbs(dvms.GetBuffer(), dvms.Position()); ByteArray dvbs(dvms.GetBuffer(), dvms.Position());
// 写入DevInfo
// result.Write(String((byte)i)); // 数组格式 "idx" + Data
result.Write((byte)1);
result.Write((byte)i);
result.WriteEncodeInt(dvbs.Length());
result.Write(dvbs);
debug_printf("\r\n"); // 写入DevInfo
ByteArray bs(result.GetBuffer(), result.Position()); result.WriteArray(String(i));
bs.Show(true);
//result.Write((byte)1); // idxlen 这里打死不会超过127
//result.Write((byte)i); // idx 这里长度不会大于127 所以简便写法 不使用压缩编码
result.WriteEncodeInt(dvbs.Length()); // data[x]len
result.Write(dvbs); // data[x]
} }
// ByteArray(result.GetBuffer(), result.Position()).Show(true);
} }
break; break;
@ -427,10 +427,8 @@ bool DevicesManagement::GetDevInfo(Device *dv, MemoryStream &ms)
return true; return true;
} }
/******************************** 发送Invoke ********************************/ /******************************** 发送Invoke ********************************/
void DevicesManagement::SendDevicesIDs() void DevicesManagement::SendDevicesIDs()
{ {
// 获取IDList // 获取IDList
@ -540,7 +538,6 @@ void DevicesManagement::MaintainState()
if (Port->Status < 2) return; if (Port->Status < 2) return;
SendDevicesIDs(); SendDevicesIDs();
//auto now = Sys.Seconds();
auto now = DateTime::Now().TotalSeconds(); auto now = DateTime::Now().TotalSeconds();
// 处理持久在线设备 // 处理持久在线设备
@ -558,9 +555,6 @@ void DevicesManagement::MaintainState()
ushort time = dv->OfflineTime ? dv->OfflineTime : 60; ushort time = dv->OfflineTime ? dv->OfflineTime : 60;
// 特殊处理网关自身
// if (dv->Address == gw->Server->Cfg->Address) dv->LastTime = now;
if (dv->LastTime + time < now) if (dv->LastTime + time < now)
{ // 下线 { // 下线
if (dv->Logined) if (dv->Logined)

View File

@ -83,6 +83,8 @@ void Gateway::Start()
_task = Sys.AddTask(Loop, this, 10000, LOOP_Interval, "设备任务"); _task = Sys.AddTask(Loop, this, 10000, LOOP_Interval, "设备任务");
Running = true; Running = true;
Client->Register("Gateway/Study", &Gateway::InvokeStudy, this);
} }
// 停止网关。取消本地和远程的消息挂载 // 停止网关。取消本地和远程的消息挂载
@ -298,6 +300,19 @@ Gateway* Gateway::CreateGateway(TokenClient* client, TinyServer* server)
return gw; return gw;
} }
/******************************** invoke 调用********************************/
// 调用学习模式
bool Gateway::InvokeStudy(const Pair& args, Stream& result)
{
uint time;
args.Get("time", time);
SetMode(time);
result.Write((byte)true);
return true;
}
// 设备上线下线报备 // 设备上线下线报备
void Gateway::Loop(void* param) void Gateway::Loop(void* param)
{ {
@ -316,16 +331,6 @@ void Gateway::Loop(void* param)
gw->SetMode(0); gw->SetMode(0);
} }
} }
gw->pDevMgmt->MaintainState(); // gw->pDevMgmt->MaintainState();
}
/******************************** invoke 调用********************************/
// 调用学习模式
bool Gateway::InvokeStudy(void * param, const Pair& args, Stream& result)
{
uint time;
args.Get("time", time);
auto gw = (Gateway*)param;
gw->SetMode(time)
;
return true;
} }

View File

@ -50,7 +50,7 @@ public:
static Gateway* CreateGateway(TokenClient* client, TinyServer* server); static Gateway* CreateGateway(TokenClient* client, TinyServer* server);
// 学习模式 // 学习模式
static bool InvokeStudy(void * param, const Pair& args, Stream& result); bool InvokeStudy(const Pair& args, Stream& result);
public: public:
uint _task = 0; // 定时任务10秒 uint _task = 0; // 定时任务10秒