Пример #1
0
	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();
	}
Пример #2
0
std::string util_encode_options(KVS &params)
{
	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;
}
Пример #3
0
	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;
	}
Пример #4
0
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;	// 都存在
}
Пример #5
0
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(), '.'));
    }
  }
}
Пример #6
0
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 // 
}