mirror of
https://github.com/libretro/RetroArch
synced 2025-04-09 21:45:45 +00:00
Could this be it? :v
This commit is contained in:
parent
aa648c1a49
commit
8e87c1ff19
29
netplay.c
29
netplay.c
@ -60,7 +60,7 @@ struct delta_frame
|
|||||||
bool used_real;
|
bool used_real;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define UDP_FRAME_PACKETS 32
|
#define UDP_FRAME_PACKETS 8
|
||||||
|
|
||||||
struct netplay
|
struct netplay
|
||||||
{
|
{
|
||||||
@ -83,7 +83,6 @@ struct netplay
|
|||||||
size_t is_replay; // Are we replaying old frames?
|
size_t is_replay; // Are we replaying old frames?
|
||||||
bool can_poll; // We don't want to poll several times on a frame.
|
bool can_poll; // We don't want to poll several times on a frame.
|
||||||
|
|
||||||
struct timeval last_tv;
|
|
||||||
uint32_t packet_buffer[UDP_FRAME_PACKETS * 2]; // To compat UDP packet loss we also send old data along with the packets.
|
uint32_t packet_buffer[UDP_FRAME_PACKETS * 2]; // To compat UDP packet loss we also send old data along with the packets.
|
||||||
uint32_t frame_count;
|
uint32_t frame_count;
|
||||||
uint32_t read_frame_count;
|
uint32_t read_frame_count;
|
||||||
@ -235,9 +234,6 @@ static bool init_udp_socket(netplay_t *handle, const char *server, uint16_t port
|
|||||||
handle->addr = NULL;
|
handle->addr = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Just get some initial value.
|
|
||||||
gettimeofday(&handle->last_tv, NULL);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -441,7 +437,6 @@ static bool get_self_input_state(netplay_t *handle)
|
|||||||
|
|
||||||
if (addr)
|
if (addr)
|
||||||
{
|
{
|
||||||
fprintf(stderr, "Sending a packet! :D\n");
|
|
||||||
if (sendto(handle->udp_fd, CONST_CAST handle->packet_buffer, sizeof(handle->packet_buffer), 0, addr, sizeof(struct sockaddr)) != sizeof(handle->packet_buffer))
|
if (sendto(handle->udp_fd, CONST_CAST handle->packet_buffer, sizeof(handle->packet_buffer), 0, addr, sizeof(struct sockaddr)) != sizeof(handle->packet_buffer))
|
||||||
{
|
{
|
||||||
SSNES_WARN("Netplay connection hung up. Will continue without netplay.\n");
|
SSNES_WARN("Netplay connection hung up. Will continue without netplay.\n");
|
||||||
@ -471,26 +466,19 @@ static void parse_packet(netplay_t *handle, uint32_t *buffer, unsigned size)
|
|||||||
for (unsigned i = 0; i < size * 2; i++)
|
for (unsigned i = 0; i < size * 2; i++)
|
||||||
buffer[i] = ntohl(buffer[i]);
|
buffer[i] = ntohl(buffer[i]);
|
||||||
|
|
||||||
for (unsigned i = 0; i < size; i++)
|
for (unsigned i = 0; i < size && handle->read_ptr != handle->self_ptr; i++)
|
||||||
{
|
{
|
||||||
uint32_t frame = buffer[2 * i];
|
uint32_t frame = buffer[2 * i];
|
||||||
uint32_t state = buffer[2 * i + 1];
|
uint32_t state = buffer[2 * i + 1];
|
||||||
|
|
||||||
fprintf(stderr, "Got frame %u, state 0x%x\n", frame, state);
|
if (frame == handle->read_frame_count)
|
||||||
|
|
||||||
if (frame <= handle->frame_count && frame >= handle->read_frame_count)
|
|
||||||
{
|
{
|
||||||
size_t ptr = (handle->read_ptr + frame - handle->read_frame_count) % handle->buffer_size;
|
handle->buffer[handle->read_ptr].is_simulated = false;
|
||||||
handle->buffer[ptr].is_simulated = false;
|
handle->buffer[handle->read_ptr].real_input_state = state;
|
||||||
handle->buffer[ptr].real_input_state = state;
|
handle->read_ptr = NEXT_PTR(handle->read_ptr);
|
||||||
|
handle->read_frame_count++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
while (!handle->buffer[handle->read_ptr].is_simulated && handle->read_ptr != handle->self_ptr)
|
|
||||||
{
|
|
||||||
handle->read_ptr = NEXT_PTR(handle->read_ptr);
|
|
||||||
handle->read_frame_count++;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool receive_data(netplay_t *handle, uint32_t *buffer, size_t size)
|
static bool receive_data(netplay_t *handle, uint32_t *buffer, size_t size)
|
||||||
@ -499,7 +487,6 @@ static bool receive_data(netplay_t *handle, uint32_t *buffer, size_t size)
|
|||||||
if (recvfrom(handle->udp_fd, NONCONST_CAST buffer, size, 0, (struct sockaddr*)&handle->their_addr, &addrlen) != size)
|
if (recvfrom(handle->udp_fd, NONCONST_CAST buffer, size, 0, (struct sockaddr*)&handle->their_addr, &addrlen) != size)
|
||||||
return false;
|
return false;
|
||||||
handle->has_client_addr = true;
|
handle->has_client_addr = true;
|
||||||
fprintf(stderr, "Received some data!\n");
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -531,8 +518,6 @@ bool netplay_poll(netplay_t *handle)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
fprintf(stderr, "Other %lu, Read: %lu, Self: %lu, Buffer_size: %lu\n", handle->other_ptr, handle->read_ptr, handle->self_ptr, handle->buffer_size);
|
|
||||||
|
|
||||||
if (res == 1)
|
if (res == 1)
|
||||||
{
|
{
|
||||||
size_t first_read = handle->read_ptr;
|
size_t first_read = handle->read_ptr;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user