Exemplo n.º 1
0
Arquivo: server.cpp Projeto: elipp/car
int server_receive_packets() {
	static size_t num_packets_received = 0;
	static size_t num_bytes_received = 0;
	static _timer timer2;
	time_t t = timer2.get_ns();
	if (t > 1000000000) {
		std::cerr << "packets received per second: " << num_packets_received << " (" << num_bytes_received << " B/s).\n";
		timer2.begin();
		num_packets_received = 0;
		num_bytes_received = 0;
	}
	
	struct sockaddr_in from;
	socklen_t from_length = sizeof(from);

	// the UDP socket is now int non-blocking mode, i.e. recvfrom returns 0 if no packets are to be read
	
//	memset(packet_data, 0, maximum_packet_size);	***
	memset(&from, 0, from_length);

	int received_bytes = recvfrom(sockfd, (char*)packet_data,
	maximum_packet_size, 0, (struct sockaddr*)&from, &from_length);
	packet_data[received_bytes] = '\0';

	num_bytes_received += received_bytes < 0 ? 0 : received_bytes;

	size_t num_packets = 0;

	if (received_bytes <= 0) { return 1; }
	// else:
	num_packets_received++;
	do {
		++num_packets;
		num_bytes_received += received_bytes < 0 ? 0 : received_bytes;
;
		server_process_packet(&from);

		memset(&from, 0, from_length);

		received_bytes = recvfrom(sockfd, (char*)packet_data,
		maximum_packet_size, 0, (struct sockaddr*)&from, &from_length);
		
		packet_data[received_bytes] = '\0';

	} while (received_bytes > 0);

	return 0;
}
Exemplo n.º 2
0
int main (int argc, char ** argv) {
    prev = getthetime();
    (void) signal(SIGINT,leave);

    if (enet_initialize () != 0) {
        fprintf (stderr, "An error occurred while initializing ENet.\n");
        return EXIT_FAILURE;
    }

    atexit (enet_deinitialize);


    address.host = ENET_HOST_ANY;
    address.port = 5001;

    enetserver = enet_host_create (& address /* the address to bind the server host to */,
                                   32      /* allow up to 32 clients and/or outgoing connections */,
                                   0      /* allow up to 2 channels to be used, 0 and 1 */,
                                   0      /* assume any amount of incoming bandwidth */,
                                   0      /* assume any amount of outgoing bandwidth */);
    if (enetserver== NULL) {
        fprintf (stderr,
                 "An error occurred while trying to create an ENet server host.\n");
        exit (EXIT_FAILURE);
    }

    tronserver = server_init(enetserver);
    atexit(clean_up);
    printf("This is the TronClone Server.\nPush ^c to kill the server.\n");

    /* Main game loop */
    while(1) {
        int i, index, temp;
        char buf[80];
        if (enet_host_service (enetserver, & event, 10) > 0) {
            switch (event.type) {
            case ENET_EVENT_TYPE_CONNECT:
                enet_address_get_host_ip(&event.peer->address, buf, sizeof buf);
                printf ("A new client connected from %s\n",
                        buf);
                server_add_user(tronserver, event.peer);
                break;

            case ENET_EVENT_TYPE_RECEIVE:
                server_process_packet(tronserver, event);
                enet_packet_destroy (event.packet);
                break;

            case ENET_EVENT_TYPE_DISCONNECT:
                enet_address_get_host_ip(&event.peer->address, buf, sizeof buf);
                printf ("A client disconnected from %s: %u.\n",
                        buf,
                        event.peer -> address.port);

                server_remove_user(tronserver, event.peer);
                event.peer -> data = NULL;
                break;
            }
        }

        now = getthetime();
        double h = (now-prev)/1000000.0f;
        server_update(tronserver, h);
        prev = now;
    }
    clean_up();
}