vg4->nw->xdata_recv()
Receive exchange-data from network-server.
SYNTAX
VG_BOOL
vg4->nw->xdata_recv(char **ex_data, size_t *ex_size, int *ex_clnr)
FUNCTION PARAMETERS
ex_data | For returning received exchange-data, will be allocated if ex_size returns greater 0 |
ex_size | For returning number of bytes in ex_data |
ex_clnr | For returning client-number who sent this data |
RETURN VALUE
Returns boolean:
- VG_TRUE: OK
- VG_FALSE: Got exit-request (or network-error occurred)
DESCRIPTION
Receive exchange-data from network-server.
Receive also an update which clients are connected.
If (still) no data is available, the function returns immediately
with value 0 in ex_size.
While receiving data, the function blocks until all data is received.
Exchange-data is normally used before the game-loop to inform the other clients
of certain user-selections, e.g. the user-avatar or a selected race track ...
EXAMPLE
int master_clnr = 1; /* master client-number */ char *ex_data; size_t ex_size; int ex_clnr; if (vg4->nw->local_clnr() == master_clnr) ) { /* the master selects the race track */ char racetrack[32]; snprintf(racetrack, sizeof(racetrack), "Forest Track 5"); /* now send racetrack-information to other clients including me */ if (!vg4->nw->xdata_send(racetrack, strlen(racetrack) + 1)) { VG_dest(); exit(0); } } /* show info */ { struct VG_Image *img; char btxt[64]; snprintf(btxt, sizeof(btxt), "Receiving data ..."); img = vg4->font->totext(btxt, NULL, NULL, NULL, NULL); vg4->window->clear(); vg4->window->copy(img, NULL, NULL); vg4->window->flush(); vg4->image->destroy(img); } /* all clients including master receive the racetrack-information */ for (;;) { if (!vg4->nw->xdata_recv(&ex_data, &ex_size, &ex_clnr)) { VG_dest(); exit(0); } if (ex_size > 0) { /* just output received data to stdout */ printf("Client %d selected: %s\n", ex_clnr, ex_data); free(ex_data); break; } /* still no data received, wait and try again */ if (!vg4->nw->is_connected(master_clnr)) { VG_dest(); exit(0); } /* master disconnected */ vg4->window->flush(); vg4->misc->wait_time(100); }
SEE ALSO