示例#1
0
文件: sender.c 项目: diegohdorta/C
void sender(int queue_id)
{
	int count;
	struct timeval send_time;
	
	msgbuf_t message_buffer;

	data_t *data_ptr = (data_t *)(message_buffer.mtext);
	
	fprintf(stderr, "#%d# Sender - Inicialized...\n", getpid());

	for (count = 0; count < NO_OF_ITERATIONS; count++) {

		gettimeofday(&send_time,NULL);

		message_buffer.mtype = MESSAGE_MTYPE;
		data_ptr->msg_no = count;
		data_ptr->send_time = send_time;
		
		send_queue_message(&queue_id, &message_buffer);

		usleep(SENDER_DELAY_TIME);
	}
        exit(EXIT_SUCCESS);
}
示例#2
0
文件: app.c 项目: diegohdorta/C
void communication_app(int my_queue, int *queue_list, void *data)
{
	char cpf_list[MAXIMUM_THREADS][SIZE_CPF];
	int connected_clients[MAXIMUM_THREADS];
	size_t client_count = 0;
	size_t i;

	message_t info, request;

	do {
		debug(stderr, "Número de dispositivos conectados: %zu\n", client_count);
		
		debug(stderr, "Esperando uma mensagem do estabelecimento ou dispositivos...\n");
		receive_queue_message(my_queue, &info);
		
		if(info.type == MESSAGE_PAYMENT) {
		
			debug(stderr, "Recebido mensagem do estabelecimento!\n");
			debug(stderr, "Recebido CPF: %s Valor a ser cobrado: %lu\n", info.payment.cpf, info.payment.value_cents);		
	
			debug(stderr, "Pesquisando CPF na lista de clientes conectados...\n");
			
			for (i = 0; i < client_count; i++) {
			
				debug(stderr, "CPF: %s Cliente conectado no socket: %d\n", cpf_list[i], connected_clients[i]);
				
				if (strcmp(cpf_list[i], info.payment.cpf) == 0) {
				
					debug(stderr, "Cliente encontrado - CPF: %s\n", info.payment.cpf);
					request.type = MESSAGE_FORWARD_PAYMENT;
					request.forward_payment.value_cents = info.payment.value_cents;
					send_queue_message(connected_clients[i], &request);
				}
			}
		}
		else if (info.type == MESSAGE_DEVICE) {	
		
			debug(stderr, "Recebido mensagem do celular!\n");
			debug(stderr, "Novo CPF conectado no servidor: %s\n", info.connected_client.cpf);

			if (client_count == MAXIMUM_THREADS) {
				debug(stderr, "Número de threads excedeu o limite. Acabou memória!\n");
				debug(log_error, "Número de threads excedeu o limite. Acabou memória!\n");
				exit(EXIT_FAILURE);
			}
			
			strcpy(cpf_list[client_count], info.connected_client.cpf);
			connected_clients[client_count] = info.connected_client.device_queue;
			client_count++;
		}
		
	} while(true);
}
示例#3
0
文件: sender.cpp 项目: mordante/zar
void
tsender<STREAM>::send_message(tmessage message)
{
	LOG_T(__PRETTY_FUNCTION__
			, ": id »", message.id()
			, "« message »", message.contents()
			, "«.\n");

	const bool sending = !messages_.empty();
	messages_.push_back(std::move(message));

	if(!sending) {
		send_queue_message();
	}
}
示例#4
0
文件: sender.cpp 项目: mordante/zar
void
tsender<STREAM>::send_queue_message_handler(
	  const boost::system::error_code& error
	, const size_t bytes_transferred)
{
	LOG_T(__PRETTY_FUNCTION__
			, ": error »", error.message()
			, "« bytes_transferred »", bytes_transferred
			, "«.\n");

	total_bytes_transferred_ += bytes_transferred;

	if(send_handler_) {
		send_handler_(error, bytes_transferred, messages_.front());
	}

	messages_.pop_front();
	if(!messages_.empty()) {
		send_queue_message();
	}
}
示例#5
0
void read_command(pid_t child_pid) {
  char c;
  while ((c = getchar())) {
    if (c == '\n') {
      kill(child_pid, SIGSTOP);
      switch(get_command()) {
          case TRAIN_COMMAND: {
            clear_terminal();
            game_status_t status;
            if (get_status(&status) == -1) {
              break;
            }

            int resources = status.resources;
            printf("-- TRAINING --\n");
            printf("You have [%d] resources\n", resources);
            printf("What units do you want to train: 'light', 'heavy', 'cavalry', 'worker'\n");
            army_type_t army_type = get_army_type(get_command_string());
            while (army_type == 0) {
              printf("Wrong type passed. Try again\n");
              army_type = get_army_type(get_command_string());
            }

            int cost = unit_cost(army_type);
            int max = resources / cost;
            if (max == 0) {
              printf("You don't have enough resouces\n");
              sleep(1);
              break;
            }

            printf("You can train max [%d]\nHow many do you want?\n", max);
            int count = atoi(get_command_string());
            while (count > max || count < 0) {
              printf("Wrong number passed\n");
              count = atoi(get_command_string());
            }

            server_message_t msg = { 1, {
              UNIT_TRAINING,
              { .training = {
                  cid,
                  army_type,
                  count
              }}
            }};
            send_queue_message(&msg);
            printf("Started training for [%d] units\n", count);
            sleep(1);
            break;
          }
          case ATTACK_COMMAND: {
            clear_terminal();
            game_status_t status;
            if (get_status(&status) == -1) {
              break;
            }

            printf("-- ATTACK --\n");
            int light = attack_unit_count(LIGHT, status.army.light);
            int heavy = attack_unit_count(HEAVY, status.army.heavy);
            int cavalry = attack_unit_count(CAVALRY, status.army.cavalry);
            if (light == 0 && heavy == 0 && cavalry == 0) {
              printf("No army sent.\n");
              sleep(1);
              break;
            }

            army_t attack_army = { light, heavy, cavalry, 0 };
            server_message_t msg = { 1, {
              ATTACK,
              { .attack = { cid, attack_army }}
            }};
            send_queue_message(&msg);

            sleep(1);
            break;
          }
          default: {
            break;
          }
      }