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); } } } }
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; }