added: plugin mechanism

files: core/plugin.h core/plugin.cpp core/pluginmsg.h
added: directory 'main' with main.cpp (moved from 'core' directory)
changed: the way of building
       nearly everything is in cmslu.so
       only main() is in cmslu and is dynamically linked with cmslu.so



git-svn-id: svn://ttmath.org/publicrep/cmslu/trunk@516 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2009-11-13 20:40:11 +00:00
parent 7db71d43e0
commit 378cfc0c3d
28 changed files with 554 additions and 355 deletions

127
main/main.cpp Executable file
View File

@@ -0,0 +1,127 @@
/*
* This file is a part of CMSLU -- Content Management System like Unix
* and is not publicly distributed
*
* Copyright (c) 2008-2009, Tomasz Sowa
* All rights reserved.
*
*/
#include <cstdlib>
#include <ctime>
#include <signal.h>
#include <iostream>
#include "../core/requestcontroller.h"
#include "../core/data.h"
#include "../core/log.h"
#include "../core/request.h"
#include "../core/db.h"
#include "../core/config.h"
#include "../core/notify.h"
#include "../core/plugin.h"
// singletons
// first 'data' then 'log' then 'request'
Data data;
Log log;
Log nlog; // notify log (used by another thread)
Request request;
Db db;
Config config;
RequestController req_controller;
Notify notify;
Plugin plugin;
void signal_term(int)
{
log << log1 << "cmslu stopped" << logend;
exit(0);
}
void signal_hup(int)
{
log << log1 << "SIGHUP received" << logend;
data.signal_hup = true;
config.ReadConfig(false); /* errors not to stdout */
}
void print_syntax()
{
std::cout << "Syntax:" << std::endl;
std::cout << " cmslu.fcgi config_file" << std::endl;
}
int main(int argv, char ** argc)
{
std::srand(std::time(0));
if( argv != 2 )
{
print_syntax();
return 1;
}
data.config_file = argc[1];
if( !config.ReadConfig(true) ) /* errors to stdout */
return 2;
// closing descriptors only at the beginning
// !! temporary we do not close standard output for errors
// client postgresql uses it for reporting warnings (I don't know why)
//close(2);
if( !data.log_stdout )
{
close(1);
data.stdout_is_closed = true;
}
log.Init(data.log_level, data.log_file, data.log_stdout);
nlog.Init(data.log_level, data.log_notify_file, false);
db.Init(data.db_database, data.db_user, data.db_pass);
plugin.LoadPlugins(data.plugin_file);
request.Init();
if( !req_controller.Init() )
return 1;
if( !notify.Init(data.templates) )
return 2;
signal(SIGTERM, signal_term);
signal(SIGINT, signal_term);
signal(SIGHUP, signal_hup);
while( true )
{
//log << log2 << "checking for table consistency:" << logend;
// !! zrobic wyjatek dla root
//db.CheckAllUrlSubject();
log << log1 << "cmslu started" << logend;
req_controller.Loop();
if( data.signal_hup )
data.signal_hup = false;
}
return 0;
}