Clean up a fair bit of the server backends. Getting rid of compilation warnings, signal/slot connection issues, etc..

This commit is contained in:
Ken Moore
2016-02-01 15:39:29 -05:00
parent 7463d84229
commit c8f97a69fe
6 changed files with 32 additions and 21 deletions

View File

@@ -30,14 +30,11 @@ void DProcess::startProc(){
finished = QDateTime::currentDateTime();
emit ProcFinished(ID);
return;
}else if(proclog.isEmpty()){
started = QDateTime::currentDateTime(); //first cmd started
rawcmds = cmds;
}else{
proclog.append("\n");
}
QString cmd = cmds.takeFirst();
success = false; //not finished yet
if(!proclog.isEmpty()){ proclog.append("\n"); }
else{ started = QDateTime::currentDateTime(); } //first cmd started
proclog.append("[Running Command: "+cmd+" ]");
this->start(cmd);
}
@@ -75,7 +72,7 @@ void DProcess::cmdFinished(int ret, QProcess::ExitStatus status){
// Dispatcher Class
// ================================
Dispatcher::Dispatcher(){
connect(this, SIGNAL(mkprocs(Dispatcher::PROC_QUEUE, QString, QStringList)), this, SLOT(mkProcs(Dispatcher::PROC_QUEUE, QString, QStringList)) );
}
Dispatcher::~Dispatcher(){
@@ -104,28 +101,30 @@ void Dispatcher::queueProcess(Dispatcher::PROC_QUEUE queue, QString ID, QString
}
void Dispatcher::queueProcess(Dispatcher::PROC_QUEUE queue, QString ID, QStringList cmds){
//This is the primary queueProcess() function - all the overloads end up here to do the actual work
DProcess *P = createProcess(ID, cmds);
QList<DProcess*> list;
if(!HASH.contains(queue)){ HASH.insert(queue, list); } //insert an empty list
HASH[queue] << P; //add this proc to the end of the list
if(queue==NO_QUEUE || HASH[queue].length()==1){
emit DispatchStarting(P->ID);
P->startProc(); //go ahead and start it now
}else{ CheckQueues(); }
//For multi-threading, need to emit a signal/slot for this action (object creations need to be in same thread as parent)
emit mkProcs(queue, ID, cmds);
}
// === PRIVATE ===
//Simplification routine for setting up a process
DProcess* Dispatcher:: createProcess(QString ID, QStringList cmds){
DProcess* P = new DProcess(this);
DProcess* Dispatcher::createProcess(QString ID, QStringList cmds){
DProcess* P = new DProcess();
P->cmds = cmds;
P->ID = ID;
P->success = false;
connect(P, SIGNAL(ProcFinished(QString)), this, SLOT(ProcFinished(QString)) );
return P;
}
// === PRIVATE SLOTS ===
void Dispatcher::mkProcs(Dispatcher::PROC_QUEUE queue, QString ID, QStringList cmds){
DProcess *P = createProcess(ID, cmds);
QList<DProcess*> list;
if(!HASH.contains(queue)){ HASH.insert(queue, list); } //insert an empty list
HASH[queue] << P; //add this proc to the end of the list
if(queue==NO_QUEUE || HASH[queue].length()==1){ P->startProc(); } //go ahead and start it now
else{ CheckQueues(); }
}
void Dispatcher::ProcFinished(QString ID){
//Find the process with this ID and close it down (with proper events)
bool found = false;
@@ -154,7 +153,7 @@ void Dispatcher::ProcFinished(QString ID){
}
void Dispatcher::CheckQueues(){
for(int i=0; i<enum_length; i++){
for(int i=0; i<enum_length; i++){
PROC_QUEUE queue = static_cast<PROC_QUEUE>(i);
if(HASH.contains(queue)){
QList<DProcess*> list = HASH[queue];
@@ -168,5 +167,5 @@ void Dispatcher::CheckQueues(){
} //end loop over list
}
} //end loop over queue types
} //end loop over queue types
}

View File

@@ -74,12 +74,17 @@ private:
DProcess* createProcess(QString ID, QStringList cmds);
private slots:
void mkProcs(Dispatcher::PROC_QUEUE, QString ID, QStringList cmds);
void ProcFinished(QString ID);
void CheckQueues();
signals:
//Main signals
void DispatchFinished(QString ID, bool success);
void DispatchStarting(QString ID);
//Signals for private usage
void mkprocs(Dispatcher::PROC_QUEUE, QString ID, QStringList cmds);
};

View File

@@ -9,6 +9,8 @@
// === PUBLIC ===
EventWatcher::EventWatcher(){
qRegisterMetaType<EventWatcher::EVENT_TYPE>("EventWatcher::EVENT_TYPE");
starting = true;
LPlog_pos = LPrep_pos = LPerr_pos = 0; //no pos yet
watcher = new QFileSystemWatcher(this);

View File

@@ -3,7 +3,10 @@
#define TMPBREAK "<!!line-break!!>"
//Overall check/creation of the log directory
void LogManager::checkLogDir(){
// - TO-DO
if(!QFile::exists(LOGDIR)){
QDir dir(LOGDIR);
dir.mkpath(LOGDIR);
}
}
//Main Log write function (all the overloaded versions end up calling this one)

View File

@@ -148,7 +148,6 @@ void WebServer::NewSocketConnection(){
qDebug() << "New Socket Connection";
connect(sock, SIGNAL(SocketClosed(QString)), this, SLOT(SocketClosed(QString)) );
connect(EVENTS, SIGNAL(NewEvent(EventWatcher::EVENT_TYPE, QJsonValue)), sock, SLOT(EventUpdate(EventWatcher::EVENT_TYPE, QJsonValue)) );
connect(sock, SIGNAL(BlackListAddress(QHostAddress)), this, SLOT(BlackListConnection(QHostAddress)) );
OpenSockets << sock;
}

View File

@@ -52,6 +52,8 @@ int main( int argc, char ** argv )
qDebug() << "sysadm-server must be started as root!";
return 1;
}
LogManager::checkLogDir(); //ensure the logging directry exists
//Evaluate input arguments
bool websocket = false;
quint16 port = 0;
@@ -89,6 +91,7 @@ int main( int argc, char ** argv )
if( w->startServer(port, websocket) ){
QThread TBACK;
EVENTS->moveToThread(&TBACK);
DISPATCHER->moveToThread(&TBACK);
TBACK.start();
QTimer::singleShot(0,EVENTS, SLOT(start()) );
//Now start the main event loop