1
This commit is contained in:
parent
e4dc35c2af
commit
f0e3d861fb
@ -8,6 +8,7 @@
|
||||
|
||||
#include <a8/xtimer.h>
|
||||
#include <a8/uuid.h>
|
||||
#include <a8/udplistener.h>
|
||||
|
||||
#include <f8/netmsghandler.h>
|
||||
#include <f8/udplog.h>
|
||||
@ -39,6 +40,12 @@ struct MsgNode
|
||||
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_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_cond_ = new std::condition_variable();
|
||||
msg_mutex_ = new std::mutex();
|
||||
udp_msg_mutex_ = new std::mutex();
|
||||
|
||||
srand(time(nullptr));
|
||||
InitLog();
|
||||
@ -176,8 +184,11 @@ void App::UnInit()
|
||||
UnInitLog();
|
||||
|
||||
FreeSocketMsgQueue();
|
||||
FreeUdpMsgQueue();
|
||||
delete msg_mutex_;
|
||||
msg_mutex_ = nullptr;
|
||||
delete udp_msg_mutex_;
|
||||
udp_msg_mutex_ = nullptr;
|
||||
delete loop_cond_;
|
||||
loop_cond_ = nullptr;
|
||||
delete loop_mutex_;
|
||||
@ -508,3 +519,42 @@ void App::FreeSocketMsgQueue()
|
||||
}
|
||||
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/singleton.h>
|
||||
|
||||
namespace a8
|
||||
{
|
||||
struct UdpPacket;
|
||||
}
|
||||
|
||||
struct MsgNode;
|
||||
struct UdpMsgNode;
|
||||
class App : public a8::Singleton<App>
|
||||
{
|
||||
private:
|
||||
@ -25,6 +31,8 @@ class App : public a8::Singleton<App>
|
||||
const char *msgbody,
|
||||
int bodylen);
|
||||
|
||||
void AddUdpMsg(a8::UdpPacket* pkt);
|
||||
|
||||
void NotifyLoopCond();
|
||||
bool HasFlag(int flag);
|
||||
|
||||
@ -45,6 +53,7 @@ private:
|
||||
|
||||
bool ParseOpt();
|
||||
void FreeSocketMsgQueue();
|
||||
void FreeUdpMsgQueue();
|
||||
|
||||
public:
|
||||
int argc = 0;
|
||||
@ -63,13 +72,19 @@ public:
|
||||
std::mutex *loop_mutex_ = nullptr;
|
||||
std::condition_variable *loop_cond_ = nullptr;
|
||||
|
||||
std::mutex *msg_mutex_ = nullptr;
|
||||
std::mutex* msg_mutex_ = nullptr;
|
||||
MsgNode* top_node_ = nullptr;
|
||||
MsgNode* bot_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:
|
||||
int msgnode_size_ = 0 ;
|
||||
int udp_msgnode_size_ = 0 ;
|
||||
int working_msgnode_size_ = 0;
|
||||
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user