コード例 #1
0
void Config_Cache::refresh_monitor_link_cache(void) {
	const Json::Value &server_solution = CONFIG_INSTANCE->open_solution();

	int port_prefix = server_maintainer_cache_.game_port_prefix * 1000;

	for (Json::Value::const_iterator monitor_it = server_solution["monitor_list"].begin(); monitor_it != server_solution["monitor_list"].end(); ++monitor_it) {
		for (Json::Value::iterator acceptor_it = (*monitor_it)["acceptor"].begin(); acceptor_it != (*monitor_it)["acceptor"].end(); ++acceptor_it) {
			Monitor_Link_Info monitor_link;

			int run_on = (*monitor_it)["run_on"].asInt();
			Server_Id_IP_Map::iterator ip_find_it = server_ip_ip_cache_.find(run_on);
			if (ip_find_it != server_ip_ip_cache_.end()) {
				monitor_link.telecom_ip = ip_find_it->second.telecom_ip;
				monitor_link.unicom_ip = ip_find_it->second.unicom_ip;
			} else {
				LOG_ABORT("开服run_on:%d不存在", run_on);
			}

			Server_Enum::MONITOR_TYPE monitor_type = (Server_Enum::MONITOR_TYPE)(*acceptor_it)["monitor_type"].asInt();
			int client_port_suffix = (*acceptor_it)["client_port_suffix"].asInt();
			monitor_link.client_port = (*acceptor_it)["ingore_prefix"].asBool() ? client_port_suffix : port_prefix + client_port_suffix;

			int inner_port_suffix = (*acceptor_it)["inner_port_suffix"].asInt();
			monitor_link.inner_port = (*acceptor_it)["ingore_prefix"].asBool() ? inner_port_suffix : port_prefix + inner_port_suffix;

			if ((*acceptor_it)["list"] != Json::Value::null) {
				for (Json::Value::iterator list_it = (*acceptor_it)["list"].begin(); list_it != (*acceptor_it)["list"].end(); ++list_it) {
					Monitor_Unique_ID monitor_index;
					monitor_index.uuid = CONFIG_CACHE->server_flag();
					monitor_index.type = monitor_type;

					if ((*list_it).isArray()) {
						monitor_index.id = (*list_it)[0u].asInt();
						if ((*list_it).size() == 2)
							monitor_index.order = (*list_it)[1u].asInt();
						if ((*list_it).size() > 2)
							LOG_ABORT("open solution error, id:%d", monitor_index.id);
					} else {
						monitor_index.id = (*list_it)["id"].asInt();
						monitor_index.order = (*list_it)["order"].asInt();
					}

					set_map_second_value_by_key(monitor_index, monitor_link_cache_, monitor_link);
				}
			} else {
				Monitor_Unique_ID monitor_index(CONFIG_CACHE->server_flag(), monitor_type, 0, 0);
				set_map_second_value_by_key(monitor_index, monitor_link_cache_, monitor_link);
			}
		}
	}
}
コード例 #2
0
static int set_monitor_gain(struct echoaudio *chip, u16 output, u16 input,
			    s8 gain)
{
	if (snd_BUG_ON(output >= num_busses_out(chip) ||
		    input >= num_busses_in(chip)))
		return -EINVAL;

	if (wait_handshake(chip))
		return -EIO;

	chip->monitor_gain[output][input] = gain;
	chip->comm_page->monitors[monitor_index(chip, output, input)] = gain;
	return 0;
}