mirror of
https://github.com/yanyiwu/cppjieba.git
synced 2025-07-18 00:00:12 +08:00
update limonp
This commit is contained in:
parent
f48445403e
commit
80a4ac0a51
16
conf/cppjieba_server.conf
Normal file
16
conf/cppjieba_server.conf
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# config
|
||||||
|
|
||||||
|
#socket listen port
|
||||||
|
port=11200
|
||||||
|
|
||||||
|
#number of thread
|
||||||
|
thread_num=4
|
||||||
|
|
||||||
|
#demon pid filepath
|
||||||
|
pid_file=/var/run/cppjieba_server.pid
|
||||||
|
|
||||||
|
#dict path
|
||||||
|
dict_path=/usr/share/CppJieba/jieba.dict.utf8
|
||||||
|
|
||||||
|
#model path
|
||||||
|
model_path=/usr/share/CppJieba/hmm_model.utf8
|
@ -43,7 +43,7 @@ namespace Limonp
|
|||||||
~ArgvContext(){};
|
~ArgvContext(){};
|
||||||
public:
|
public:
|
||||||
friend ostream& operator << (ostream& os, const ArgvContext& args);
|
friend ostream& operator << (ostream& os, const ArgvContext& args);
|
||||||
string operator [](uint i)
|
string operator [](uint i) const
|
||||||
{
|
{
|
||||||
if(i < _args.size())
|
if(i < _args.size())
|
||||||
{
|
{
|
||||||
@ -51,7 +51,7 @@ namespace Limonp
|
|||||||
}
|
}
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
string operator [](const string& key)
|
string operator [](const string& key) const
|
||||||
{
|
{
|
||||||
map<string, string>::const_iterator it = _mpss.find(key);
|
map<string, string>::const_iterator it = _mpss.find(key);
|
||||||
if(it != _mpss.end())
|
if(it != _mpss.end())
|
||||||
@ -61,7 +61,7 @@ namespace Limonp
|
|||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
public:
|
public:
|
||||||
bool hasKey(const string& key)
|
bool hasKey(const string& key) const
|
||||||
{
|
{
|
||||||
if(_mpss.find(key) != _mpss.end() || _sset.find(key) != _sset.end())
|
if(_mpss.find(key) != _mpss.end() || _sset.find(key) != _sset.end())
|
||||||
{
|
{
|
||||||
|
@ -1,2 +0,0 @@
|
|||||||
FILE(GLOB HEAD_HPP_LIST "*.hpp")
|
|
||||||
INSTALL(FILES ${HEAD_HPP_LIST} DESTINATION include/CppJieba/Limonp)
|
|
82
src/Limonp/Config.hpp
Normal file
82
src/Limonp/Config.hpp
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
/************************************
|
||||||
|
* file enc : utf8
|
||||||
|
* author : wuyanyi09@gmail.com
|
||||||
|
************************************/
|
||||||
|
#ifndef LIMONP_CONFIG_H
|
||||||
|
#define LIMONP_CONFIG_H
|
||||||
|
|
||||||
|
|
||||||
|
#include <map>
|
||||||
|
#include <fstream>
|
||||||
|
#include <iostream>
|
||||||
|
#include "logger.hpp"
|
||||||
|
#include "str_functs.hpp"
|
||||||
|
|
||||||
|
namespace Limonp
|
||||||
|
{
|
||||||
|
using namespace std;
|
||||||
|
class Config
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
bool loadFile(const char * const filePath)
|
||||||
|
{
|
||||||
|
ifstream ifs(filePath);
|
||||||
|
if(!ifs)
|
||||||
|
{
|
||||||
|
LogFatal("open file[%s] failed.", filePath);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string line;
|
||||||
|
vector<string> vecBuf;
|
||||||
|
uint lineno = 0;
|
||||||
|
while(getline(ifs, line))
|
||||||
|
{
|
||||||
|
lineno ++;
|
||||||
|
trim(line);
|
||||||
|
if(line.empty() || strStartsWith(line, "#"))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
vecBuf.clear();
|
||||||
|
if(!splitStr(line, vecBuf, "=") || 2 != vecBuf.size())
|
||||||
|
{
|
||||||
|
LogFatal("line[%d:%s] is illegal.", lineno, line.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
string& key = vecBuf[0];
|
||||||
|
string& value = vecBuf[1];
|
||||||
|
trim(key);
|
||||||
|
trim(value);
|
||||||
|
if(_map.end() != _map.find(key))
|
||||||
|
{
|
||||||
|
LogFatal("key[%s] already exists.", key.c_str());
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
_map[key] = value;
|
||||||
|
}
|
||||||
|
ifs.close();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
bool get(const string& key, string& value) const
|
||||||
|
{
|
||||||
|
map<string, string>::const_iterator it = _map.find(key);
|
||||||
|
if(_map.end() != it)
|
||||||
|
{
|
||||||
|
value = it->second;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
private:
|
||||||
|
map<string, string> _map;
|
||||||
|
private:
|
||||||
|
friend ostream& operator << (ostream& os, const Config& config);
|
||||||
|
};
|
||||||
|
|
||||||
|
ostream& operator << (ostream& os, const Config& config)
|
||||||
|
{
|
||||||
|
return os << config._map;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
@ -1,7 +1,7 @@
|
|||||||
#ifndef LIMONP_MYSQLCLIENT_H
|
#ifndef LIMONP_MYSQLCLIENT_H
|
||||||
#define LIMONP_MYSQLCLIENT_H
|
#define LIMONP_MYSQLCLIENT_H
|
||||||
|
|
||||||
#include <mysql/mysql.h>
|
#include <mysql.h>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -1,107 +0,0 @@
|
|||||||
/************************************
|
|
||||||
* file enc : utf8
|
|
||||||
* author : wuyanyi09@gmail.com
|
|
||||||
************************************/
|
|
||||||
#ifndef LIMONP_CONFIG_H
|
|
||||||
#define LIMONP_CONFIG_H
|
|
||||||
|
|
||||||
|
|
||||||
#include <map>
|
|
||||||
#include <fstream>
|
|
||||||
#include <iostream>
|
|
||||||
#include "logger.hpp"
|
|
||||||
#include "str_functs.hpp"
|
|
||||||
|
|
||||||
namespace Limonp
|
|
||||||
{
|
|
||||||
using std::map;
|
|
||||||
using std::string;
|
|
||||||
using std::cout;
|
|
||||||
using std::endl;
|
|
||||||
using std::ifstream;
|
|
||||||
class Config
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
Config(){_isInit = false;};
|
|
||||||
~Config(){};
|
|
||||||
bool init(const string& configFile)
|
|
||||||
{
|
|
||||||
if(_isInit)
|
|
||||||
{
|
|
||||||
LogFatal("already have been initialized. ");
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
ifstream ifile(configFile.c_str());
|
|
||||||
if(!ifile)
|
|
||||||
{
|
|
||||||
LogFatal("open configFile[%s] failed.", configFile.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
string line, key, value;
|
|
||||||
vector<string> vecBuf;
|
|
||||||
while(getline(ifile, line))
|
|
||||||
{
|
|
||||||
//line = _stripComment(line);
|
|
||||||
if(line.empty())
|
|
||||||
{
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
vecBuf.clear();
|
|
||||||
if(!splitStr(line, vecBuf, "=") || 2 != vecBuf.size())
|
|
||||||
{
|
|
||||||
LogFatal("line[%s] is illegal.", line.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
key = vecBuf[0];
|
|
||||||
value = vecBuf[1];
|
|
||||||
if(_map.end() != _map.find(key))
|
|
||||||
{
|
|
||||||
LogFatal("key[%s] already exists.", key.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
_map[key] = value;
|
|
||||||
}
|
|
||||||
ifile.close();
|
|
||||||
_isInit = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
void display()
|
|
||||||
{
|
|
||||||
for(map<string, string>::iterator it = _map.begin(); it != _map.end(); it++)
|
|
||||||
{
|
|
||||||
cout<<"("<<it->first<<","<<it->second<<")"<<endl;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
bool get(const string& key, string& value)
|
|
||||||
{
|
|
||||||
if(_map.end() != _map.find(key))
|
|
||||||
{
|
|
||||||
value = _map[key];
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
private:
|
|
||||||
//bool _stripComment(const string& line, string& res)
|
|
||||||
//{
|
|
||||||
// res = line;
|
|
||||||
// string::size_type pos = res.find('#');
|
|
||||||
// if(string::npos != pos)
|
|
||||||
// {
|
|
||||||
// res = res.substr(0, pos);
|
|
||||||
// }
|
|
||||||
// trim(res);
|
|
||||||
//}
|
|
||||||
private:
|
|
||||||
map<string, string> _map;
|
|
||||||
bool _isInit;
|
|
||||||
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|
||||||
namespace Limonp
|
|
||||||
{
|
|
||||||
extern Config gConfig;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif
|
|
@ -4,6 +4,7 @@
|
|||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "Limonp/ArgvContext.hpp"
|
#include "Limonp/ArgvContext.hpp"
|
||||||
|
#include "Limonp/Config.hpp"
|
||||||
#include "Husky/Daemon.h"
|
#include "Husky/Daemon.h"
|
||||||
#include "Husky/ServerFrame.h"
|
#include "Husky/ServerFrame.h"
|
||||||
#include "MPSegment.h"
|
#include "MPSegment.h"
|
||||||
@ -13,15 +14,15 @@
|
|||||||
using namespace Husky;
|
using namespace Husky;
|
||||||
using namespace CppJieba;
|
using namespace CppJieba;
|
||||||
|
|
||||||
const char * const DEFAULT_DICTPATH = "../dicts/jieba.dict.utf8";
|
class ReqHandler: public IRequestHandler
|
||||||
const char * const DEFAULT_MODELPATH = "../dicts/hmm_model.utf8";
|
|
||||||
|
|
||||||
class ServerDemo: public IRequestHandler
|
|
||||||
{
|
{
|
||||||
|
private:
|
||||||
|
string _dictPath;
|
||||||
|
string _modelPath;
|
||||||
public:
|
public:
|
||||||
ServerDemo(){};
|
ReqHandler(const string& dictPath, const string& modelPath): _dictPath(dictPath), _modelPath(modelPath){};
|
||||||
virtual ~ServerDemo(){};
|
virtual ~ReqHandler(){};
|
||||||
virtual bool init(){return _segment.init(DEFAULT_DICTPATH, DEFAULT_MODELPATH);};
|
virtual bool init(){return _segment.init(_dictPath.c_str(), _modelPath.c_str());};
|
||||||
virtual bool dispose(){return _segment.dispose();};
|
virtual bool dispose(){return _segment.dispose();};
|
||||||
public:
|
public:
|
||||||
virtual bool do_GET(const HttpReqInfo& httpReq, string& strSnd)
|
virtual bool do_GET(const HttpReqInfo& httpReq, string& strSnd)
|
||||||
@ -38,26 +39,78 @@ class ServerDemo: public IRequestHandler
|
|||||||
MixSegment _segment;
|
MixSegment _segment;
|
||||||
};
|
};
|
||||||
|
|
||||||
int main(int argc,char* argv[])
|
bool run(int argc, char** argv)
|
||||||
{
|
{
|
||||||
if(argc != 7)
|
if(argc < 2)
|
||||||
{
|
{
|
||||||
printf("usage: %s -n THREAD_NUMBER -p LISTEN_PORT -k start|stop\n",argv[0]);
|
return false;
|
||||||
return -1;
|
|
||||||
}
|
}
|
||||||
ArgvContext arg(argc, argv);
|
ArgvContext arg(argc, argv);
|
||||||
unsigned int port = atoi(arg["-p"].c_str());
|
if(arg["-c"].empty())
|
||||||
unsigned int threadNum = atoi(arg["-n"].c_str());
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Config conf;
|
||||||
|
if(!conf.loadFile(arg["-c"].c_str()))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
unsigned int port = 0;
|
||||||
|
unsigned int threadNum = 0;
|
||||||
|
string pidFile;
|
||||||
|
string dictPath;
|
||||||
|
string modelPath;
|
||||||
|
string val;
|
||||||
|
if(!conf.get("port", val))
|
||||||
|
{
|
||||||
|
LogFatal("conf get port failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
port = atoi(val.c_str());
|
||||||
|
if(!conf.get("thread_num", val))
|
||||||
|
{
|
||||||
|
LogFatal("conf get thread_num failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
threadNum = atoi(val.c_str());
|
||||||
|
if(!conf.get("pid_file", pidFile))
|
||||||
|
{
|
||||||
|
LogFatal("conf get pid_file failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
ServerDemo s;
|
if(!conf.get("dict_path", dictPath))
|
||||||
Daemon daemon(&s);
|
{
|
||||||
|
LogFatal("conf get dict_path failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if(!conf.get("model_path", modelPath))
|
||||||
|
{
|
||||||
|
LogFatal("conf get model_path failed.");
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
ReqHandler reqHandler(dictPath, modelPath);
|
||||||
|
ServerFrame sf(port, threadNum, &reqHandler);
|
||||||
|
Daemon daemon(&sf, pidFile.c_str());
|
||||||
if(arg["-k"] == "start")
|
if(arg["-k"] == "start")
|
||||||
{
|
{
|
||||||
return !daemon.Start(port, threadNum);
|
return daemon.start();
|
||||||
}
|
}
|
||||||
else
|
else if(arg["-k"] == "stop")
|
||||||
{
|
{
|
||||||
return !daemon.Stop();
|
return daemon.stop();
|
||||||
}
|
}
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char* argv[])
|
||||||
|
{
|
||||||
|
if(!run(argc, argv))
|
||||||
|
{
|
||||||
|
printf("usage: %s -c <config_file> -k <start|stop>\n", argv[0]);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
return EXIT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user