计划寒假写一个远程参数配置工具包。
Linux中有大家熟知的proc fs,透过proc fs用户可以很方便地在runtime配置内核参数。
对于一个常规应用程序,如果对外也提供这样一个接口,让用户在运行时能够配置参数,会不会有意思呢?
实现一个工具包,对外提供http配置服务,对内可以修改程序运行时参数,控制行为等。
/* Currently doesn't support parallel modification. Serialized by lock */
class InterfaceService{
RegisterService(Service *sv, CtrlParam *ctl); //注册服务回调函数
UnRegisterService(Service *sv); //注销服务
};
class Service{
public:
Set();
Get();
Act();
char serviceName[MAX_NAME];
void *data;
/* need more things to manage internal state. */
};
class CtrlParam{
public:
OutputHTML();
};
class Server{
public:
ParseForm();
OutputHTML();
private:
FindService(char serviceName[]);
Service *list;
};
简单实现样例:
Server::ParseForm(Form *form)
{
Service *sv;
sv = FindService(form->GetServiceName());
if (sv) {
if (GET_DATA == form->type){
sv->Get(); // data saved to sv->data
}else if(SET_DATA == form->type){
sv->data = form->GetData();
sv->Set();
}else if(INVOKE_ACTION == form->type){
sv->data = form->GetData();
sv->Act();
}
}
}
Server::OutputHTML()
{
foreach(list, s){
s->OutputHTML();
}
}
核心组件:
HTTP服务器,FORM解释器,动作响应器