Esempio n. 1
0
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);
				}
			}
		}
	}
}
Esempio n. 2
0
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);
}
Esempio n. 3
0
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();
		}
	}
}
Esempio n. 4
0
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);
	}
}