VgaGames4 - network man-pages

[.. upper level ..]

vg4->nw->xdata_send()

Send exchange-data to network-server.

SYNTAX
VG_BOOL vg4->nw->xdata_send(const char *ex_data, size_t ex_size)

FUNCTION PARAMETERS
ex_data Exchange-data
ex_size Number of bytes in ex_data, must not exceed 16777215

RETURN VALUE
Returns boolean: - VG_TRUE: OK - VG_FALSE: Got exit-request (or network-error occurred)

DESCRIPTION
Send exchange-data to network-server. The function blocks until all data has been sent. More than 16777215 bytes cannot be sent. 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
vg4->nw->xdata_recv vg4->nw->xdata_retag