#define _GNU_SOURCE #include "tem/ctl.h" #include "network/network.h" #include "tools/toml/toml.h" #include "tools/quit/quit.h" #include "memctl/memctl.h" #include #include #include int get_config(toml_table_t **server,char *path) { FILE* fp; char errbuf[200]; //打开配置文件,加载到缓存 fp = fopen(path,"r"); if(!fp) { perror("cannot parse\n"); return 0; } toml_table_t *tem = toml_parse_file(fp,errbuf,sizeof(errbuf)); tem = toml_table_in(tem,"app"); *server = tem; fclose(fp); return 1; } int main() { toml_table_t* server; if(!get_config(&server,"config/config.toml")) perror("load config error"); int port = (int)toml_int_in(server,"list_port").u.i; //加载配置文件,读取端口 mem_ctl *mem_ctler = (mem_ctl*)malloc(sizeof(mem_ctl)); init_memctl(mem_ctler); log_manager *logsmanager=(log_manager*)malloc(sizeof(log_manager)); //创建日志管理器与定时清理线层 init_loger(logsmanager,mem_ctler); pthread_create(&logsmanager->pid,NULL,logsmanager->clear_log,logsmanager); Ctl *teml = init_tem(logsmanager); teml->config = server; //初始化终端对象 int fifo[2]; if(pipe(fifo)==-1) perror("ERROR "); netm *networkmanager = (netm*)malloc(sizeof(netm)); init_networkmanager(networkmanager,fifo,logsmanager,port); //初始化网络管理器对象 pthread_create(&networkmanager->pid,NULL,networkmanager->run_network,(void*)networkmanager); //启动网络监听与线程池,并加载插件 alres *resource = (alres*)malloc(sizeof(alres)); resource->loger = logsmanager; resource->network = networkmanager; resource->tem = teml; resource->memctler = mem_ctler; on_exit(quit_all,resource); //注册清理函数 teml->run(teml,fifo); //启动终端 //等待网络管理器进程结束 pthread_join(networkmanager->pid,NULL); networkmanager->pid = -1; close(fifo[1]); log_manager_stop(logsmanager); pthread_join(logsmanager->pid,NULL); logsmanager->pid = -1; return 1; }