Example #1
0
MbClientHandle
mb_client_register_source(int id, int pages)
{
    mbclient* client = get_client_by_id(id);
    if (client == NULL) {
        client = malloc(sizeof(mbclient));
	if (client == NULL) {
	    return NULL;
	}
        memset(&(client->sock), 0, sizeof(struct sockaddr_un));
        client->id = id;
        client->pages = pages;
        client->source_pages = pages < 0 ? 0 : pages;
        client->fd = 0;
        client->is_bidi = 1;
        if (client_register(client) < 0) {
            free(client);
            return NULL;
        } else {
	    client->next = mb_default_client.next;
	    mb_default_client.next = client;
	}
    } else {
        if (!(client->is_bidi != 1) || 
            client->source_pages != (unsigned int)pages)
            client = NULL;
    }
    return client;
}   
Example #2
0
MbClientHandle
mb_client_register(int id, int is_bidi)
{
    mbclient* client = get_client_by_id(id);
    if (client == NULL) {
        client = malloc(sizeof(mbclient));
	if (client == NULL) {
	    return NULL;
	}
        memset(&(client->sock), 0, sizeof(struct sockaddr_un));
        client->id = id;
        client->pages = 0;
        client->source_pages = 0;
        client->fd = 0;
        client->is_bidi = is_bidi ? 1 : 0;
        if (client_register(client) < 0) {
            free (client);
            return NULL;
        } else {
	    client->next = mb_default_client.next;
	    mb_default_client.next = client;
	}
    } else {
        if (client->is_bidi != is_bidi)
            client = NULL;
    }
    return client;
}
Example #3
0
File: server.cpp Project: elipp/car
int server_process_packet(struct sockaddr_in *from) {

	unsigned int from_address = ntohl(from->sin_addr.s_addr);
	unsigned short from_port = ntohs(from->sin_port);
	char *inet_addr = inet_ntoa(from->sin_addr);

	if (packet_data[0] == C_HANDSHAKE) {
		std::cerr << "client @ " << inet_addr << ":" << from_port << " :handshake request\n";
		int newclient_id = server_add_client(from);
		if (newclient_id < 0) { std::cerr << "server_add_client: error.\n"; return -1; }
		interm_buf[0] = S_HANDSHAKE_OK;
		interm_buf[1] = newclient_id;
		interm_buf[2] = 0;
		struct client *newclient = get_client_by_id(newclient_id);
		server_send_packet(interm_buf, 2, newclient);
		server_post_peer_list();
	}
	else if (packet_data[0] == C_QUIT) {
		unsigned short id = packet_data[1];
		struct client *quitting_client = get_client_by_id(id);
		if (quitting_client) {
			std::cerr << "Client " << quitting_client->name << " with id " << quitting_client->id << " quitting.\n";
			server_remove_client(id);
		}
		else {
			std::cerr << "client with id " << id << "not found.\n";
		}
	}
	else if (packet_data[0] == C_KEYSTATE) {
		unsigned short id = packet_data[1];
		client *c = get_client_by_id(id);
		if (c) {
			c->keystate = packet_data[2];
			server_update_client_status(c);
			server_post_position_update(c);
		}
	}	
	else { 
		return 0;
	}
}