VG3_nw_recv_data()
[added in version 1.2]
Receive data-packets if available.
SYNTAX
int
VG3_nw_recv_data(struct vg3_nwclient *nwclnt)
FUNCTION PARAMETERS
nwclnt | Network-struct |
RETURN VALUE
Returns integer:
- 0: OK
- 1: Got timeout-request from the network-server, so exit the game
DESCRIPTION
Receive data-packets if available.
This function receives data-packets sent with VG3_nw_send_data(),
if there are any available (will not block).
As VG3_nw_update() also receives data-packets,
VG3_nw_recv_data() should only be used outside the game-loop,
when sending key-strokes is not yet needed.
To retrieve a data-packet, use VG3_nw_fetch_data().
Be aware, there is no data buffer,
if a data-packet is received from a client,
then a next data-packet from the same client will overwrite the former one,
whether it was retrieved or not.
Calling VG3_nw_recv_data() also pings the network-server to keep it running.
EXAMPLE
Sending time in seconds to other clients when return-key is being hit:
struct vg3_window *wstruct; struct vg3_nwclient *nwptr; int clnr, masterbyte, i1; char nwserver[64], buf[128]; int wsize, hsize; [... open window, network ...] /* get size of window */ VG3_window_getsize(wstruct, &wsize, &hsize); /* connect to nwserver */ clnr = VG3_nw_connect(nwptr, nwserver, NULL, NULL, 0, &masterbyte); /* loop for exchanging data-packets without sending key-strokes */ for (;;) { /* get key-strokes (locally) */ if (VG3_inputevent_update(wstruct)) { break; } /* quit on Q-key */ if (VG3_key_ispressed(wstruct, VGAG3_KEY_Q, VGAG3_IS_PRESSED)) { break; } /* check for and receive data-packet(s) */ if (VG3_nw_recv_data(nwptr)) { break; } /* on return-key send time in seconds to all clients */ if (VG3_key_ispressed(wstruct, VGAG3_KEY_ENTER, VGAG3_IS_PRESSED)) { snprintf(buf, sizeof(buf), "%ld", (long)time(NULL)); VG3_nw_send_data(nwptr, buf); } VG3_draw_clear(wstruct, NULL, VGAG3_COLOR_BLACK); /* while fetching new received data-packets, show the contents */ do { i1 = VG3_nw_fetch_data(nwptr, buf, sizeof(buf)); if (i1 > 0) { /* show time in left upper corner */ struct vg3_rect rect; struct vg3_text stxt; VGAG3_TEXT_ATTRIBUTES_SET(&stxt, NULL, '\n', 0, buf); rect.x = rect.y = 0; rect.w = wsize; rect.h = hsize; VG3_draw_text(wstruct, NULL, &rect, 0, &stxt, VGAG3_COLOR_YELLOW, VGAG3_COLOR_BLACK, 0); } } while (i1 > 0); VG3_window_update(wstruct, 0, 0); VG3_wait_time(50); } /* end */ VG3_nw_close(nwptr); VG3_window_free(wstruct);
SEE ALSO