radius
1de95c6413
further refinement of the netplay workflow
2017-05-16 00:18:29 -05:00
twinaphex
61a4e94649
Use string_is_equal_fast
2017-05-16 04:04:21 +02:00
Twinaphex
c035f9597a
Merge pull request #4921 from fr500/master
...
NETPLAY menu improvements
2017-05-16 03:00:19 +02:00
radius
c783dbff28
remove some more code duplication, lan rooms now show up correctly on left-right
2017-05-15 19:45:23 -05:00
radius
a98033f375
make the --start netplay host-- entry context sensitive
2017-05-15 18:58:46 -05:00
twinaphex
bf3188eac4
Combine runloop_ctl and rarch_ctl
2017-05-15 05:06:23 +02:00
twinaphex
e2c7671e9f
Create rarch_menu_running/rarch_menu_running_finished
2017-05-15 04:31:40 +02:00
twinaphex
42ebe7a7ad
Merge runloop.c and retroarch.c
2017-05-11 09:11:46 +02:00
Andre Leiradella
78efeb6ae2
Fix griffin and HTTP server builds
2017-05-07 19:52:22 +01:00
twinaphex
de80671658
Simplify content_get_crc
2017-05-06 16:41:22 +02:00
twinaphex
33f2fe8029
Move cheevos.c to tasks/task_cheevos.c and add TODO/FIXME note
2017-05-06 05:50:46 +02:00
Jean-André Santoni
a2542590ef
Fix the truncated game name in LAN rooms
2017-04-29 23:41:02 +02:00
twinaphex
e6ab06a701
Move path variables
2017-04-29 00:39:29 +02:00
twinaphex
05e4ec733e
Move uint variables
2017-04-28 21:03:04 +02:00
twinaphex
7bbd20b31d
Move int settings
2017-04-28 19:12:48 +02:00
twinaphex
ed53be7c81
Move all bool settings
2017-04-28 14:11:34 +02:00
twinaphex
e1e83b17b7
Wrap settings->input.libretro_device
2017-04-25 17:14:46 +02:00
twinaphex
3ec5816259
Rewrite RUNLOOP_CTL_SYSTEM_INFO_GET
2017-04-23 16:41:26 +02:00
twinaphex
aea00f1e00
Use memcmp instead of string_is_equal for more instances
2017-04-23 12:17:51 +02:00
Gregor Richards
fbb508ab5e
Make rewind compatible with netplay.
...
This commit adds support for temporary desync in netplay. When frontend
features that can't be truly synced, in particular rewind, are used,
netplay is momentarily disabled. As soon as the feature finished, e.g. a
rewind ending, netplay resumes with a state load. For rewind, netplay
peers won't actually experience the effect of rewind, but they will load
the rewound state.
2017-04-18 15:25:58 -04:00
Brad Parker
c12cc8e5be
netplay: change lobby reannounce period to 600 frames
2017-03-07 12:29:51 -05:00
Brad Parker
bb362f307d
netplay: don't advertise over LAN or try to open a port with UPnP if we're using a MITM server
2017-03-06 21:39:03 -05:00
bparker06
ced1dc10c1
Merge pull request #4732 from GregorR/netplay-server-spectator-fix-2-electric-boogaloo
...
Yet another server-is-spectator bug. Don't ever ignore stalls if we're a client
2017-03-06 21:25:18 -05:00
Brad Parker
4f02450bf9
forgot extra storage for NULL byte
2017-03-06 21:10:27 -05:00
Gregor Richards
2f21a3e370
Yet another server-is-spectator bug. Don't ever ignore stalls if we're a
...
client
2017-03-06 20:13:26 -05:00
Brad Parker
d9c78c75f0
fix setting of netplay has_password in lobby announcement
2017-03-06 16:01:45 -05:00
Twinaphex
4b796ae740
Silence warnings
2017-03-06 12:12:00 +01:00
Brad Parker
6a68a01eb9
msvc2005 buildfix
2017-03-05 22:02:55 -05:00
Brad Parker
12a208f75e
merge reannounce bugfix from radius
2017-03-05 15:49:07 -05:00
Twinaphex
c343a88c10
Silence unused variable warnings
2017-03-05 20:30:14 +01:00
Brad Parker
c6b1a4bb48
join MITM server when host starts game, if the announcement requested MITM
2017-03-05 14:19:39 -05:00
Brad Parker
bf553fe65c
netplay: connect to MITM server instead of host IP if one is specified in lobby listing
2017-03-05 14:19:38 -05:00
Brad Parker
8a01dda5d6
send force MITM setting with lobby announcement
2017-03-05 14:19:38 -05:00
Brad Parker
c7c0e1351a
send CRC as hex string
2017-03-05 14:19:37 -05:00
Brad Parker
4f2cdf3a84
populate system info before reading it
2017-03-05 14:19:36 -05:00
Brad Parker
ad6733b519
add full urlencoder and encode lobby announcement POST data
2017-03-05 14:19:36 -05:00
Brad Parker
9c19f16539
remove debug stuff
2017-03-05 14:19:36 -05:00
Brad Parker
0d81b2005f
parse new lobby room listing with JSON
2017-03-05 14:19:35 -05:00
Brad Parker
c31823aa94
add HTTP POST support
2017-03-05 14:19:34 -05:00
twinaphex
c99d83f15c
Update
2017-03-05 20:14:01 +01:00
Brad Parker
96650e14ea
break early if server frame count is ahead of NOINPUT
2017-02-28 21:46:57 -05:00
Brad Parker
fea8a0f780
Don't stall for spectator data when we're not in spectator mode, thanks @GregorR
2017-02-28 11:31:59 -05:00
twinaphex
05b760d0f8
Fix C89_BUILD/CXX_BUILD
2017-02-28 09:52:33 +01:00
twinaphex
5bf5388759
Cleanups
2017-02-28 09:44:44 +01:00
Twinaphex
59f5c596d6
Merge pull request #4707 from fr500/master
...
LAN scanning into rooms
2017-02-28 05:47:49 +01:00
radius
0c456c2235
comment this out for now
2017-02-27 23:47:04 -05:00
Gregor Richards
8fb1f6a647
Support empty INFO packet for undifferentiated servers.
2017-02-27 22:06:20 -05:00
radius
e50ea80dfa
integrate the rest of the lan scan parameters
2017-02-27 21:24:34 -05:00
Twinaphex
fdbdcfee65
Merge pull request #4691 from GregorR/netplay-slave-mode
...
Netplay slave mode
2017-02-26 21:49:21 +01:00
Twinaphex
b7b3b2cb5f
Try to prevent truckload of warnings on iOS
2017-02-26 10:33:03 +01:00
Gregor Richards
07cfd90dc6
Actually USE the new slave options in config.
2017-02-23 21:49:22 -05:00
Gregor Richards
3ff9a43b7d
Spectator and slave mode are rewind-free
...
This commit makes spectator mode and slave mode in netplay always stay
ahead of the input, thereby avoiding rewinds, which is sort of the
point. This also changes catch-up detection to be a bit less eager, so
that they hopefully don't flap between stalling for server input and
catching up with that input.
2017-02-23 19:05:43 -05:00
Gregor Richards
e495671563
In spectator mode, we should never be ahead of our peer.
2017-02-22 23:19:22 -05:00
Gregor Richards
3e0bc5acdc
Don't flush so eagerly...
2017-02-22 23:19:02 -05:00
Gregor Richards
d1ab288d73
Fix update_unread_ptr to handle the case of only slaves connected
2017-02-22 21:10:02 -05:00
Gregor Richards
e70ee045bf
Initial implementation of Netplay master/slave mode.
2017-02-22 20:34:17 -05:00
Gregor Richards
972b41f803
Fix race condition in NAT traversal task.
2017-02-20 20:16:53 -05:00
Gregor Richards
5f723d1bda
Moving NAT traversal into a task to avoid blocking the UI.
2017-02-20 19:08:31 -05:00
Gregor Richards
816d7786ac
Re-adding the option to start in spectator mode
...
This used to be a configuration option because spectator mode and "net"
mode were incompatible. When the ability to switch between player and
spectator was added, the configuration option was removed, since it was
no longer a mode toggle. This re-adds it, mainly so that I can use it to
implement regression tests.
2017-02-16 19:17:06 -05:00
Gregor Richards
4c1abfaa71
Support for reset in netplay
...
This patch transfers core_reset across netplay. Resets effectively
worked before thanks to check_frames, but this makes resets work even
without check_frames, and in particular should allow resets to force
sync in savestateless cores, bringing them one step closer to actually
being usable by non-experts.
2017-02-15 14:40:37 -05:00
Brad Parker
6d821132f5
msvc buildfix
2017-02-14 02:37:25 +00:00
Gregor Richards
aa77d688ec
Make announcing netplay on the public lobby optional.
2017-02-06 13:45:58 -05:00
twinaphex
e3a1b1859d
Fix ./configure --disable-rgui
2017-02-04 09:20:41 +01:00
Andre Leiradella
0c8ee93e3e
Moved cheevos files to their own folder in preparation for the changes to support leaderboards
2017-02-03 10:03:57 +00:00
Gregor Richards
1148b8230c
Fixes to stateless+input latency.
2017-02-01 22:54:03 -05:00
Gregor Richards
2ea3936d16
Renaming input_ptr/input_frame_count back to self_.
2017-02-01 22:54:03 -05:00
Gregor Richards
55157e934d
input_latency_frames is now configurable and has a range
2017-02-01 22:54:03 -05:00
Gregor Richards
5f5a8dc6d7
CRC searching should really start from run_ptr, not input_ptr
2017-02-01 22:54:03 -05:00
Gregor Richards
561eb42c84
Don't enable input latency if we're not connected
2017-02-01 22:54:03 -05:00
Gregor Richards
c4cb94db19
New approach to input latency
2017-02-01 22:54:03 -05:00
Twinaphex
2596de53ec
Merge pull request #4523 from fr500/master
...
add support for no content cores
2017-01-29 04:51:50 +01:00
Gregor Richards
3d24e844a4
We're in client mode if either server OR direct_host is set
2017-01-28 22:39:17 -05:00
radius
cfb882f4fc
add support for no content cores
2017-01-28 22:12:34 -05:00
Gregor Richards
12e8deedb4
Only disable netplay in deinit_netplay if it was actually on
2017-01-25 22:08:05 -05:00
Gregor Richards
263470a66c
Set netplay_enabled to false during deinit_netplay
...
This simply prevents the odd behavior of netplay automatically
restarting, or trying to restart, when you load a new game.
2017-01-25 21:23:55 -05:00
fr500
29a1d504d7
allow different server ports again
2017-01-25 17:48:43 -05:00
fr500
af14da93d5
fix whitespace
2017-01-25 17:43:56 -05:00
fr500
c097c2062e
fix when port is 0
2017-01-25 17:43:17 -05:00
twinaphex
178d959cad
Fix C89_BUILD
2017-01-22 21:24:57 +01:00
twinaphex
36b2c48cb5
Fix CXX_BUILD
2017-01-22 21:19:39 +01:00
Twinaphex
3ff158b907
Merge pull request #4436 from fr500/lobby
...
Basic lobby system (don't merge, just for tracking)
2017-01-22 21:08:43 +01:00
radius
a0e6a24f38
use deferred netplay init
2017-01-22 13:07:30 -05:00
radius
33cc168eb9
allow connecting to lobby port instead of the port in settings
2017-01-22 12:29:29 -05:00
Gregor Richards
addcbb896a
Fixing an incompatibility between stateless mode and the password prompt
...
Previously, the host would time out waiting for the guest to enter a
password, as the timeout was not conditionalized on whether the guest
was actually playing. This fixes that.
2017-01-22 10:43:09 -05:00
twinaphex
96c8ca5a09
Header update #1
2017-01-22 13:40:32 +01:00
twinaphex
768ce0854c
Make driver_set_nonblock_state a public function
2017-01-22 12:47:17 +01:00
Gregor Richards
8c304dfda7
Make the client send an INFO even if it's wrong
...
This simply gives the server a reason why the client disconnected,
rather than a generic, unexplained disconnection.
2017-01-21 13:18:31 -05:00
radius
0de43b954e
can now connect when starting a game too
2017-01-20 16:04:10 -05:00
radius
dcca2f8131
only announce if host
2017-01-20 14:33:57 -05:00
radius
8a1fb24fe9
update url
2017-01-19 23:21:22 -05:00
radius
930cde21a2
crc is announced now (for cores that don't have needs_fullpath set)
2017-01-19 21:43:46 -05:00
radius
3dd6c91493
start populating the list
2017-01-19 08:56:56 -05:00
radius
95a2da81e4
start adding ui elements to insert room list into
2017-01-18 22:46:48 -05:00
radius
72cdb390cb
reannounce roughly every minute
2017-01-18 21:31:02 -05:00
radius
ca2c2a8ce7
separate this
2017-01-18 21:12:01 -05:00
twinaphex
9a87bada55
Style nit
2017-01-17 19:05:33 +01:00
radius
f2beb49fd8
Announce netplay games to lobby.libretro.com
2017-01-16 22:24:35 -05:00
Gregor Richards
a0f236a83f
Use autosave_lock and autosave_unlock during SRAM negotiation
...
The SRAM transfer in netplay handshake now uses autosave_lock and
autosave_unlock. Will possibly fix a hang/crash bug on Android with
netplay and autosave conflicting.
2017-01-15 18:10:24 -05:00
Gregor Richards
e9e7878b5c
netplay_buf should use O_NOSIGNAL to avoid SIGPIPE
2017-01-15 10:59:25 -05:00
twinaphex
80bc91477a
Remove header include
2017-01-09 02:19:16 +01:00
Gregor Richards
20c0de352c
Fix to the netplay_is_alive function when server isn't playing
...
Fixes a bug by which very strange things would happen if the server went
to spectator mode with exactly one connected client.
2017-01-02 20:03:00 -05:00
Gregor Richards
ee55e2d783
LOAD_SAVESTATE can't use player frame timing from a server that's not playing
2017-01-02 18:56:08 -05:00
Gregor Richards
cd281d5757
Reverse catch-up, i.e., server-demanded stalling
...
Previously, if two clients were connected to the same server and one of
them was ahead of the server, the only way to rectify that situation was
for the client to get so far ahead that it stalled, as the server could
only catch up with an ahead client if all clients were ahead. That's
unrealistic. This gives the server the alternate option of demanding
that a client stall. This keeps things nicely in line even with >2
players.
2016-12-24 15:25:03 -05:00
twinaphex
70a1a5f38e
Buildfixes
2016-12-24 01:48:36 +01:00
twinaphex
64dc7daeca
(MSVC) MSVC build fixes
2016-12-24 01:45:37 +01:00
twinaphex
77e5cdbfde
Revert "Rename runloop_msg_queue_push to video_driver_msg_queue_push"
...
This reverts commit ad7386913c
.
2016-12-22 23:36:11 +01:00
twinaphex
ad7386913c
Rename runloop_msg_queue_push to video_driver_msg_queue_push
...
and move code to video_driver.c
2016-12-22 13:15:02 +01:00
Gregor Richards
3df38fa40e
Silence two compiler warnings
2016-12-21 10:13:31 -05:00
Gregor Richards
f0bb0a77f8
Make netplay no longer cache passwords
...
Netplay now always loads passwords from the configuration, so that
passwords can be changed mid-session.
2016-12-21 09:51:50 -05:00
Gregor Richards
c780e7db43
Accept the variable size quirk
...
Since the quirks protocol was that a core could report variable
savestate size, but the host then tells it "no", we should actually
accept the variable size quirk in netplay, since RetroArch refuses to
allow cores to actually produce variable-size states.
2016-12-20 22:17:15 -05:00
Gregor Richards
7bb26eb5c5
Fix some minor checked-return bugs
...
Should resolve Coverity reports 158862, 158861, 158860.
158863 is spurious but I have no idea how to convince Coverity of that.
2016-12-20 19:16:31 -05:00
Gregor Richards
8f35de9da0
Adding blocks in the empty-RECV case to (hopefully) suppress warnings
2016-12-19 17:31:24 -05:00
Twinaphex
1d36c5effa
Silence warnings - remove unused variables
2016-12-19 23:19:59 +01:00
Alcaro
fc1c83d8c0
Shut up false positive warning
2016-12-19 16:38:55 +01:00
Gregor Richards
11a3063fc6
Forgot the other half of that last bugfix
2016-12-18 20:08:21 -05:00
Gregor Richards
8f8e6dfc5f
Unset the netplay callbacks when we deinit netplay
...
This is a bugfix to master that hadn't migrated to my branch.
2016-12-18 19:54:01 -05:00
Gregor Richards
dcd4b3046b
Making negative check_frames be "check only" mode
2016-12-18 19:28:44 -05:00
Gregor Richards
677ffa9ebd
Support different forms of compression from different clients.
2016-12-18 19:28:44 -05:00
Gregor Richards
84c33634a6
Communicate paused-ness during initial connection SYNC.
2016-12-18 19:28:44 -05:00
Gregor Richards
60b81e3a51
Nominal support for server sending blank INFO
2016-12-18 19:28:44 -05:00
Gregor Richards
e79f30604f
Better stall timing
...
We now stall not until we've reached parity (which makes no sense since
we expect latency), but only until we're not likely to stall again.
2016-12-18 19:28:44 -05:00
Gregor Richards
8195a5bcee
Try to catch up if we're falling behind our peer, not anyone
...
In the previous catch-up system, we would only try to catch up if we
were falling behind the farthest-behind peer. However, as they would
also only try to catch up to us, everyone basically agreed to the
worst-case latency. It makes more sense to try to be in parity with your
direct peer than with indirect connections.
2016-12-18 19:28:44 -05:00
Gregor Richards
b535412914
Adding nick-changing
...
This is just to disambiguate multiple connections with the same nick
(usually Anonymous), which will now become e.g. Anonymous (2).
2016-12-18 19:28:44 -05:00
Gregor Richards
7c2f12fbd9
Removign some leftover debug code
2016-12-18 19:28:44 -05:00
Gregor Richards
04266cf4f7
Run synchronization even when stalled
...
Previously, we could be stalled by one player but still reading data
from another, which would wedge the client because we would never act
upon the newly-read data. Now we act upon data even if we're stalled.
Fixes bugs in initial connection with high latency.
2016-12-18 19:28:44 -05:00
Gregor Richards
d6d96704fd
Don't panic about delta frames not being ready if we're not even fully
...
connected yet.
2016-12-18 19:28:43 -05:00
Gregor Richards
8b21014d07
Improvements to handshake protocol
...
Making the netplay handshake protocol send the core and content as an
explicit command, so that the other side can (notionally) choose to load
it. That isn't implemented, of course.
2016-12-18 19:28:43 -05:00
Gregor Richards
1fa60b396f
Improvements to the communication of netplay pausing.
2016-12-18 19:28:43 -05:00
Gregor Richards
db2c8de44c
Slightly changing how catch-up works to avoid spamming the console
2016-12-18 19:28:43 -05:00
Gregor Richards
1141825605
Documenting (somewhat) the new sync system.
2016-12-18 19:28:43 -05:00
Gregor Richards
a20e79bbb5
Server needs double the buffer frames since two connected clients could
...
be ahead and behind by the max frames
2016-12-18 19:28:43 -05:00
Gregor Richards
f7f6590156
Goodbye delay_frames! stateless_mode is the new delay_frames=0
2016-12-18 19:28:43 -05:00
Gregor Richards
45d732a014
New sync system
...
The idea:
* Use a fixed number of delay_frames (eventually to be fixed at 120,
currently still uses the config variable, 0 will still be an option)
* Determine how long it takes to simulate a frame.
* Stall only if resimulating the intervening frames would be
sufficiently annoying (currently fixed at three frames worth of
time)
Because clients always try to catch up, the actual frame delay works out
automatically to be minimally zero and maximally the latency. If one
client is underpowered but the other is fine, the powerful one will
automatically take up the slack. Seems like the most reasonable system.
2016-12-18 19:28:43 -05:00
Gregor Richards
6890456ac0
Updated error messages and fixed some stall-related disconnected-client
...
bugs.
2016-12-18 19:28:43 -05:00
Gregor Richards
6658826759
CRC validity checking. Ignore CRCs if they don't work.
2016-12-18 19:28:43 -05:00
Gregor Richards
a6cd8c3aa1
Error reporting when a password is refused, plus a bugfix so that
...
socket_receive_all_nonblocking actually reports disconnects.
2016-12-18 19:28:43 -05:00
Gregor Richards
df2600fbf4
Added error reporting when a player is not allowed to play.
2016-12-18 19:28:43 -05:00
Gregor Richards
bade067d9a
Support for catching up if the netplay peer is ahead of us.
2016-12-18 19:28:43 -05:00
Gregor Richards
4e01481b39
Only allow clients to load state if there's no further synchronization
2016-12-18 19:28:43 -05:00
Gregor Richards
70d04ec6a5
Apparently the frontend gets really pissy if it can't check the flip state
2016-12-18 19:28:43 -05:00
Gregor Richards
da7efcb939
Cleaning up netplay headers.
2016-12-18 19:28:43 -05:00
Gregor Richards
9c6ac2b934
Only the server can flip users.
2016-12-18 19:28:43 -05:00
Gregor Richards
03415c261d
Added netplay spectator password separate from play password
2016-12-18 19:28:43 -05:00
Gregor Richards
694b7a9723
Don't allow more players to join than are actually being polled
2016-12-18 19:28:43 -05:00
Gregor Richards
7ad4e3f115
Per-connection stalling
2016-12-18 19:28:43 -05:00
Gregor Richards
1b22191869
Deduplicating some code.
2016-12-18 19:28:43 -05:00
Gregor Richards
f619789e48
Refactoring: netplay_common.c -> netplay_handshake.c/netplay_delta.c
...
Refactoring netplay_common into its two actual components, the handshake
and delta-frame related functions.
2016-12-18 19:28:43 -05:00
Gregor Richards
4e905bf524
Refactoring: netplay_sync.c
...
Renamed netplay_net.c to netplay_sync.c, as all that remains in that
file is synchronization-related functions.
2016-12-18 19:28:43 -05:00
Gregor Richards
257c5d3188
Refactoring netplay_init.c/netplay_net.c
...
Split the remainder of netplay.c into netplay_init.c and netplay_net.c
(which will soon be netplay_sync.c)
2016-12-18 19:28:43 -05:00
Gregor Richards
7e2465ef1f
Refactoring: Moving I/O functionality into netplay_io.c
2016-12-18 19:28:43 -05:00
Gregor Richards
8c59c7dd77
Starting to refactor: Separating frontend stuff into netplay_frontend.c
2016-12-18 19:28:43 -05:00
Gregor Richards
ab989d7f41
More careful disconnection.
2016-12-18 19:28:43 -05:00
Gregor Richards
c8bba9a981
Simplistic builtin randomizer.
2016-12-18 19:28:43 -05:00
Gregor Richards
28e331b5fd
Remove some magic numbers
2016-12-18 19:28:43 -05:00
Gregor Richards
6e6f2bfdbe
Use a proper password hash across the line.
2016-12-18 19:28:42 -05:00
Gregor Richards
763a657f82
Terrible first cut at password (sent in plain text D-8)
2016-12-18 19:28:42 -05:00
Gregor Richards
5a0328dc09
Transfer pad configuration over netplay.
2016-12-18 19:28:42 -05:00
Gregor Richards
888e45c88b
Updates to allow the server to toggle game/watch
2016-12-18 19:28:42 -05:00
Gregor Richards
3631ff74ff
Very, very partial support for the server spectating
2016-12-18 19:28:42 -05:00
Gregor Richards
3d7f1f6575
Updating Netplay README to be more true
2016-12-18 19:28:42 -05:00
Gregor Richards
f6f9905ae3
Made remote pausing connection-specific
2016-12-18 19:28:42 -05:00
Gregor Richards
6556af1100
force_send_savestate is global again
...
We cannot send a savestate to only one player, as sending a savestate is
a synchronization event invalidating all prior input.
2016-12-18 19:28:42 -05:00
Gregor Richards
3d34c0222f
Added simple (cheesy) announcements on join/leave
2016-12-18 19:28:42 -05:00
Gregor Richards
727743aa7b
Fixing a couple FIXMEs/TODOs
2016-12-18 19:28:42 -05:00
Gregor Richards
2130fd81a5
Fixed simulation for >2 players
2016-12-18 19:28:42 -05:00
Gregor Richards
262d77546b
Adding game/watch key
...
Adding a key to toggle between playing and spectating. This key takes
the place of the previous flip key, although player flipping does
continue to work (and must be rebound if you still want it)
2016-12-18 19:28:42 -05:00
Gregor Richards
90c15fc7a6
Still need to flush input data.
2016-12-18 19:28:42 -05:00
Gregor Richards
e7ce01ad3b
More renaming
...
Now that remote_input_state isn't always remote, it should just be
called real_input_state (and is).
2016-12-18 19:28:42 -05:00
Gregor Richards
f6630ad85a
More fixups for >2 player mode. Mostly was just sending packets that
...
shouldn't have been sent.
2016-12-18 19:28:42 -05:00
Gregor Richards
479955a085
More 3-player support. The initial connection is wonky with
...
delay_frames>0
2016-12-18 19:28:42 -05:00
Gregor Richards
d373684bd5
Off-by-one
2016-12-18 19:28:42 -05:00
Gregor Richards
b51cf8be2b
Real, actual (almost) >2-player support.
2016-12-18 19:28:42 -05:00
Gregor Richards
2cc8c5c467
Removing silly foo_ names used to help migration.
2016-12-18 19:28:42 -05:00
Gregor Richards
53c46530aa
Very first tidbits of true multiplayer support (minus actual multiple
...
players so far)
2016-12-18 19:28:42 -05:00
Gregor Richards
b5cd187077
Since there's now only one mode, removing netplay_callbacks entirely.
2016-12-18 19:28:42 -05:00
Gregor Richards
9b2270f5d4
Say goodbye to spectator mode (for now)
2016-12-18 19:28:42 -05:00
Gregor Richards
4768970d52
Moving force_send_savestate from netplay to connection.
2016-12-18 19:28:42 -05:00
Gregor Richards
ea722b49c8
Move other_addr from netplay to connection.
2016-12-18 19:28:42 -05:00
Gregor Richards
d1d29143b2
Move nickname field to connections. Spectate mode officially broken.
2016-12-18 19:28:42 -05:00
Gregor Richards
189cc6e5d6
Moving socket buffers to per-connection (currently breaks
...
delay_frames=0)
2016-12-18 19:28:42 -05:00
Gregor Richards
b334f04bd5
Removing RARCH_ from Netplay stall reasons.
2016-12-18 19:28:42 -05:00
Gregor Richards
1e1abf6951
First step of multiple connections. Still only one connection actually
...
works.
2016-12-18 19:28:42 -05:00
Gregor Richards
3908e25895
Separating local mode from remote mode.
2016-12-18 19:28:42 -05:00
Gregor Richards
775584cdac
Adding more README info.
2016-12-18 19:28:42 -05:00
Gregor Richards
170b590bdb
Client now starts one frame after finishing connection, for easier sync.
2016-12-18 19:28:42 -05:00
Gregor Richards
80be19a7da
Renames for readability, merging frame and sram into sync packet.
2016-12-18 19:28:42 -05:00
Gregor Richards
f89e54fcb7
Now that we don't have to start at frame 0, use the server frame count
2016-12-18 19:28:42 -05:00
Gregor Richards
b3092f6fde
Moving things that shouldn't have been public into netplay_private.h
2016-12-18 19:28:41 -05:00
Gregor Richards
9054b51f0e
Finally, bringing back the first frame (in nonblocking mode)
2016-12-18 19:28:41 -05:00
Gregor Richards
ce7686104d
Removing dead code
2016-12-18 19:28:41 -05:00
Gregor Richards
71e5cb756a
Support for delay_frames=0 in nonblocking mode.
2016-12-18 19:28:41 -05:00
Gregor Richards
1c8f056239
Nonblocking initial connection. Haven't tested with delay_frames=0 yet
2016-12-18 19:28:41 -05:00
Gregor Richards
3f8f9761f6
Fixes particularly affecting delay_frames=0 mode
2016-12-18 19:28:41 -05:00
Gregor Richards
91e7db3eca
This semicolon broke everything!
2016-12-18 19:28:40 -05:00
Gregor Richards
ba76528b8f
A more sophisticated status variable for later making the initial
...
connection nonblocking.
2016-12-18 19:28:39 -05:00
Gregor Richards
0f5eec9987
Use zbuffer_size instead of state_size for the packet buffer
2016-12-18 19:28:39 -05:00
Gregor Richards
1214541410
Added packet buffer resizing to cope with initialization quirks.
2016-12-18 19:28:38 -05:00
Gregor Richards
36a93e5697
Fix a few bits broken by merging.
2016-12-18 19:28:38 -05:00
Gregor Richards
900e5a79ec
Use nonblocking sockets for Netplay to avoid some stalls.
2016-12-18 19:28:38 -05:00
Twinaphex
d604441cea
Merge pull request #4266 from GregorR/netplay-better-simulation
...
Better netplay input simulation
2016-12-18 07:13:52 +01:00
Gregor Richards
1245d1b5dd
Better netplay input simulation
...
In resimulation mode, we only copy the buttons. The reason for this
is nonobvious:
If we resimulated nothing, then the /duration/ with which any input
was pressed would be approximately correct, since the original
simulation came in as the input came in, but the /number of times/
the input was pressed would be wrong, as there would be an
advancing wavefront of real data overtaking the simulated data
(which is really just real data offset by some frames).
That's acceptable for arrows in most situations, since the amount
you move is tied to the duration, but unacceptable for buttons,
which will seem to jerkily be pressed numerous times with those
wavefronts.
2016-12-18 00:46:02 -05:00
Gregor Richards
17e08c7a28
When we disconnect netplay, fully deinit it
...
In particular, we need to disentangle the interceding netplay callbacks.
In previous versions, if you disconnected netplay but were using a core
that made netplay stall for connections (i.e., one that has no
savestates), netplay would continue to stall because it still
interceded, even though it was supposed to be off. This fixes that.
2016-12-17 23:08:59 -05:00
Gregor Richards
8c08a5399d
Fix a possible NULL dereference in load_savestate
...
In the unlikely situation that serial_info wasn't provided and the delta
frame wasn't ready (possibly an impossible situation) it previously
would have segfaulted. This fixes that.
2016-12-15 16:19:54 -05:00
twinaphex
b4c1927e27
(MSVC 2003) Buildfixes
2006-05-18 13:31:43 +02:00
Gregor Richards
9a4b28735b
HAVE_SOCKET_LEGACY -> no IPv6
...
I had previously assumed that if AF_INET6 is defined, IPv6 support was
present. Some psychopathic console SDKs which shall not be named
actually define AF_INET6 but none of the IPv6 structures. As there is
therefore no way to determine whether IPv6 support is present at
preprocessor time, I'm ust assuming that HAVE_SOCKET_LEGACY implies no
IPv6. This means in effect that no consoles get IPv6 support.
2016-12-10 05:27:25 -05:00
twinaphex
4bf806ef00
(Netplay) Some build fixes for PS3 and others
2016-12-10 09:41:24 +01:00
Brad Parker
d558862e21
make "Got connection from" translatable. Update JP translation.
2016-12-09 23:38:00 -05:00
Gregor Richards
a70e21f328
Suppress a warning due to weird declarations on Windows.
2016-12-05 20:50:05 -05:00
Gregor Richards
e7f20a3673
Bugfixes
...
Silence some Coverity warnings (including a real memory leak) and be
more careful about checking IPv6 mode (for backwards compatibility with
systems that don't support IPv6 but may run code compiled to expect IPv6)
2016-12-05 00:45:40 -05:00
Gregor Richards
2b437ccb8c
Don't need to explicitly demand IPPROTO_TCP (and doing so breaks some
...
SOCKET_LEGACY builds)
2016-12-03 16:33:48 -05:00
Spec-Chum
7a6a0ee7af
Fix MSVC compilation
2016-12-03 18:24:49 +00:00
Gregor Richards
f725f38061
Use strlcpy
2016-12-03 09:58:16 -05:00
Gregor Richards
98f0d4d45b
Better error messages when the Netplay handshake fails
2016-12-03 09:46:20 -05:00
Gregor Richards
3c7fc73735
sendto fix for MSVC
2016-12-02 23:15:53 -05:00
Twinaphex
d71df5c06f
Merge pull request #4138 from GregorR/netplay-port-unsigned-short
...
Be explicit about types
2016-12-03 05:11:02 +01:00
Gregor Richards
cc664db231
Be explicit about types.
2016-12-02 23:08:34 -05:00
Twinaphex
4b2a45a276
remove unused variables
2016-12-03 05:07:27 +01:00
Gregor Richards
8993003259
C++ fixes
2016-12-02 22:56:37 -05:00
Gregor Richards
0577749fae
Netplay LAN scanning is go! (sort of)
2016-12-02 22:40:26 -05:00
Gregor Richards
077d5440ee
Allow Netplay to receive a struct netplay_host to connect to rather than
...
using the configured setting
2016-12-02 21:16:15 -05:00
Gregor Richards
ba0985de37
Actually report the host port as the Netplay port, not the discovery port
2016-12-02 20:38:55 -05:00
Gregor Richards
3446cf09d6
Actually report discovered hosts back to the caller!
2016-12-02 20:28:22 -05:00
Gregor Richards
4c18cec752
Added Netplay discovery code (not yet in menu)
2016-12-02 19:49:42 -05:00
Gregor Richards
addff325d0
Netplay discovery LAN scanning task (incomplete)
2016-12-02 18:56:29 -05:00
Gregor Richards
a082df0027
More stripping out of NAT traversal for SOCKET_LEGACY
2016-12-02 13:18:35 -05:00
Gregor Richards
5739be5594
SOCKET_LEGACY doesn't even necessarily have inet_ntoa, so oh well, no
...
host for you
2016-12-01 20:40:16 -05:00
Gregor Richards
22798e26c7
delay_frames naming consistency
...
Unifying all of the various inconsistent names of delay_frames into a
single name: delay_frames.
2016-12-01 13:34:37 -05:00
Gregor Richards
c7f8cd3c68
Adding NAT traversal announcement for SOCKET_LEGACY
2016-11-30 19:01:32 -05:00
Twinaphex
bb499b70be
Merge pull request #4104 from GregorR/natt
...
NAT traversal
2016-11-30 16:09:53 +01:00
Gregor Richards
b3ababce9a
Fix Netplay IPv6 support
2016-11-30 00:25:16 -05:00
Gregor Richards
c342c103ae
Always get numeric host/ports instead of names.
2016-11-29 23:08:26 -05:00
Gregor Richards
42da0a0184
NAT traversal in Netplay
...
For the time being, if NAT traversal is successful it simply announces
it as an OSD message. In the future it will be used to inform a
matchmaking server of the public port.
This patch also included minor fixes to the NAT traversal implementation
to make the select it demands actually doable.
2016-11-29 22:59:46 -05:00
twinaphex
d26a213971
CXX_BUILD fixes
2016-11-27 13:30:35 +01:00
Gregor Richards
225cbb387b
Updating netplay to use trans_stream for compression
2016-11-26 16:06:52 -05:00
Gregor Richards
da0b958aeb
Check HAVE_ZLIB and only do zlib compression if it's supported by both
...
sides.
2016-11-25 11:03:12 -05:00
Gregor Richards
db437047f8
Don't use z_const, which is apparently not always defined.
2016-11-25 10:40:25 -05:00
Gregor Richards
679ea058a4
Properly clean up zlib.
2016-11-25 10:40:24 -05:00
Gregor Richards
3ff22c9ed6
Fixes for C++ support.
2016-11-25 10:40:24 -05:00
Gregor Richards
9f03020af8
Change the netplay protocol version since compression isn't backwards
...
compatible.
2016-11-25 10:40:24 -05:00
Gregor Richards
53c6223dc6
Use zlib compression for savestates sent over netplay.
2016-11-25 10:40:24 -05:00
Diego Viola
cf0c60bb98
Fix Netplay fullscreen issue
...
Fixes #3936
2016-11-07 16:01:18 -02:00
Brad Parker
d1d5584d18
update copyright
2016-10-27 11:47:10 -04:00
twinaphex
0d3752e90f
More translatable strings
2016-10-22 05:23:59 +02:00
twinaphex
3334060b03
Add another translatable string
2016-10-22 04:49:04 +02:00
twinaphex
9de0ebe859
Make some more strings translatable
2016-10-22 04:47:50 +02:00
twinaphex
42053a82e1
Prevent some implicit memsets
2016-10-21 19:39:51 +02:00
twinaphex
ddb4f85430
netplay_common.c - Buildfix for MSVC
2016-10-19 18:09:59 +02:00
Gregor Richards
2e432b005e
Casts for C++ compatibility.
2016-10-10 11:56:43 -04:00
Gregor Richards
5c206c89f0
Add a netplay advertisement server for LAN netplay detection.
2016-10-10 11:52:54 -04:00
Gregor Richards
2c1cd0d06b
Netplay should disable when it deinits, so it doesn't auto-reconnect
...
when loading a new game.
2016-10-09 09:42:06 -04:00
Gregor Richards
6c15c0de3d
Support for architecture-dependence serialization quirks in Netplay
...
As well as the implementation magic, we now send a platform magic in our
connection header. If the core reports platform dependence and the
platform magic differs relevantly, the connection will be refused.
Since netplay_send_info (client handshake) and netplay_get_info (server
handshake) were practically identical, they've also been merged into a
single netplay_handshake.
2016-10-05 21:12:42 -04:00
Gregor Richards
307ba5951e
A bit more care about frame=0 input, which is always 0
2016-10-05 20:45:30 -04:00
Alcaro
46ab267f40
Merge pull request #3700 from GregorR/netplay-serialization-quirks
...
Serialization quirks
2016-10-06 00:59:14 +02:00
Gregor Richards
e65a63e5d5
Add support for debugging core nondeterminism
...
This adds a debug flag to netplay_net (DEBUG_NONDETERMINISTIC_CORES)
which helps determine if a core has nondeterminism.
2016-10-05 07:58:01 -04:00
Gregor Richards
60153e7035
Ignore check_frames if CRCs are utterly inconsistent
...
This effectively disables check_frames if frame 1's CRC differs between
host and client. This is necessary because some important cores have
nondeterminism in core_run, thus mandating check_frames, while some
important cores have nondeterminism in core_serialize, thus mandating no
check_frames.
2016-10-05 07:55:30 -04:00
Gregor Richards
49b4143687
Reviving netplay_log_connection, i.e. connection messages on the host
2016-10-05 07:52:14 -04:00
Gregor Richards
701cc5a18c
Splitting endian and other platform savestate quirks.
2016-10-04 23:07:36 -04:00
Gregor Richards
a636bac428
Style and clarity nits.
2016-10-04 23:07:36 -04:00
Gregor Richards
51683661e5
Changes to Netplay for the recent changes to quirks.
2016-10-04 23:07:36 -04:00
Gregor Richards
90bd741786
Switching serialization quirks to uint64_t for consistency with other
...
bitfields
2016-10-04 23:07:35 -04:00
Gregor Richards
3fa3fe0fcd
Fixes for the other few Netplay initialization points
2016-10-04 23:07:35 -04:00
Gregor Richards
0d661ef6a2
Fix some backwards implementation in reporting serialization quirks
2016-10-04 23:07:35 -04:00
Gregor Richards
07a4ad791d
Implemented Netplay initialization quirk
2016-10-04 23:07:35 -04:00
Gregor Richards
5676d0b848
Adding Netplay quirk for untransmittable savestates
2016-10-04 23:06:50 -04:00
Gregor Richards
44931586b7
Removing Netplay workarounds which will soon be replaced by quirks
2016-10-04 23:06:50 -04:00
Gregor Richards
68cee3b409
Being more careful with serialization
2016-10-04 22:24:33 -04:00
Gregor Richards
71873e8c97
Moving Netplay pre- and post-frame behavior into core_run
...
This (mostly) prevents other paths from accidentally side-stepping
Netplay. Netplay itself now sets an in_netplay variable to avoid
self-recursion in its own core_run calls.
2016-10-04 13:40:07 -04:00
twinaphex
19863e4174
autosave_lock/autosave_unlock - no longer require HAVE_THREADS ifdefs
2016-10-04 09:56:58 +02:00
Gregor Richards
3953018547
Clarifications to Netplay menu and removing obsolete setting
...
This commit:
* Reorders the Netplay settings menu to put more useful options at the
top.
* Renames the swap_input setting from "Swap Netplay Input", which is
meaningless and confusing, to "Netplay P2 Uses C1", which is oddly
truncated but at least true.
* Removes the is_client setting altogether, as that's no longer how
client vs. server mode is determined (each are separate options when
enabling Netplay)
2016-10-03 17:28:20 -04:00
Gregor Richards
e41ac34561
Get rid of global->netplay
...
Moved settings values into settings->netplay, and global->netplay.enable
is moved into netplay itself, and is no longer a configuration value
whatsoever, as that conflicts with the behavior of the netplay menu.
2016-10-02 22:13:34 -04:00
twinaphex
243dc139d2
Revert "Create path server and add to paths.c"
...
This reverts commit 00a1e3716a
.
2016-10-01 08:17:44 +02:00
Gregor Richards
01d379066e
Removing Netplay workarounds in anticipation of quirks API
2016-09-30 16:00:49 -04:00
twinaphex
13cf804a70
Fix signed/unsigned mismatch warnings
2016-09-30 08:23:24 +02:00
twinaphex
00a1e3716a
Create path server and add to paths.c
2016-09-30 06:22:56 +02:00
Gregor Richards
f710303a40
Somewhat fixing support for savestateless cores
...
Without early saves we couldn't properly detect savestateless cores. We
still can't, really, but we can at least EVENTUALLY detect this
condition. netplay_net has been fixed to do so.
2016-09-29 20:48:39 -04:00
Gregor Richards
5b62fbb355
Fix spectator mode to work with the late-serialization workaround
2016-09-29 17:28:01 -04:00
twinaphex
da5d43974a
netplay_data is a void pointer no more
2016-09-29 20:11:46 +02:00
Gregor Richards
567da56048
Adding remaining netplay menu options
...
A couple fixes are still necessary for the client, in particular to
recover a "lost" hostname, but now it is possible to start server or
client mid-stream, and to disconnect intentionally.
2016-09-29 13:04:38 -04:00
Brad Parker
186d0d6450
fix cheevos memory leak
2016-09-28 23:05:59 -04:00
Twinaphex
9b17e4f01e
Merge pull request #3680 from GregorR/netplay-sram-leniency
...
Make netplay lenient to differing sram sizes
2016-09-28 23:12:10 +02:00
Gregor Richards
1470b6672b
Fix delay_frames=0 mode to work with the recent late-loading workaround
2016-09-28 15:45:52 -04:00
Gregor Richards
ad4cec0b07
Make netplay lenient to differing sram sizes
...
Some cores can only determine the true size of sram after fully loading
the content, and so will report different values when the sram size is
queried. As a result, netplay cannot count on sram size as a reliable
verification technique. sram is still sent for the savestateless core
case.
2016-09-28 08:04:38 -04:00
Twinaphex
f0a2159f9a
remove unused variable
2016-09-28 06:50:43 +02:00
Gregor Richards
f665881d6d
Workarounds for cores that can't be saved early
...
Netplay now never serializes/unserializes cores before 60 frames have
been emulated. This is a workaround for buggy cores and documented as
such.
2016-09-27 20:49:16 -04:00
Gregor Richards
bd354cd275
Making all Netplay sockets should be cloexec
...
All Netplay sockets should close-on-exec. There is no reason for
xdg-screensaver to keep Netplay sockets alive.
2016-09-25 23:26:32 -04:00
Gregor Richards
c4eb12a583
Adding backend functionality to reconnect a Netplay client.
2016-09-24 23:48:42 -04:00
Gregor Richards
60449e8928
Checks for some netplay syscall errors and NULL deref errors
2016-09-24 18:48:55 -04:00
Gregor Richards
fcd57801bd
When we replay, resimulate input so that it doesn't judder between
...
remote states
2016-09-24 08:12:08 -04:00
Gregor Richards
6472b0ce82
Small checks to avoid needless blocking in delay_frames=0 mode
2016-09-23 23:27:07 -04:00
Gregor Richards
fa5b75b635
Bugfixes in how we reset state on a late Netplay connection
2016-09-23 22:21:53 -04:00
Gregor Richards
236839e22f
Reset netplay stall state upon disconnection
2016-09-23 22:20:47 -04:00
Gregor Richards
ae92cfeac2
More care in check_frames code so we don't check CRCs from a previous
...
connection
2016-09-23 22:18:56 -04:00
Gregor Richards
65e308c92d
Reset player flip state when we lose Netplay connection
...
This fixes a bug whereby reconnections would be out of sync due to the
flip state of the server and client being different. The server now
resets its flip state on disconnect.
2016-09-22 21:56:19 -04:00
Gregor Richards
06550ec289
Check if setting CLOEXEC fails on the Netplay server port.
2016-09-22 21:02:26 -04:00
Gregor Richards
1503b3d42f
Don't serialize frame 0 in netplay, as the core may not yet be ready
2016-09-22 17:36:46 -04:00
Twinaphex
34944cac0f
remove unused variables
2016-09-22 22:01:35 +02:00
Twinaphex
b2240c5783
Merge pull request #3631 from GregorR/netplay-reconnect
...
Support for Netplay reconnection
2016-09-22 14:27:38 +02:00
Gregor Richards
4a83e6dee9
Both sides should send the same header so either can check the other
2016-09-22 07:06:26 -04:00
Gregor Richards
42f8ed4338
Support for Netplay reconnection
...
In net server mode, when the client disconnects, the server now returns
to listening mode, in anticipation of the client reconnecting.
2016-09-21 22:37:43 -04:00
twinaphex
017bf34d71
Prevent null pointer dereference defect
2016-09-22 03:59:02 +02:00
Gregor Richards
4b370cf55e
Re-add TCP_NODELAY in host mode.
2016-09-21 17:31:19 -04:00
Gregor Richards
c2d9e7a538
Support for late connection to Netplay host mode
...
This changes netplay host mode's behavior in net (normal) mode from
immediately blocking to waiting for a connection while allowing the game
to run, like spectator mode.
2016-09-21 17:26:02 -04:00
twinaphex
b548362869
Use encoding_crc32
2016-09-21 12:31:40 +02:00
Gregor Richards
851cd0fe6e
Removing now-unused BSV-related functions from Netplay
2016-09-20 22:32:23 -04:00
twinaphex
d7e9c198e6
Cleanups to netplay
2016-09-17 18:21:29 +02:00
Twinaphex
e21662b3e9
Merge pull request #3607 from GregorR/netplay-savestates
...
Netplay savestate loading frontend changes
2016-09-17 18:15:49 +02:00
Alcaro
ec2fd5ebd7
Fix warning
2016-09-17 17:55:42 +02:00
Gregor Richards
d53373a5cb
Netplay savestate loading frontend changes
...
Support for the frontend to inform Netplay when a savestate has been
loaded, so Netplay can in turn inform the peer.
2016-09-17 11:24:23 -04:00
twinaphex
a55feae619
CXX_BUILD fixes
2016-09-16 13:38:06 +02:00
Gregor Richards
ad336df709
Reimplemented Netplay spectate mode
...
Spectate mode is now far more similar to net (normal) mode, and, more
importantly, it works. In addition, spectate mode will not fast-forward
to catch up with the server if it lags too far behind.
2016-09-15 23:06:32 -04:00
Gregor Richards
4076b14568
Make Netplay flipping deterministic
...
The receiving side of a player-flip request now does a forced rewind to
assure that any already-computed frames are computed with the players on
the right side.
2016-09-15 23:06:32 -04:00
Gregor Richards
827009d2d3
A few corrections/clarifications in the Netplay README
2016-09-15 23:06:32 -04:00
Gregor Richards
2a0202ccf5
Making Netplay check frequency configurable.
2016-09-15 23:06:32 -04:00
Gregor Richards
9a91570db8
Adding new network commands to the Netplay README.
2016-09-15 23:06:32 -04:00
Gregor Richards
7271d1c3fa
Support for frame CRCing
...
Every frame (soon to be configurable), the server does a CRC-32 hash and
sends it to the client. If the client finds that its own hash is
different from the server's, it requests a fresh savestate.
This is a last-ditch effort to sync if all else fails, and it's a
best-effort situation. The size of the buffer should assure that we
always still have the frame around to CRC, but I imagine there are edge
cases where we don't. If you're in an edge case, the CRC is ignored.
2016-09-15 23:06:32 -04:00
Gregor Richards
79eba578ff
Remote state load bugfix: Don't skip an input frame
2016-09-15 23:06:32 -04:00
Gregor Richards
5f90f072ba
Documentation fixup
...
Fixing up some of the function documentation, and documenting the packet
formats.
2016-09-15 23:06:32 -04:00
Gregor Richards
27188e102d
Support for savestate loading over netplay
...
Assuming the core supports saving/loading states, and (crucially)
assuming the states are portable across the architectures on both sides
of the connection, Netplay now supports the transmission of savestates.
Right now the frontend doesn't actually send any such requests, as it's
not clear exactly where the code for that should be.
This works in either direction, although I'll admit I have no idea what
happens if they both load at the same time.
2016-09-15 23:06:32 -04:00
Gregor Richards
4d11b1d674
Don't misinterpret "Netplay isn't loaded" as "must pause" :)
2016-09-15 23:06:32 -04:00
Gregor Richards
c3186c57ab
Don't stall if connection lost with remote paused
2016-09-15 23:06:32 -04:00
Gregor Richards
96186438ec
Remote pausing
...
Support for remote pausing, and with it, support for Netplay pausing the
frontend correctly. With this patch alone this doesn't work, since
there's no clean way for the frontend to tell Netplay that it's paused.
2016-09-15 23:06:32 -04:00
twinaphex
a71cd89379
Cleanup unused variable
2016-09-15 21:26:10 +02:00
Gregor Richards
9bc78d25a0
Minor stylistic fixes for clarity and consistency with the rest of
...
RetroArch.
2016-09-14 10:06:57 -04:00
Gregor Richards
b1a2e096e5
Use consistent quotes in Netplay README.
2016-09-14 10:03:26 -04:00
Gregor Richards
12bf3e4824
Rather than repeating the same sample for every frame while stalled,
...
just pause the sound while stalled. Both options are annoying, but this
option is less annoying.
2016-09-13 21:45:06 -04:00
Gregor Richards
ea0bb6f812
Just in case some systems don't have TCP_NODElAY, put that in an ifdef.
2016-09-13 21:39:10 -04:00
Gregor Richards
d4e074dbed
Moved the advance of self_ptr to the same place as the advance of
...
self_frame_count, which is much clearer.
2016-09-13 21:32:57 -04:00
Gregor Richards
99b5ed92ed
other should always be <= both real AND self. Before this fix, it was
...
possible (albeit unlikely) for the remote to get so far ahead of us that
they actually overwrote our own current data :)
2016-09-13 21:32:57 -04:00
Gregor Richards
1267e5e867
A few clarifications regarding the buffer's have_remote and used_real
...
data. simulation shouldn't touch 'em.
2016-09-13 21:32:57 -04:00
Gregor Richards
a0cfdb8a9c
naks now cause disconnection.
2016-09-13 21:32:57 -04:00
Gregor Richards
b140b16b5d
Removed Netplay positive acknowledgement messages: They didn't document
...
their corresponding sent message, and so couldn't be used for
acknowledgement anyway. Negative acknowledgement is sufficient.
2016-09-13 21:32:57 -04:00
Gregor Richards
6829b80c6b
Reimplemented disconnection based on stalls. If we stall for 10 seconds,
...
disconnect.
2016-09-13 21:32:57 -04:00
Gregor Richards
8aa48cd3f9
Reinstituted "standard" timeout-based disconnection, which only works
...
for stall_frames==0 due to the fixes to not stall the UI.
2016-09-13 21:32:57 -04:00
Gregor Richards
0ccc39769d
Adding my copyright lines to files I've touched.
2016-09-13 21:32:57 -04:00
Gregor Richards
ae8e695644
Fixing indentation to align with the rest of RetroArch.
2016-09-13 21:32:57 -04:00
Gregor Richards
f9f4e15d33
Removing commented-out code (mostly old UDP stuff)
2016-09-13 21:32:57 -04:00
Gregor Richards
c5fe0ec6be
Updating the Netplay README to be true of the current implementation.
2016-09-13 21:32:57 -04:00
Gregor Richards
147d739197
Fixed stall_frames=0 mode to only block if frames are actually needed.
...
Rather than counting on the complexicon of used_real calculations, set
used_real when... real is used. (Problem: If the core doesn't read input
at all, used_real won't be set; todo: test with handhelds.) Minor
resilience fixes.
2016-09-13 21:32:57 -04:00
Gregor Richards
c7d0bf90f6
Bugfixes to bring Netplay Nouveau from "kinda working" to "stably
...
working":
(1) Fixups to the stall logic to make sure it always receives frames
while stalling :)
(2) Disused the used_real field. It was misconfigured and would
frequently claim to be using real data when real data hadn't been
used... this means more replays for now, but used_real will be readded.
(TODO)
(3) Stall duration is now related to sync frames, and thus configurable.
(4) Delta frames were having the good ol' initialization problem, as
frame==0 was indistinguishable from unused. Quickfixed by adding a
"used" field, but maybe there's a better way.
(5) If serialization fails, switch immediately to blocking mode
(stall_frames = 0). Blocking mode barely works, but if serialization
fails, no mode will work!
(6) I'm not sure which bug my replaying-from-previous-frame was trying
to fix, but the correct behavior is to replay from the last frame we had
vital information, not the frame prior. Notionally this should just be
an efficiency thing, but unsigned arithmetic at 0 made this a "just
ignore all input from now on" thing.
2016-09-13 21:32:57 -04:00
Gregor Richards
07e869ccae
is_simulated was confusing and poorly named. Using have_remote in its
...
place, which is simply true if we've received remote data. Could also
just use read_frame_crount instead, but this keeps the info frame-local.
2016-09-13 21:32:57 -04:00
Gregor Richards
4f16a19f5e
Rather than stalling by blocking and becoming unresponsive, stall by
...
replaying the same frame. TODO: Maybe mute the audio?
2016-09-13 21:32:57 -04:00
Gregor Richards
5edfbeafb0
Switched Netplay over to TCP. A lot of the stalling logic had to change
...
for this, and in particular, it now sometimes stalls in a way that makes
it very difficult to actually input anything (whoops :) ). Simply
setting the sync frames higher avoids that. With supported cores, this
is incredibly risilient, but when it fails, it mostly fails to freezing,
which is less than ideal.
TODO: Stall frames should be configurable. All the UDP code is still
there but commented out, should be gutted. The original fast-forward
code is now commented out, but really both fast-forward and stalling
should be options; the only complication is that it needs to send
simulated self-input for fast-forward.
2016-09-13 21:32:57 -04:00
Gregor Richards
9a80a1bd7e
Adding a bit of Netplay documentation.
2016-09-13 21:32:57 -04:00
Gregor Richards
69b7dc0d08
Multitudinous fixes and updates to Netplay. Had to be one commit since
...
they're mostly related:
(1) Renamed frame_count to self_frame_count to be consistent with all
other names.
(2) Previously, it was possible to overwrite data in the ring buffer
that hadn't yet been used. Now that's not possible, but that just
changes one breakage for another: It's now possible to miss the NEW
data. The final resolution for this will probably be requesting stalls.
This is accomplished simply by storing frame numbers in the ring buffer
and checking them against the 'other' head.
(3) In TCP packets, separated cmd_size from cmd. It was beyond pointless
for these to be combined, and restricted cmd_size to 16 bits, which
will probably fail when/if state loading is supported.
(4) Readahead is now allowed. In the past, if the peer got ahead of us,
we would simply ignore their data. Thus, if they got too far ahead of
us, we'd stop reading their data altogether. Fabulous. Now, we're happy
to read future input.
(5) If the peer gets too far ahead of us (currently an unconfigurable 10
frames), fast forward to catch up. This should prevent desync due to
clock drift or stutter.
(6) Used frame_count in a few places where ptr was used. Doing a
comparison of pointers on a ring buffer is a far more dangerous way to
assure we're done with a task than simply using the count, since the
ring buffer is... well, a ring.
(7) Renamed tmp_{ptr,frame_count} to replay_{ptr,frame_count} for
clarity.
(8) Slightly changed the protocol version hash, just to assure that
other clients wouldn't think they were compatible with this one.
(9) There was an off-by-one error which, under some circumstances, could
allow the replay engine to run a complete round through the ring buffer,
replaying stale data. Fixed.
2016-09-13 21:32:57 -04:00
twinaphex
b0e372432f
Cleanups
2016-09-12 18:18:20 +02:00
twinaphex
6f23a8ac0d
Move httpserver to network/
2016-09-12 17:21:00 +02:00
twinaphex
db6171676a
Use retro_assert everywhere
2016-09-08 11:59:44 +02:00
twinaphex
c3ba0ba4e9
Revert "Refactor core_system_info_* functions"
...
This reverts commit f637805c9e
.
2016-09-06 08:38:26 +02:00
twinaphex
f637805c9e
Refactor core_system_info_* functions
2016-09-06 07:08:38 +02:00
twinaphex
82d82110ae
Merge system.h with core.h
2016-09-06 06:11:54 +02:00
twinaphex
e6524f961a
header include cleanups
2016-09-06 01:02:25 +02:00
twinaphex
075aea2289
Header include cleanups
2016-09-06 00:56:00 +02:00
twinaphex
acd4dd527b
Header include cleanups
2016-09-05 18:31:32 +02:00
twinaphex
9191bfa3c0
Header include cleanups
2016-09-03 07:51:11 +02:00
twinaphex
23612cb26f
Header include cleanups
2016-09-03 07:48:25 +02:00
twinaphex
50563d255f
Header cleanups
2016-09-03 07:45:51 +02:00
sergiobenrocha2
7ba35a9929
Fix some spelling errors (pendantic info lintian warnings).
2016-07-20 23:28:29 -03:00
twinaphex
982dd47f01
Translate a bunch of log strings
2016-06-29 03:06:15 +02:00
twinaphex
13dd8e4905
Add translations
2016-06-28 12:08:30 +02:00
twinaphex
aabb1e409c
Move netplay code to network/netplay dir
2016-05-19 11:46:54 +02:00
twinaphex
cba281052a
Rename np_ functions
2016-05-12 12:03:43 +02:00
twinaphex
a7d4379011
Rename np_is_server to netplay_is_server
2016-05-12 10:20:14 +02:00
twinaphex
df3b090d7a
Revert "Create runloop_get_system_info/runloop_free_system_info/runloop_init_system_info"
...
This reverts commit 35bf38e05c
.
2016-05-12 09:37:21 +02:00
twinaphex
35bf38e05c
Create runloop_get_system_info/runloop_free_system_info/runloop_init_system_info
2016-05-12 09:25:52 +02:00
twinaphex
9aed52ac65
Move performance.c to libretro-common/features/features_cpu.c
2016-05-10 20:31:27 +02:00
twinaphex
4a7ab8366b
Move libretro.h headers to libretro-common/include
2016-05-10 19:03:53 +02:00
twinaphex
35ea37b37f
Revert "Move cpu_features to libretro-common"
...
This reverts commit 2b8ff3bf38
.
2016-05-10 09:32:24 +02:00
twinaphex
2b8ff3bf38
Move cpu_features to libretro-common
2016-05-10 09:27:29 +02:00
twinaphex
0d371def5c
Refactor performance.c code
2016-05-10 09:17:04 +02:00
twinaphex
b79b2dca13
Create performance_counters
2016-05-10 08:53:14 +02:00
twinaphex
2691ab0c7d
Rename command_event enums
2016-05-09 20:51:53 +02:00
twinaphex
523ebed112
Combine command_event.c and command.c
2016-05-09 20:30:47 +02:00
twinaphex
a98ef36d36
Rename event_cmd_ctl to command_event
2016-05-09 20:20:50 +02:00
twinaphex
1cd98f1cf7
(Androd) Buildfix
2016-05-09 19:21:40 +02:00
twinaphex
7ca75d46f8
Move net_http_special to network/
2016-05-09 17:47:45 +02:00
twinaphex
751872afa4
Move netlogger.c to network/
2016-05-09 17:45:21 +02:00
twinaphex
3722826e0a
Rename netplay/ to network/
2016-05-09 17:43:38 +02:00