Fixed server mode changes.

This commit is contained in:
Gregor Richards 2017-09-11 20:38:23 -04:00
parent 6eaaaef995
commit 2104ac44d9

View File

@ -1185,7 +1185,7 @@ static void netplay_toggle_play_spectate(netplay_t *netplay)
if (netplay->is_server) if (netplay->is_server)
{ {
/* FIXME: Duplication */ /* FIXME: Duplication */
uint32_t payload[3]; uint32_t payload[7];
char msg[512]; char msg[512];
const char *dmsg = NULL; const char *dmsg = NULL;
payload[0] = htonl(netplay->self_frame_count); payload[0] = htonl(netplay->self_frame_count);
@ -1197,11 +1197,11 @@ static void netplay_toggle_play_spectate(netplay_t *netplay)
payload[1] = htonl(netplay->self_client_num); payload[1] = htonl(netplay->self_client_num);
payload[2] = htonl(0); payload[2] = htonl(0);
netplay->self_mode = NETPLAY_CONNECTION_SPECTATING; netplay->self_mode = NETPLAY_CONNECTION_SPECTATING;
netplay->connected_players |= ~(1L); netplay->connected_players &= ~(1L);
netplay->connected_slaves |= ~(1L); netplay->connected_slaves &= ~(1L);
netplay->client_devices[0] = 0; netplay->client_devices[0] = 0;
for (i = 0; i < MAX_INPUT_DEVICES; i++) for (i = 0; i < MAX_INPUT_DEVICES; i++)
netplay->device_clients[i] |= ~(1L); netplay->device_clients[i] &= ~(1L);
netplay->self_devices = 0; netplay->self_devices = 0;
dmsg = msg_hash_to_str(MSG_NETPLAY_YOU_HAVE_LEFT_THE_GAME); dmsg = msg_hash_to_str(MSG_NETPLAY_YOU_HAVE_LEFT_THE_GAME);
@ -1224,7 +1224,7 @@ static void netplay_toggle_play_spectate(netplay_t *netplay)
if (!netplay->device_clients[device]) if (!netplay->device_clients[device])
break; break;
} }
if (device >= MAX_INPUT_DEVICES && share_mode) if (device == MAX_INPUT_DEVICES && share_mode)
{ {
/* Share one */ /* Share one */
for (device = 0; device < MAX_INPUT_DEVICES; device++) for (device = 0; device < MAX_INPUT_DEVICES; device++)
@ -1239,12 +1239,12 @@ static void netplay_toggle_play_spectate(netplay_t *netplay)
if (device >= MAX_INPUT_DEVICES) if (device >= MAX_INPUT_DEVICES)
return; /* Failure! */ return; /* Failure! */
payload[1] = htonl(NETPLAY_CMD_MODE_BIT_PLAYING | device); payload[1] = htonl(NETPLAY_CMD_MODE_BIT_PLAYING);
payload[2] = htonl(1<<device); payload[2] = htonl(1<<device);
netplay->self_mode = NETPLAY_CONNECTION_PLAYING; netplay->self_mode = NETPLAY_CONNECTION_PLAYING;
netplay->connected_players |= 1; netplay->connected_players |= 1;
netplay->client_devices[0] = netplay->self_devices = (1<<device); netplay->client_devices[0] = netplay->self_devices = (1<<device);
netplay->device_clients[device] = 1; netplay->device_clients[device] |= 1;
netplay->device_share_modes[device] = share_mode; netplay->device_share_modes[device] = share_mode;
netplay->read_ptr[0] = netplay->self_ptr; netplay->read_ptr[0] = netplay->self_ptr;
netplay->read_frame_count[0] = netplay->self_frame_count; netplay->read_frame_count[0] = netplay->self_frame_count;
@ -1254,6 +1254,8 @@ static void netplay_toggle_play_spectate(netplay_t *netplay)
snprintf(msg, sizeof(msg)-1, msg_hash_to_str(MSG_NETPLAY_YOU_HAVE_JOINED_AS_PLAYER_N), device+1); snprintf(msg, sizeof(msg)-1, msg_hash_to_str(MSG_NETPLAY_YOU_HAVE_JOINED_AS_PLAYER_N), device+1);
} }
memcpy(payload + 3, netplay->device_share_modes, sizeof(netplay->device_share_modes));
RARCH_LOG("[netplay] %s\n", dmsg); RARCH_LOG("[netplay] %s\n", dmsg);
runloop_msg_queue_push(dmsg, 1, 180, false); runloop_msg_queue_push(dmsg, 1, 180, false);