player: wrap up send and recv
This leads to much simpler error checking. Add casts so the inlined code can be called from the editor's C++ code.
This commit is contained in:
parent
078e344b24
commit
c600e2abbe
10
sync/base.h
10
sync/base.h
@ -48,4 +48,14 @@ static inline int socket_poll(SOCKET socket)
|
|||||||
return select(0, &fds, NULL, NULL, &to) > 0;
|
return select(0, &fds, NULL, NULL, &to) > 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline int xsend(SOCKET s, const void *buf, size_t len, int flags)
|
||||||
|
{
|
||||||
|
return send(s, (const char *)buf, len, flags) != (int)len;
|
||||||
|
}
|
||||||
|
|
||||||
|
static inline int xrecv(SOCKET s, void *buf, size_t len, int flags)
|
||||||
|
{
|
||||||
|
return recv(s, (char *)buf, len, flags) != (int)len;
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* SYNC_BASE_H */
|
#endif /* SYNC_BASE_H */
|
||||||
|
|||||||
@ -60,8 +60,10 @@ static SOCKET server_connect(const char *host, int nport)
|
|||||||
if (sock == INVALID_SOCKET)
|
if (sock == INVALID_SOCKET)
|
||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
|
|
||||||
send(sock, client_greet, (int)strlen(client_greet), 0);
|
if (xsend(sock, client_greet, strlen(client_greet), 0) ||
|
||||||
recv(sock, greet, (int)strlen(server_greet), 0);
|
xrecv(sock, greet, strlen(server_greet), 0))
|
||||||
|
return INVALID_SOCKET;
|
||||||
|
|
||||||
if (!strncmp(server_greet, greet, strlen(server_greet)))
|
if (!strncmp(server_greet, greet, strlen(server_greet)))
|
||||||
return sock;
|
return sock;
|
||||||
|
|
||||||
@ -164,30 +166,26 @@ static void save_tracks(const char *base, struct sync_data *data)
|
|||||||
|
|
||||||
static int request_track_data(SOCKET sock, const char *name, int idx)
|
static int request_track_data(SOCKET sock, const char *name, int idx)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
unsigned char cmd = GET_TRACK;
|
unsigned char cmd = GET_TRACK;
|
||||||
size_t name_len = strlen(name);
|
size_t name_len = strlen(name);
|
||||||
|
|
||||||
/* send request data */
|
/* send request data */
|
||||||
ret = send(sock, (char *)&cmd, 1, 0);
|
return xsend(sock, (char *)&cmd, 1, 0) ||
|
||||||
ret += send(sock, (char *)&idx, sizeof(int), 0);
|
xsend(sock, (char *)&idx, sizeof(int), 0) ||
|
||||||
ret += send(sock, (char *)&name_len, sizeof(size_t), 0);
|
xsend(sock, (char *)&name_len, sizeof(size_t), 0) ||
|
||||||
ret += send(sock, name, (int)name_len, 0);
|
xsend(sock, name, (int)name_len, 0);
|
||||||
|
|
||||||
return ret != 1 + sizeof(size_t) * 2 + name_len;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hanle_set_key_cmd(SOCKET sock, struct sync_data *data)
|
static int hanle_set_key_cmd(SOCKET sock, struct sync_data *data)
|
||||||
{
|
{
|
||||||
int ret, track;
|
int track;
|
||||||
struct track_key key;
|
struct track_key key;
|
||||||
unsigned char type;
|
unsigned char type;
|
||||||
|
|
||||||
ret = recv(sock, (char *)&track, sizeof(int), 0);
|
if (xrecv(sock, (char *)&track, sizeof(int), 0) ||
|
||||||
ret += recv(sock, (char *)&key.row, sizeof(int), 0);
|
xrecv(sock, (char *)&key.row, sizeof(int), 0) ||
|
||||||
ret += recv(sock, (char *)&key.value, sizeof(float), 0);
|
xrecv(sock, (char *)&key.value, sizeof(float), 0) ||
|
||||||
ret += recv(sock, (char *)&type, 1, 0);
|
xrecv(sock, (char *)&type, 1, 0))
|
||||||
if (ret != sizeof(int) * 2 + sizeof(float) + 1)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
assert(type < KEY_TYPE_COUNT);
|
assert(type < KEY_TYPE_COUNT);
|
||||||
@ -199,11 +197,10 @@ static int hanle_set_key_cmd(SOCKET sock, struct sync_data *data)
|
|||||||
|
|
||||||
static int hanle_del_key_cmd(SOCKET sock, struct sync_data *data)
|
static int hanle_del_key_cmd(SOCKET sock, struct sync_data *data)
|
||||||
{
|
{
|
||||||
int ret, track, row;
|
int track, row;
|
||||||
|
|
||||||
ret = recv(sock, (char *)&track, sizeof(int), 0);
|
if (xrecv(sock, (char *)&track, sizeof(int), 0) ||
|
||||||
ret += recv(sock, (char *)&row, sizeof(int), 0);
|
xrecv(sock, (char *)&row, sizeof(int), 0))
|
||||||
if (ret != sizeof(int) * 2)
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
assert(track < (int)data->num_tracks);
|
assert(track < (int)data->num_tracks);
|
||||||
@ -246,7 +243,7 @@ int sync_update(struct sync_device *d, int row)
|
|||||||
while (socket_poll(d->sock)) {
|
while (socket_poll(d->sock)) {
|
||||||
unsigned char cmd = 0, flag;
|
unsigned char cmd = 0, flag;
|
||||||
int row;
|
int row;
|
||||||
if (!recv(d->sock, (char *)&cmd, 1, 0))
|
if (xrecv(d->sock, (char *)&cmd, 1, 0))
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
@ -259,13 +256,13 @@ int sync_update(struct sync_device *d, int row)
|
|||||||
goto sockerr;
|
goto sockerr;
|
||||||
break;
|
break;
|
||||||
case SET_ROW:
|
case SET_ROW:
|
||||||
if (recv(d->sock, (char *)&row, sizeof(int), 0) != sizeof(int))
|
if (xrecv(d->sock, (char *)&row, sizeof(int), 0))
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
if (d->cb && d->cb->set_row)
|
if (d->cb && d->cb->set_row)
|
||||||
d->cb->set_row(d->cb_param, row);
|
d->cb->set_row(d->cb_param, row);
|
||||||
break;
|
break;
|
||||||
case PAUSE:
|
case PAUSE:
|
||||||
if (recv(d->sock, (char *)&flag, 1, 0) != 1)
|
if (xrecv(d->sock, (char *)&flag, 1, 0))
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
if (d->cb && d->cb->pause)
|
if (d->cb && d->cb->pause)
|
||||||
d->cb->pause(d->cb_param, flag);
|
d->cb->pause(d->cb_param, flag);
|
||||||
@ -282,9 +279,8 @@ int sync_update(struct sync_device *d, int row)
|
|||||||
if (d->cb && d->cb->is_playing && d->cb->is_playing(d->cb_param)) {
|
if (d->cb && d->cb->is_playing && d->cb->is_playing(d->cb_param)) {
|
||||||
if (d->row != row && d->sock != INVALID_SOCKET) {
|
if (d->row != row && d->sock != INVALID_SOCKET) {
|
||||||
unsigned char cmd = SET_ROW;
|
unsigned char cmd = SET_ROW;
|
||||||
int ret = send(d->sock, (char*)&cmd, 1, 0);
|
if (xsend(d->sock, (char*)&cmd, 1, 0) ||
|
||||||
ret += send(d->sock, (char*)&row, sizeof(int), 0);
|
xsend(d->sock, (char*)&row, sizeof(int), 0))
|
||||||
if (ret != sizeof(int) + 1)
|
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
d->row = row;
|
d->row = row;
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user