MainObject::MainObject(QObject *parent) :QObject(parent) { new RDApplication(RDApplication::Console,"rdrepld",RDREPLD_USAGE); // // Make sure we're the only instance running // if(RDCheckDaemon(RD_RDREPLD_PID)) { printf("rdrepld: aborting - multiple instances not allowed"); exit(1); } // // Initialize Data Structures // debug=false; // // Calculate Temporary Directory // repl_temp_dir=RDTempDir(); // // Detach // if(qApp->argc()==1) { RDDetach(rda->config()->logCoreDumpDirectory()); } else { debug=true; } ::signal(SIGINT,SigHandler); ::signal(SIGTERM,SigHandler); ::signal(SIGCHLD,SigHandler); if(!RDWritePid(RD_PID_DIR,"rdrepld.pid")) { printf("rdrepld: aborting - can't write pid file\n"); exit(1); } // // Start the Main Loop // repl_loop_timer=new QTimer(this); connect(repl_loop_timer,SIGNAL(timeout()),this,SLOT(mainLoop())); repl_loop_timer->start(RD_RDREPL_SCAN_INTERVAL,true); rda->config()->log("rdrepld",RDConfig::LogNotice,"started"); }
MainObject::MainObject(QObject *parent,const char *name) :QObject(parent,name) { // // Read Command Options // RDCmdSwitch *cmd= new RDCmdSwitch(qApp->argc(),qApp->argv(),"ripcd",RIPCD_USAGE); delete cmd; // // Load Local Configs // ripcd_config=new RDConfig(RD_CONF_FILE); ripcd_config->load(); // // Make sure we're the only instance running // if(RDCheckDaemon(RD_RIPCD_PID)) { LogLine(RDConfig::LogErr, "ERROR ripcd aborting - multiple instances not allowed"); exit(1); } // // Initialize Data Structures // debug=false; for(int i=0;i<RIPCD_MAX_CONNECTIONS;i++) { socket[i]=NULL; istate[i]=0; argnum[i]=0; argptr[i]=0; auth[i]=false; } for(int i=0;i<MAX_MATRICES;i++) { for(int j=0;j<MAX_GPIO_PINS;j++) { ripcd_gpi_state[i][j]=false; ripcd_gpo_state[i][j]=false; } } ripc_onair_flag=false; server=new RipcdSocket(RIPCD_TCP_PORT,0,this,"socket"); if(!server->ok()) { exit(1); } connect(server,SIGNAL(connection(int)),this,SLOT(newConnection(int))); // // Macro Timers // QSignalMapper *mapper=new QSignalMapper(this,"macro_timer_mapper"); connect(mapper,SIGNAL(mapped(int)),this,SLOT(macroTimerData(int))); for(int i=0;i<RD_MAX_MACRO_TIMERS;i++) { ripc_macro_cart[i]=0; ripc_macro_timer[i]=new QTimer(this); mapper->setMapping(ripc_macro_timer[i],i); connect(ripc_macro_timer[i],SIGNAL(timeout()),mapper,SLOT(map())); } // // Open Database // QString err (tr("ripcd: ")); ripcd_db = RDInitDb (&err); if(!ripcd_db) { printf ("%s\n",err.ascii()); exit (1); } connect (RDDbStatus(),SIGNAL(logText(RDConfig::LogPriority,const QString &)), this,SLOT(log(RDConfig::LogPriority,const QString &))); // // CAE Connection // rdcae=new RDCae(parent,name); rdcae->connectHost("localhost",CAED_TCP_PORT,ripcd_config->password()); // // Station // rdstation=new RDStation(ripcd_config->stationName()); rdstation->setUserName(rdstation->defaultName()); ripcd_host_addr=rdstation->address(); if(qApp->argc()==1) { RDDetach(ripcd_config->logCoreDumpDirectory()); } else { debug=true; } ::signal(SIGCHLD,SigHandler); ::signal(SIGTERM,SigHandler); ::signal(SIGINT,SigHandler); if(!RDWritePid(RD_PID_DIR,"ripcd.pid",ripcd_config->uid())) { printf("ripcd: can't write pid file\n"); exit(1); } // // The RML Sockets // ripcd_rml_send=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_echo=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_echo->bind(QHostAddress(),RD_RML_ECHO_PORT); ripcd_rml_echo->setBlocking(false); ripcd_rml_noecho=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_noecho->bind(QHostAddress(),RD_RML_NOECHO_PORT); ripcd_rml_noecho->setBlocking(false); ripcd_rml_reply=new QSocketDevice(QSocketDevice::Datagram); ripcd_rml_reply->bind(QHostAddress(),RD_RML_REPLY_PORT); ripcd_rml_reply->setBlocking(false); LoadGpiTable(); // // Initialize local RMLs // LoadLocalMacros(); // // Start RML Polling // QTimer *timer=new QTimer(this,"timer"); timer->changeInterval(RIPCD_RML_READ_INTERVAL); connect(timer,SIGNAL(timeout()),this,SLOT(readRml())); timer->start(true); // // Database Backup Timer // databaseBackup(); ripcd_backup_timer=new QTimer(this,"ripcd_backup_timer"); connect(ripcd_backup_timer,SIGNAL(timeout()),this,SLOT(databaseBackup())); ripcd_backup_timer->start(86400000); // // Maintenance Routine Timer // srandom(QTime::currentTime().msec()); ripcd_maint_timer=new QTimer(this,"ripcd_maint_timer"); connect(ripcd_maint_timer,SIGNAL(timeout()),this,SLOT(checkMaintData())); int interval=GetMaintInterval(); ripcd_maint_timer->start(interval); LogLine(RDConfig::LogInfo,"started"); }