Explorar el Código

优化与PIS、Netty数据序列化过程、改进数据库逻辑

lishengyin hace 3 años
padre
commit
67bc6e4afa

+ 40 - 2
build/CMakeFiles/main.dir/CXX.includecache

@@ -1093,6 +1093,8 @@ iostream
 -
 PIDSDataDefine.h
 ../modules/dataType/include/PIDSDataDefine.h
+map
+-
 
 ../modules/dataType/include/PIDSDataDefine.h
 iostream
@@ -1103,6 +1105,16 @@ Crc16.h
 ../modules/dataType/include/Crc16.h
 Util/logger.h
 ../modules/dataType/include/Util/logger.h
+time.h
+-
+
+../modules/dataType/include/PIDSServerResultMsg.h
+iostream
+-
+PIDSDataDefine.h
+../modules/dataType/include/PIDSDataDefine.h
+map
+-
 
 ../modules/dataType/include/SendHeartBeat.h
 istream
@@ -1155,10 +1167,32 @@ gstnvdsmeta.h
 ../modules/inference/include/gstnvdsmeta.h
 gst-nvmessage.h
 ../modules/inference/include/gst-nvmessage.h
-user_app.h
-../modules/inference/include/user_app.h
 Stream.h
 ../modules/inference/include/Stream.h
+Util/logger.h
+../modules/inference/include/Util/logger.h
+Util/NoticeCenter.h
+../modules/inference/include/Util/NoticeCenter.h
+Poller/EventPoller.h
+../modules/inference/include/Poller/EventPoller.h
+Player/PlayerProxy.h
+../modules/inference/include/Player/PlayerProxy.h
+Rtmp/RtmpPusher.h
+../modules/inference/include/Rtmp/RtmpPusher.h
+Common/config.h
+../modules/inference/include/Common/config.h
+Pusher/MediaPusher.h
+../modules/inference/include/Pusher/MediaPusher.h
+Extension/Frame.h
+../modules/inference/include/Extension/Frame.h
+Util/SqlPool.h
+../modules/inference/include/Util/SqlPool.h
+Network/TcpClient.h
+../modules/inference/include/Network/TcpClient.h
+Poller/Timer.h
+../modules/inference/include/Poller/Timer.h
+TCPClient.h
+../modules/inference/include/TCPClient.h
 list
 -
 
@@ -1209,6 +1243,8 @@ vector
 -
 map
 -
+time.h
+-
 inference.h
 ../modules/userApp/include/inference.h
 Stream.h
@@ -1229,6 +1265,8 @@ InferData.h
 ../modules/userApp/include/InferData.h
 PIDSClientResultMsg.h
 ../modules/userApp/include/PIDSClientResultMsg.h
+PIDSServerResultMsg.h
+../modules/userApp/include/PIDSServerResultMsg.h
 Notices.h
 ../modules/userApp/include/Notices.h
 

+ 1 - 0
build/CMakeFiles/main.dir/depend.internal

@@ -95,6 +95,7 @@ CMakeFiles/main.dir/source/src/main.cpp.o
  ../modules/dataType/include/Notices.h
  ../modules/dataType/include/PIDSClientResultMsg.h
  ../modules/dataType/include/PIDSDataDefine.h
+ ../modules/dataType/include/PIDSServerResultMsg.h
  ../modules/dataType/include/SendHeartBeat.h
  ../modules/dataType/include/SendLogin.h
  ../modules/dataType/include/Stream.h

+ 1 - 0
build/CMakeFiles/main.dir/depend.make

@@ -94,6 +94,7 @@ CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/NettyServ
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/Notices.h
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/PIDSClientResultMsg.h
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/PIDSDataDefine.h
+CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/PIDSServerResultMsg.h
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/SendHeartBeat.h
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/SendLogin.h
 CMakeFiles/main.dir/source/src/main.cpp.o: ../modules/dataType/include/Stream.h

BIN
build/CMakeFiles/main.dir/source/src/main.cpp.o


+ 40 - 2
build/modules/CMakeFiles/modules.dir/CXX.includecache

@@ -1093,6 +1093,8 @@ iostream
 -
 PIDSDataDefine.h
 ../modules/dataType/include/PIDSDataDefine.h
+map
+-
 
 ../modules/dataType/include/PIDSDataDefine.h
 iostream
@@ -1103,6 +1105,16 @@ Crc16.h
 ../modules/dataType/include/Crc16.h
 Util/logger.h
 ../modules/dataType/include/Util/logger.h
+time.h
+-
+
+../modules/dataType/include/PIDSServerResultMsg.h
+iostream
+-
+PIDSDataDefine.h
+../modules/dataType/include/PIDSDataDefine.h
+map
+-
 
 ../modules/dataType/include/SendHeartBeat.h
 istream
@@ -1173,10 +1185,32 @@ gstnvdsmeta.h
 ../modules/inference/include/gstnvdsmeta.h
 gst-nvmessage.h
 ../modules/inference/include/gst-nvmessage.h
-user_app.h
-../modules/inference/include/user_app.h
 Stream.h
 ../modules/inference/include/Stream.h
+Util/logger.h
+../modules/inference/include/Util/logger.h
+Util/NoticeCenter.h
+../modules/inference/include/Util/NoticeCenter.h
+Poller/EventPoller.h
+../modules/inference/include/Poller/EventPoller.h
+Player/PlayerProxy.h
+../modules/inference/include/Player/PlayerProxy.h
+Rtmp/RtmpPusher.h
+../modules/inference/include/Rtmp/RtmpPusher.h
+Common/config.h
+../modules/inference/include/Common/config.h
+Pusher/MediaPusher.h
+../modules/inference/include/Pusher/MediaPusher.h
+Extension/Frame.h
+../modules/inference/include/Extension/Frame.h
+Util/SqlPool.h
+../modules/inference/include/Util/SqlPool.h
+Network/TcpClient.h
+../modules/inference/include/Network/TcpClient.h
+Poller/Timer.h
+../modules/inference/include/Poller/Timer.h
+TCPClient.h
+../modules/inference/include/TCPClient.h
 list
 -
 
@@ -1233,6 +1267,8 @@ vector
 -
 map
 -
+time.h
+-
 inference.h
 ../modules/userApp/include/inference.h
 Stream.h
@@ -1253,6 +1289,8 @@ InferData.h
 ../modules/userApp/include/InferData.h
 PIDSClientResultMsg.h
 ../modules/userApp/include/PIDSClientResultMsg.h
+PIDSServerResultMsg.h
+../modules/userApp/include/PIDSServerResultMsg.h
 Notices.h
 ../modules/userApp/include/Notices.h
 

BIN
build/modules/CMakeFiles/modules.dir/TCPClient/src/TCPClient.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/decoder/src/FFMpegDecoder.cpp.o


+ 1 - 6
build/modules/CMakeFiles/modules.dir/depend.internal

@@ -198,21 +198,15 @@ modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o
  ../3rdparty/rapidjson/include/rapidjson/stringbuffer.h
  ../3rdparty/rapidjson/include/rapidjson/writer.h
  ../modules/TCPClient/include/TCPClient.h
- ../modules/dataType/include/Crc16.h
- ../modules/dataType/include/InferData.h
  ../modules/dataType/include/NettyClientCommandEnum.h
  ../modules/dataType/include/NettyClientResultMsg.h
  ../modules/dataType/include/NettyServerCommandEnum.h
  ../modules/dataType/include/NettyServerResultMsg.h
  ../modules/dataType/include/Notices.h
- ../modules/dataType/include/PIDSClientResultMsg.h
- ../modules/dataType/include/PIDSDataDefine.h
  ../modules/dataType/include/SendHeartBeat.h
  ../modules/dataType/include/SendLogin.h
  ../modules/dataType/include/Stream.h
  ../modules/inference/include/inference.h
- ../modules/inifile/include/inifile.h
- ../modules/userApp/include/user_app.h
  /home/nvidia/work/MIVA/modules/inference/src/inference.cpp
  /opt/nvidia/deepstream/deepstream-5.0/sources/includes/gst-nvmessage.h
  /opt/nvidia/deepstream/deepstream-5.0/sources/includes/gstnvdsmeta.h
@@ -572,6 +566,7 @@ modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o
  ../modules/dataType/include/Notices.h
  ../modules/dataType/include/PIDSClientResultMsg.h
  ../modules/dataType/include/PIDSDataDefine.h
+ ../modules/dataType/include/PIDSServerResultMsg.h
  ../modules/dataType/include/SendHeartBeat.h
  ../modules/dataType/include/SendLogin.h
  ../modules/dataType/include/Stream.h

+ 1 - 6
build/modules/CMakeFiles/modules.dir/depend.make

@@ -197,21 +197,15 @@ modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../3rdparty/rapidj
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../3rdparty/rapidjson/include/rapidjson/stringbuffer.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../3rdparty/rapidjson/include/rapidjson/writer.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/TCPClient/include/TCPClient.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/Crc16.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/InferData.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/NettyClientCommandEnum.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/NettyClientResultMsg.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/NettyServerCommandEnum.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/NettyServerResultMsg.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/Notices.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/PIDSClientResultMsg.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/PIDSDataDefine.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/SendHeartBeat.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/SendLogin.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/dataType/include/Stream.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/inference/include/inference.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/inifile/include/inifile.h
-modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/userApp/include/user_app.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: ../modules/inference/src/inference.cpp
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: /opt/nvidia/deepstream/deepstream-5.0/sources/includes/gst-nvmessage.h
 modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o: /opt/nvidia/deepstream/deepstream-5.0/sources/includes/gstnvdsmeta.h
@@ -571,6 +565,7 @@ modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/i
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/Notices.h
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/PIDSClientResultMsg.h
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/PIDSDataDefine.h
+modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/PIDSServerResultMsg.h
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/SendHeartBeat.h
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/SendLogin.h
 modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o: ../modules/dataType/include/Stream.h

BIN
build/modules/CMakeFiles/modules.dir/inference/src/inference.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/inifile/src/inifile.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/md5/src/md5.cpp.o


BIN
build/modules/CMakeFiles/modules.dir/userApp/src/user_app.cpp.o


BIN
lib/libmodules.so


+ 4 - 2
modules/dataType/include/Notices.h

@@ -1,6 +1,8 @@
 #pragma once
 
+#define ERR -1
+#define OK 0
+
 #define NOTICE_INFER "NOTICE_INFER"
 #define NOTICE_NETTY "NOTICE_NETTY"
-#define NOTICE_PIS   "NOTICE_PIS"
-
+#define NOTICE_CLOSED "NOTICE_CLOSED"

+ 27 - 65
modules/dataType/include/PIDSClientResultMsg.h

@@ -2,57 +2,33 @@
 
 #include <iostream>
 #include "PIDSDataDefine.h"
+#include <map>
+
 
 
 using namespace std;
 
+struct CrowdednessData
+{
+    int Crowdedness;
+    int Num;
+};
+
 class PIDSClientResultMsg
 {
 public:
-    // 时间
-    PIDSTime time;
     // 列车线路号
     int TrainLine;
     int Train;
+    std::map<int, CrowdednessData> data;
 
-    // 拥挤度
-    int8_t Crowdedness_1;
-    // 1号车厢人数
-    int16_t Num_1;
-
-    // 拥挤度
-    int8_t Crowdedness_2;
-    // 2号车厢人数
-    int16_t Num_2;
-
-    // 拥挤度
-    int8_t Crowdedness_3;
-    // 3号车厢人数
-    int16_t Num_3;
-
-    // 拥挤度
-    int8_t Crowdedness_4;
-    // 4号车厢人数
-    int16_t Num_4;
-
-    // 拥挤度
-    int8_t Crowdedness_5;
-    // 5号车厢人数
-    int16_t Num_5;
-
-    // 拥挤度
-    int8_t Crowdedness_6;
-    // 6号车厢人数
-    int16_t Num_6;
-    
 public:
     PIDSClientResultMsg(){}
     ~PIDSClientResultMsg(){}
 
-    void Serialization(uint8_t* data, int len)
-    {
-        memset(data, 0, 1024);
 
+    void Serialization(uint8_t* data)
+    {
         data[0] = PIDS_DATA_HEAD;
         data[1] = PIDS_SRC_TC1;
         data[2] = PIDS_SRC_TYPE_MIVA;
@@ -68,40 +44,19 @@ public:
 
         // 填充数据
         // Time
-        data[9] = 21;
-        data[10] = 12;
-        data[11] = 1;
-        data[12] = 2;
-        data[13] = 3;
-        data[14] = 6;
+        getBCDTime(data + 9); 
 
         data[15] = this->TrainLine;
         data[16] = this->Train;
 
-        data[17] = this->Crowdedness_1;
-        data[18] = (this-> Num_1 & 0x00FF);
-        data[19] = (this-> Num_1 & 0xFF00) >> 8;
-
-        data[20] = this->Crowdedness_2;
-        data[21] = (this-> Num_2 & 0x00FF);
-        data[22] = (this-> Num_2 & 0xFF00) >> 8;
-
-        data[23] = this->Crowdedness_3;
-        data[24] = (this-> Num_3 & 0x00FF);
-        data[25] = (this-> Num_3 & 0xFF00) >> 8;
-
-        data[26] = this->Crowdedness_4;
-        data[27] = (this-> Num_4 & 0x00FF);
-        data[28] = (this-> Num_4 & 0xFF00) >> 8;
-
-        data[29] = this->Crowdedness_5;
-        data[30] = (this-> Num_5 & 0x00FF);
-        data[31] = (this-> Num_5 & 0xFF00) >> 8;
-
-        data[32] = this->Crowdedness_6;
-        data[33] = (this-> Num_6 & 0x00FF);
-        data[34] = (this-> Num_6 & 0xFF00) >> 8;
-
+        int id = 0;
+        for(int i=0; i < 18; i+=3)
+        {
+            data[17+i] = this->data[id].Crowdedness;
+            data[18+i] = (this->data[id].Num & 0x00FF);
+            data[19+i] = (this->data[id].Num & 0xFF00) >> 8;
+            id++;
+        }
         int16_t crc = Crc16::GetCRC16(data, 9, length);
         data[45] = (crc & 0x00FF);
         data[46] = (crc & 0xFF00) >> 8; 
@@ -109,4 +64,11 @@ public:
         // 数据尾
         data[47] = PIDS_DATA_END;
     }
+
+    void ObjectToJson(std::string& json)
+    {
+        
+
+        json+="\r\n";
+    }
 };

+ 16 - 8
modules/dataType/include/PIDSDataDefine.h

@@ -3,6 +3,7 @@
 #include "user_app.h"
 #include "Crc16.h"
 #include "Util/logger.h"
+#include <time.h>
 
 using namespace std;
 
@@ -15,14 +16,21 @@ using namespace std;
 #define PIDS_SRC_TYPE_PIDS   (0x03)  // PIDS设备
 #define PIDS_SRC_TYPE_MIVA   (0x28)  // 视频分析服务器设备
 
+#define HEX2BCD(x) (((x) % 10) + ((((x) / 10) % 10) << 4))  /*20 -> 20H*/
 
-struct PIDSTime
+
+void getBCDTime(uint8_t *out)
 {
-    int tm_sec;  
-    int tm_min; 
-    int tm_hour;
-    int tm_mday; 
-    int tm_mon;  
-    int tm_year; 
-};
+    time_t t;
+    int i = 0;
+    struct tm *tp = NULL;
 
+    t = time(NULL);
+    tp = localtime(&t);
+    out[i++] = HEX2BCD(tp->tm_year-100);
+    out[i++] = HEX2BCD(tp->tm_mon+1);
+    out[i++] = HEX2BCD(tp->tm_mday);
+    out[i++] = HEX2BCD(tp->tm_hour);
+    out[i++] = HEX2BCD(tp->tm_min);
+    out[i++] = HEX2BCD(tp->tm_sec);
+}

+ 16 - 24
modules/dataType/include/PIDSServerResultMsg.h

@@ -2,12 +2,15 @@
 
 #include <iostream>
 #include "PIDSDataDefine.h"
+#include <map>
+
 
 using namespace std;
 
+
 class PIDSServerResultMsg
 {
-private:
+public:
     // 当前站站号
     int CurrentSite;
     // 下一站站号
@@ -18,25 +21,14 @@ private:
     int EndSite;
     // 时间是否有效
     bool TimeFlag;
-    // 时间
-    PIDSTime time;
+
+
     // 车门标志位
     uint8_t DoorFlag;
     // TC2、TC1激活情况
     uint8_t PIDSFlag;
 
-    // 1号车厢的动态负荷
-    int DynamicLoad_1;
-    // 2号车厢的动态负荷
-    int DynamicLoad_2;
-    // 3号车厢的动态负荷
-    int DynamicLoad_3;
-    // 4号车厢的动态负荷
-    int DynamicLoad_4;
-    // 5号车厢的动态负荷
-    int DynamicLoad_5;
-    // 6号车厢的动态负荷
-    int DynamicLoad_6;
+    std::map<int,int> DynamicLoad;
 
 public:
     PIDSServerResultMsg(){};
@@ -58,7 +50,7 @@ public:
         if((data[length-2] != (crc & 0xFF00)) >> 8 || (data[length-1] != crc & 0x00FF)){
             ErrorL << "Incorrect data check digit";
         }
-
+        
         // 数据校验通过提取数据
         this->CurrentSite = data[9];
         this->NextSite = data[10];
@@ -67,17 +59,17 @@ public:
         this->TimeFlag = data[13] ? true:false;
 
         // 时间
+
+
+        // 标志
         this->DoorFlag = data[21];
         this->PIDSFlag = data[22];
-
         // 提取动态负载
-        this->DynamicLoad_1 = (uint16_t)data[24] << 8 | data[23];
-        this->DynamicLoad_2 = (uint16_t)data[26] << 8 | data[25];
-        this->DynamicLoad_3 = (uint16_t)data[28] << 8 | data[27];
-        this->DynamicLoad_4 = (uint16_t)data[30] << 8 | data[29];
-        this->DynamicLoad_5 = (uint16_t)data[32] << 8 | data[31];
-        this->DynamicLoad_6 = (uint16_t)data[34] << 8 | data[33];
-
+        int id = 1;
+        for(int i = 0; i < 12; i+=2){
+            this->DynamicLoad[id] = (uint16_t)data[24 + i] << 8 | data[23 + i];
+            id++;
+        }
         return OK;
     }
 };

+ 15 - 1
modules/inference/include/inference.h

@@ -11,9 +11,23 @@
 #include <sys/time.h>
 #include "gstnvdsmeta.h"
 #include "gst-nvmessage.h"
-#include "user_app.h"
+
 #include "Stream.h"
 
+// ZLMediaKit
+#include "Util/logger.h"
+#include "Util/NoticeCenter.h"
+#include "Poller/EventPoller.h"
+#include "Player/PlayerProxy.h"
+#include "Rtmp/RtmpPusher.h"
+#include "Common/config.h"
+#include "Pusher/MediaPusher.h"
+#include "Extension/Frame.h"
+#include "Util/SqlPool.h"
+#include "Network/TcpClient.h"
+#include "Poller/Timer.h"
+#include "TCPClient.h"
+
 #include <list>
 
 using namespace std;

+ 10 - 3
modules/userApp/include/user_app.h

@@ -21,6 +21,7 @@
 #include <gst/gst.h>
 #include <vector>
 #include <map>
+#include <time.h>
 #include "inference.h"
 #include "Stream.h"
 
@@ -33,6 +34,8 @@
 #include "NettyClientCommandEnum.h"
 #include "InferData.h"
 #include "PIDSClientResultMsg.h"
+#include "PIDSServerResultMsg.h"
+
 #include "Notices.h"
 
 using namespace toolkit;
@@ -41,9 +44,6 @@ using namespace inifile;
 
 using namespace std;
 
-#define ERR -1
-#define OK 0
-
 
 namespace MIVA
 {  
@@ -56,6 +56,8 @@ namespace MIVA
         int32_t Init(std::string appName);
         void Destroy();
         void StartTask();
+        static void makeAddr(struct sockaddr *out,const char *ip,uint16_t port);
+        
     private:
         IniFile m_ini;
         std::string m_appName;
@@ -81,8 +83,13 @@ namespace MIVA
         int device_id;
     private:
         std::shared_ptr<TCPClient> m_tcpClient = NULL;
+        std::shared_ptr<Inference> m_Infer = NULL;
+        Socket::Ptr m_udpClient = NULL;
+
         std::list<Stream> DataList;
         Timer::Ptr m_timer0;
+        Timer::Ptr m_timer1;
+
 
     private:
         void ListenInfer(int Source_id, int num);

+ 97 - 12
modules/userApp/src/user_app.cpp

@@ -2,8 +2,6 @@
 
 namespace MIVA
 {  
-    std::shared_ptr<Inference> m_Infer = NULL;
-    
     std::shared_ptr<UserApp> UserApp::CreateNew(){
         return std::make_shared<UserApp>();
     }
@@ -70,6 +68,10 @@ namespace MIVA
         // 链接Netty后端
         ConnectNetty();
 
+        // UDP绑定端口
+        this->m_udpClient = Socket::createSocket();
+        this->m_udpClient->bindUdpSock(this->PIS_port);
+
         // 查询需要播放的流
         vector<vector<string>> sqlRet;
         SqlWriter sqlSelect("SELECT Id,Stream FROM MIVA_DB.`Streams` WHERE Play = 1");
@@ -107,12 +109,6 @@ namespace MIVA
                 this->ListenNettyData(pBuf);
         });
 
-        // 监听PIS广播
-        NoticeCenter::Instance().addListener(0, NOTICE_NETTY,
-                [&](const Buffer::Ptr &buf, struct sockaddr *addr){
-                this->ListenPISData(buf, addr);
-        });
-
         InfoL << "System initialization is successful!";
         return OK;
     }
@@ -133,6 +129,11 @@ namespace MIVA
             if(m_Infer != NULL) m_Infer->StartTask();
         });
         
+        // 挂起函数回调
+        this->m_udpClient->setOnRead([&](const Buffer::Ptr &buf, struct sockaddr *addr , int){
+            this->ListenPISData(buf, addr);
+        });
+
         // 定时检查连接状态
         this->m_timer0 = std::make_shared<Timer>(5.0f,[&](){
             if(!m_tcpClient->alive()){
@@ -141,6 +142,12 @@ namespace MIVA
             return true;
         }, nullptr);
 
+        // 定时上报数据
+        this->m_timer1 = std::make_shared<Timer>(1.0f,[&](){
+            this->ReportData(); // 上报数据
+            return true;
+        }, nullptr);
+
         // 启动任务
         poolInfer.start();
         InfoL << "Task started successfully!";
@@ -152,7 +159,7 @@ namespace MIVA
         // 异步更新
         SqlWriter updataSql("UPDATE MIVA_DB.Streams SET num = '?' WHERE Id = '?';");
         updataSql << num << Source_id << endl;
-    }
+    }   
 
     // 连接Netty
     void UserApp::ConnectNetty()
@@ -164,20 +171,98 @@ namespace MIVA
     // 上报识别结果
     void UserApp::ReportData()
     {
+        vector<vector<std::string>> sqlRet;
+        // 查询需要上报的车厢ID
+        SqlWriter sqlSelect("SELECT CarId FROM MIVA_DB.`CarId`");
+        sqlSelect << sqlRet;
+        if(sqlRet.empty()){
+            ErrorL << "Car data not found.";
+            return;
+        }
+        PIDSClientResultMsg clentResultMsg;
+
+
+        for(auto &line : sqlRet){
+            vector<vector<std::string>> sqlRet0;
+            SqlWriter sqlSelect0("SELECT Crowdedness,num FROM MIVA_DB.`Crowdedness` where CarId = ?");
+            sqlSelect0  << atoi(line[0].c_str()) << sqlRet0;
+            if(sqlRet0.empty()) {
+                ErrorL << "Crowdedness data not found.";
+                continue;
+            }
+            for(auto &line0 : sqlRet0){
+                clentResultMsg.data[atoi(line[0].c_str())].Crowdedness = atoi(line0[0].c_str());
+                clentResultMsg.data[atoi(line[0].c_str())].Num = atoi(line0[1].c_str());
+            }
+        }
+        uint8_t data[1024];
+        std::string json;
+        memset(data, 0, sizeof(data));
+        // 序列化数据
+        clentResultMsg.Serialization(data);
+        clentResultMsg.ObjectToJson(json);
+
+        // 传输至PIS系统
+        struct sockaddr addrDst;
+        makeAddr(&addrDst,this->PIS_ip.c_str(),this->PIS_port);//UDP数据发送地址
+        this->m_udpClient->send((char *)data,&addrDst, sizeof(struct sockaddr_in));
 
+        // 传输至Netty端
+        if(this->m_tcpClient->alive()){
+            (*m_tcpClient) << json;
+        }
     }
 
     // 处理Netty的数据
     void UserApp::ListenNettyData(const Buffer::Ptr &pBuf)
     {
+        // 对Netty端的接口
 
 
-    }
 
+    }
     // 处理PIS系统的数据
     void UserApp::ListenPISData(const Buffer::Ptr &buf, struct sockaddr *addr)
     {
-
-
+        static int8_t num = 0;
+        vector<vector<std::string>> sqlRet;
+        // 接受到PIS发送的数据
+        PIDSServerResultMsg serverResultMag;
+        // 反序列化
+        if(serverResultMag.Deserialization((uint8_t *)(buf->data()), buf->size()) == OK)
+        {
+            // 将收到的第一条PIS系统的数据作为空载荷
+            // 同步
+            if(num == 0){
+                SqlWriter updataSql("UPDATE MIVA_DB.CarId SET NoLoad = '?' WHERE CarId = '?';");
+                for(int id=1; id <= 6 ; id ++){
+                    updataSql << serverResultMag.DynamicLoad[id] << id << sqlRet;
+                }
+                num++;
+            }else
+            {
+                // 纪律动态载荷
+                SqlWriter updataSql("UPDATE MIVA_DB.CarId SET DynamicLoad = '?' WHERE CarId = '?';");
+                for(int id=1; id <= 6 ; id ++){
+                    updataSql << serverResultMag.DynamicLoad[id] << id << sqlRet;
+                }
+            }
+            // 获取到关好门的信号
+            if((serverResultMag.DoorFlag & 0x80))
+            { 
+                // 广播收到管好门的信号
+                NoticeCenter::Instance().emitEvent(NOTICE_CLOSED);
+            }
+        }
     }
+    
+    //赋值struct sockaddr
+    void UserApp::makeAddr(struct sockaddr *out,const char *ip,uint16_t port){
+        struct sockaddr_in &servaddr = *((struct sockaddr_in *)out);
+        servaddr.sin_family = AF_INET;
+        servaddr.sin_port = htons(port);
+        servaddr.sin_addr.s_addr = inet_addr(ip);
+        bzero(&(servaddr.sin_zero), sizeof servaddr.sin_zero);
+    }
+
 }

BIN
source/bin/main


+ 1 - 1
source/config/config.ini

@@ -5,7 +5,7 @@ Netty_IdName = Netty
 
 [PIS]
 PIS_ip = 192.168.31.95
-PIS_port = 8090
+PIS_port = 2022
 PIS_IdName = PIS
 
 [MySql]

+ 0 - 1
source/src/main.cpp

@@ -34,4 +34,3 @@ int main(int argc, char *argv[])
   app->Destroy();
   return 0;
 }
-