37 Commits

Author SHA1 Message Date
radius
1de95c6413 further refinement of the netplay workflow 2017-05-16 00:18:29 -05:00
radius
a98033f375 make the --start netplay host-- entry context sensitive 2017-05-15 18:58:46 -05: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
0d81b2005f parse new lobby room listing with JSON 2017-03-05 14:19:35 -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
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
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
twinaphex
96c8ca5a09 Header update #1 2017-01-22 13:40:32 +01:00
radius
0de43b954e can now connect when starting a game too 2017-01-20 16:04:10 -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
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
bade067d9a Support for catching up if the netplay peer is ahead of us. 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
763a657f82 Terrible first cut at password (sent in plain text D-8) 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
9b2270f5d4 Say goodbye to spectator mode (for now) 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
1c8f056239 Nonblocking initial connection. Haven't tested with delay_frames=0 yet 2016-12-18 19:28:41 -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
addff325d0 Netplay discovery LAN scanning task (incomplete) 2016-12-02 18:56:29 -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
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
Diego Viola
cf0c60bb98 Fix Netplay fullscreen issue
Fixes #3936
2016-11-07 16:01:18 -02: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
44931586b7 Removing Netplay workarounds which will soon be replaced by quirks 2016-10-04 23:06:50 -04: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
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
Gregor Richards
c4eb12a583 Adding backend functionality to reconnect a Netplay client. 2016-09-24 23:48:42 -04: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
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
2a0202ccf5 Making Netplay check frequency configurable. 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
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
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
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
twinaphex
aabb1e409c Move netplay code to network/netplay dir 2016-05-19 11:46:54 +02:00