static void net_send_data(){ int_ what_to_update = INT_MAX; std::vector<array_id_t> client_vector = all_ids_of_type("client_t"); const uint_ client_vector_size = client_vector.size(); if(client_vector_size == 0){ return; } if(once_per_second){ const std::string reset_vector = wrap(ARRAY_FUNCTION_START, "reset_vector", ARRAY_FUNCTION_END); for(uint_ i = 0;i < client_vector_size;i++){ net->write(reset_vector, ((client_t*)find_pointer(client_vector[i], "coord_t"))->connection_info_id); } } std::vector<std::string> data_to_send = generate_outbound_class_data(); for(uint_ c = 0;c < data_to_send.size();c++){ for(uint_ i = 0;i < client_vector_size;i++){ client_t *tmp_client = (client_t*)find_pointer(client_vector[i], "client_t"); if(tmp_client != nullptr){ if(find_pointer(tmp_client->connection_info_id, "net_ip_connection_info_t") == nullptr){ printf_("WARNING: Found an addressless client", PRINTF_UNUSUAL_WARN); }else{ net->write(gen_string, tmp_client->connection_info_id); } } } } }
void input_close(){ try{ input_t *input = (input_t*)find_pointer(all_ids_of_type("input_t")[0]); throw_if_nullptr(input); delete input; input = nullptr; }catch(const std::logic_error &e){} loop_del(loop, input_engine); }
static void net_pingout(){ std::vector<array_id_t> client_vector = all_ids_of_type("client_t"); const uint_ client_vector_size = client_vector.size(); for(uint_ i = 0;i < client_vector_size;i++){ ((client_t*)find_pointer(client_vector[i], "client_t"))->array.data_lock.lock(); if(net_check_pingout((client_t*)find_pointer(client_vector[i], "client_t")) == true){ ((client_t*)find_pointer(client_vector[i], "client_t"))->array.data_lock.unlock(); delete (client_t*)find_pointer(client_vector[i], "client_t"); }else{ ((client_t*)find_pointer(client_vector[i], "client_t"))->array.data_lock.unlock(); } } }
void input_engine(){ try{ input_t *input = (input_t*)find_pointer(all_ids_of_type("input_t")[0]); throw_if_nullptr(input); input->array.data_lock.lock(); // no throws are allowed beyond this point client_t *self = (client_t*)find_pointer(self_id); if(self != nullptr && self->keyboard_map_id != DEFAULT_INT_VALUE){ input->array.data_lock.unlock(); input->set_keyboard_map_id(self->keyboard_map_id); input->array.data_lock.lock(); } input->loop(); if(input->query_key(SDL_SCANCODE_ESCAPE)){ set_signal(SIGTERM, true); } input->array.data_lock.unlock(); }catch(std::logic_error &e){ printf_("WARNING: input_t: cannot use the input library yet\n", PRINTF_UNLIKELY_WARN); } }