const char *get(const char *key, const char *def) const { KVS::const_iterator itf = kvs_.find(key); if (itf == kvs_.end()) return def; else return itf->second.c_str(); }
std::string util_encode_options(KVS ¶ms) { std::stringstream ss; KVS::iterator it; for (it = params.begin(); it != params.end(); ++it) { ss << it->first << "=" << it->second << "&"; } std::string rc = ss.str(); return rc; }
int save(const char *fname = 0) const { if (!fname) fname = fname_session_.c_str(); FILE *fp = fopen(fname, "w"); if (fp) { KVS::const_iterator it; for (it = kvs_.begin(); it != kvs_.end(); ++it) { fprintf(fp, "%s=%s\n", it->first.c_str(), it->second.c_str()); } fclose(fp); return 0; } return -1; }
bool chk_params(const KVS &kvs, char info[1024], const char *key, ...) { bool ok = true; va_list list; va_start(list, key); strcpy(info, ""); while (key) { KVS::const_iterator itf = kvs.find(key); if (itf == kvs.end()) { ok = false; snprintf(info, 1024, "'%s' not found", key); break; } key = va_arg(list, const char*); } va_end(list); return ok; // 都存在 }
void Channel::get_subchannel_names(KVS &kvs, int owner_id, const std::string &prefix, std::vector<std::string> &names, unsigned int nlevels) { std::string kvs_prefix = string_printf("%d", owner_id); if (prefix != "") kvs_prefix += "." + prefix; std::vector<std::string> keys; kvs.get_subkeys(kvs_prefix, keys, nlevels, not_all_digits_filter); for (unsigned i = 0; i < keys.size(); i++) { if (filename_suffix(keys[i]) == "info") { std::string name_with_uid = filename_sans_suffix(keys[i]); tassert(strchr(name_with_uid.c_str(), '.')); names.push_back(1+strchr(name_with_uid.c_str(), '.')); } } }
int main(int argc, char **argv) { _gc = new GlobalConfig; #ifdef WIN32 _verbase = false; if (argc == 2 && strcmp(argv[1], "/install") == 0) { return install_service(argv[0]); } if (argc == 2 && strcmp(argv[1], "/uninstall") == 0) { return uninstall_service(argv[0]); } if (argc == 2 && strcmp(argv[1], "/debug") == 0) { _verbase = true; } // if (argc == 1) // _verbase = true; #if LICENSE int lcs_chk = el_init("zonekey_mcu.lcs"); if (lcs_chk == -1) { fprintf(stderr, "ERR: license check error\n"); return -1; } else if (lcs_chk == -2) { fprintf(stderr, "ERR: license timeout\n"); return -2; } const char *feathers = el_getfeatures(); KVS fs = parse_feathers(feathers); // TODO: 检查是否限制同时启动的数目 ... KVS::const_iterator itf = fs.find("cap_max"); if (itf != fs.end()) { _gc->cap_max = atoi(itf->second.c_str()); if (_gc->cap_max == 0) _gc->cap_max = 1; } #endif // HANDLE env = OpenEvent(EVENT_MODIFY_STATE, 0, GLOBAL_NAME); if (env) { fprintf(stderr, "zonekey_mcu: only one instance running\n"); CloseHandle(env); return -1; } else { env = CreateEvent(0, 0, 0, GLOBAL_NAME); _global_obj = env; if (!_verbase) { SERVICE_TABLE_ENTRY ServiceTable[] = { { SERVICE_NAME, (LPSERVICE_MAIN_FUNCTION)mainp }, { 0, 0 }, }; // 启动服务的控制分派机线程,这个将直到服务结束后,返回 StartServiceCtrlDispatcher(ServiceTable); return 0; } else { mainp(argc, argv); return 0; } } #else // // linux mainp(argc, argv); return 0; #endif // }