1
This commit is contained in:
parent
e4dc35c2af
commit
f0e3d861fb
@ -8,6 +8,7 @@
|
|||||||
|
|
||||||
#include <a8/xtimer.h>
|
#include <a8/xtimer.h>
|
||||||
#include <a8/uuid.h>
|
#include <a8/uuid.h>
|
||||||
|
#include <a8/udplistener.h>
|
||||||
|
|
||||||
#include <f8/netmsghandler.h>
|
#include <f8/netmsghandler.h>
|
||||||
#include <f8/udplog.h>
|
#include <f8/udplog.h>
|
||||||
@ -39,6 +40,12 @@ struct MsgNode
|
|||||||
MsgNode* next;
|
MsgNode* next;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct UdpMsgNode
|
||||||
|
{
|
||||||
|
a8::UdpPacket* pkt;
|
||||||
|
UdpMsgNode* next;
|
||||||
|
};
|
||||||
|
|
||||||
const char* const PROJ_LOG_ROOT_FMT = "/data/logs/%s/logs";
|
const char* const PROJ_LOG_ROOT_FMT = "/data/logs/%s/logs";
|
||||||
const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log";
|
const char* const PROJ_LOG_FILENAME_FMT = "log_$pid_%Y%m%d.log";
|
||||||
|
|
||||||
@ -101,6 +108,7 @@ bool App::Init(int argc, char* argv[])
|
|||||||
loop_mutex_ = new std::mutex();
|
loop_mutex_ = new std::mutex();
|
||||||
loop_cond_ = new std::condition_variable();
|
loop_cond_ = new std::condition_variable();
|
||||||
msg_mutex_ = new std::mutex();
|
msg_mutex_ = new std::mutex();
|
||||||
|
udp_msg_mutex_ = new std::mutex();
|
||||||
|
|
||||||
srand(time(nullptr));
|
srand(time(nullptr));
|
||||||
InitLog();
|
InitLog();
|
||||||
@ -176,8 +184,11 @@ void App::UnInit()
|
|||||||
UnInitLog();
|
UnInitLog();
|
||||||
|
|
||||||
FreeSocketMsgQueue();
|
FreeSocketMsgQueue();
|
||||||
|
FreeUdpMsgQueue();
|
||||||
delete msg_mutex_;
|
delete msg_mutex_;
|
||||||
msg_mutex_ = nullptr;
|
msg_mutex_ = nullptr;
|
||||||
|
delete udp_msg_mutex_;
|
||||||
|
udp_msg_mutex_ = nullptr;
|
||||||
delete loop_cond_;
|
delete loop_cond_;
|
||||||
loop_cond_ = nullptr;
|
loop_cond_ = nullptr;
|
||||||
delete loop_mutex_;
|
delete loop_mutex_;
|
||||||
@ -508,3 +519,42 @@ void App::FreeSocketMsgQueue()
|
|||||||
}
|
}
|
||||||
msg_mutex_->unlock();
|
msg_mutex_->unlock();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void App::FreeUdpMsgQueue()
|
||||||
|
{
|
||||||
|
udp_msg_mutex_->lock();
|
||||||
|
if (!udp_work_node_) {
|
||||||
|
udp_work_node_ = udp_top_node_;
|
||||||
|
udp_top_node_ = nullptr;
|
||||||
|
udp_bot_node_ = nullptr;
|
||||||
|
}
|
||||||
|
while (udp_work_node_) {
|
||||||
|
UdpMsgNode* pdelnode = udp_work_node_;
|
||||||
|
delete pdelnode->pkt;
|
||||||
|
udp_work_node_ = udp_work_node_->next;
|
||||||
|
if (!udp_work_node_) {
|
||||||
|
udp_work_node_ = udp_top_node_;
|
||||||
|
udp_top_node_ = nullptr;
|
||||||
|
udp_bot_node_ = nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
udp_msg_mutex_->unlock();
|
||||||
|
}
|
||||||
|
|
||||||
|
void App::AddUdpMsg(a8::UdpPacket* pkt)
|
||||||
|
{
|
||||||
|
UdpMsgNode *p = (UdpMsgNode*) malloc(sizeof(UdpMsgNode));
|
||||||
|
memset(p, 0, sizeof(UdpMsgNode));
|
||||||
|
p->pkt = pkt;
|
||||||
|
udp_msg_mutex_->lock();
|
||||||
|
if (udp_bot_node_) {
|
||||||
|
udp_bot_node_->next = p;
|
||||||
|
udp_bot_node_ = p;
|
||||||
|
} else {
|
||||||
|
udp_top_node_ = p;
|
||||||
|
udp_bot_node_ = p;
|
||||||
|
}
|
||||||
|
++udp_msgnode_size_;
|
||||||
|
udp_msg_mutex_->unlock();
|
||||||
|
NotifyLoopCond();
|
||||||
|
}
|
||||||
|
@ -3,7 +3,13 @@
|
|||||||
#include <a8/uuid.h>
|
#include <a8/uuid.h>
|
||||||
#include <a8/singleton.h>
|
#include <a8/singleton.h>
|
||||||
|
|
||||||
|
namespace a8
|
||||||
|
{
|
||||||
|
struct UdpPacket;
|
||||||
|
}
|
||||||
|
|
||||||
struct MsgNode;
|
struct MsgNode;
|
||||||
|
struct UdpMsgNode;
|
||||||
class App : public a8::Singleton<App>
|
class App : public a8::Singleton<App>
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
@ -25,6 +31,8 @@ class App : public a8::Singleton<App>
|
|||||||
const char *msgbody,
|
const char *msgbody,
|
||||||
int bodylen);
|
int bodylen);
|
||||||
|
|
||||||
|
void AddUdpMsg(a8::UdpPacket* pkt);
|
||||||
|
|
||||||
void NotifyLoopCond();
|
void NotifyLoopCond();
|
||||||
bool HasFlag(int flag);
|
bool HasFlag(int flag);
|
||||||
|
|
||||||
@ -45,6 +53,7 @@ private:
|
|||||||
|
|
||||||
bool ParseOpt();
|
bool ParseOpt();
|
||||||
void FreeSocketMsgQueue();
|
void FreeSocketMsgQueue();
|
||||||
|
void FreeUdpMsgQueue();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int argc = 0;
|
int argc = 0;
|
||||||
@ -63,13 +72,19 @@ public:
|
|||||||
std::mutex *loop_mutex_ = nullptr;
|
std::mutex *loop_mutex_ = nullptr;
|
||||||
std::condition_variable *loop_cond_ = nullptr;
|
std::condition_variable *loop_cond_ = nullptr;
|
||||||
|
|
||||||
std::mutex *msg_mutex_ = nullptr;
|
std::mutex* msg_mutex_ = nullptr;
|
||||||
MsgNode* top_node_ = nullptr;
|
MsgNode* top_node_ = nullptr;
|
||||||
MsgNode* bot_node_ = nullptr;
|
MsgNode* bot_node_ = nullptr;
|
||||||
MsgNode* work_node_ = nullptr;
|
MsgNode* work_node_ = nullptr;
|
||||||
|
|
||||||
|
std::mutex* udp_msg_mutex_ = nullptr;
|
||||||
|
UdpMsgNode* udp_top_node_ = nullptr;
|
||||||
|
UdpMsgNode* udp_bot_node_ = nullptr;
|
||||||
|
UdpMsgNode* udp_work_node_ = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
int msgnode_size_ = 0 ;
|
int msgnode_size_ = 0 ;
|
||||||
|
int udp_msgnode_size_ = 0 ;
|
||||||
int working_msgnode_size_ = 0;
|
int working_msgnode_size_ = 0;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
Loading…
x
Reference in New Issue
Block a user