Commit Graph

640 Commits

Author SHA1 Message Date
Gregor Richards
95bbd914f1 Fixed >2-player issues with multi-input. 2018-01-05 14:24:43 -05:00
Gregor Richards
ed320fd914 Adding and removing players
The new input handling makes adding and removing players more
complicated, since data can be present that's not expected from the
connected clients list, or absent that's expected in the list but
actually shouldn't be there.
2018-01-05 14:24:43 -05:00
Gregor Richards
39243a8d40 Configurable sharing mode. 2018-01-05 14:24:43 -05:00
Gregor Richards
abf045ef0e Made device requests (badly) configurable. 2018-01-05 14:24:43 -05:00
Gregor Richards
7af7616d3d New initial connection header and support for inter-version connections. 2018-01-05 14:24:43 -05:00
Gregor Richards
fe80c4ce2c Added real pad sharing modes. 2018-01-05 14:24:43 -05:00
Gregor Richards
e4029b72c1 Rename things back after renaming for refactoring. 2018-01-05 14:24:42 -05:00
Gregor Richards
b897ba4e30 Re-fixed input simulation. 2018-01-05 14:24:42 -05:00
Gregor Richards
8c551f3990 Fixing some counters. 2018-01-05 14:24:42 -05:00
Gregor Richards
d1ca90e136 Get rid of this FIXME. 2018-01-05 14:24:42 -05:00
Gregor Richards
ed69916e59 First cut of input changes (not yet working) 2018-01-05 14:24:42 -05:00
Gregor Richards
6d4119690d First step (not yet compiling) of changing around Netplay input. 2018-01-05 14:24:42 -05:00
radius
7bdd8e945a show the frontend name and CPU architecture on netplay rooms 2017-12-17 11:51:50 -05:00
gblues
6904101c44 Clean up trailing whitespace
== DETAILS

Really simple code cleanup, because my editor flags trailing whitespaces
and it's pretty annoying.
2017-12-12 00:24:18 -08:00
Alcaro
485ad9f6f7
add missing %s 2017-11-27 17:15:21 +01:00
Alcaro
0f695f074f
#5802
aren't most of the memdesc fields size_t aka uintptr_t rather than uint64_t? whatever, good enough
2017-11-27 17:07:31 +01:00
twinaphex
311b786279 Silence Coverity warning 2017-11-27 04:34:45 +01:00
twinaphex
493d442f8c Silence some warnings 2017-11-26 22:43:58 +01:00
radius
3991f9b316 add frontend name to netplay announce 2017-11-26 13:40:08 -05:00
twinaphex
9875bbbd7d Silence some Coverity warnings 2017-11-26 01:06:48 +01:00
radius
e10aee3f1d get a proper error 2017-11-19 21:04:58 -05:00
radius
34934b169c silence coverity warning 2017-11-19 17:34:15 -05:00
radius
b32a69889e console buildfix 2017-11-19 16:21:26 -05:00
radius
8dfc585c59 fix another leak 2017-11-19 13:07:51 -05:00
radius
c5dfa314ad fix leak 2017-11-19 12:43:13 -05:00
radius
11611acbe4 use correct size here 2017-11-19 09:43:51 -05:00
radius
9b673152f7 fix C89 errors 2017-11-19 09:41:36 -05:00
radius
149469515f Fix lan rooms
Squashed commit of the following:

commit 6e1fea3b16bb330ed2862eb00d2e911221c48a34
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 22:16:02 2017 -0500

    use the baked in address instead of sockaddr

commit 84f2d389fd6352b3037f48c18d133d2f1063d461
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 22:05:57 2017 -0500

    send replies

commit c6733009cc5a25e58391c5fc693b277ea27404b3
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:53:12 2017 -0500

    send replies

commit a6816c9481f7ea89a3c97597233e54c6354716e7
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:46:55 2017 -0500

    send replies

commit c2453b73ccafbd53192507affbc11d5f279c2e7c
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 21:26:34 2017 -0500

    look for common interfaces

commit fb42e6470242689f5e6160149ef91f0f0abf068d
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 20:06:50 2017 -0500

    send broadcasts in all interfaces

commit b7730596df9775fb815007689e9c7cc06b317b03
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 20:00:17 2017 -0500

    send broadcasts in all interfaces

commit b620a78052d1b95e81d346f3e5efb233e0547793
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 14:30:31 2017 -0500

    add more logging

commit c016c7d559cd631172a58f99cd3e1a1365965b8e
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 14:12:03 2017 -0500

    update log messages

commit 0a49ba61f56f2ca483fa76c7a04f0709c68b95ad
Author: radius <andres.430@gmail.com>
Date:   Sat Nov 18 13:50:47 2017 -0500

    fix lan room listing for rooms > 1, allow connecting in arbitrary ports
2017-11-18 22:43:47 -05:00
Brad Parker
bbf6f2f451 fix "may be used uninitialized in this function" warning 2017-10-28 16:01:29 -04:00
Alcaro
b97853a536 Rename STRING_REP_ULONG to STRING_REP_USIZE 2017-10-02 22:51:51 +02:00
twinaphex
1e37aab49b Cleanup 2017-09-30 16:59:14 +02:00
Brad Parker
0a1b3fedc0 VC6 support (targets NT 3.51) 2017-09-06 23:03:02 -04:00
twinaphex
e16371b8a5 Merge input_config.c and input_driver.c 2017-08-31 02:25:04 +02:00
Gregor Richards
584e12ed37 Fix disconnection not fully deinitializing Netplay. 2017-08-18 14:13:39 -04:00
twinaphex
e56250c84f C89_BUILD fix 2017-08-17 01:41:30 +02:00
radius
6804432fa7 log address family, fix inet_ntop_compat 2017-08-15 21:03:59 -05:00
Brad Parker
c072894a93 netplay: show country next to lobby nickname 2017-07-29 02:24:11 +00:00
radius
84e0251a86 add retroarch version to lan announcement 2017-07-24 21:13:28 -05:00
radius
32525ea0d3 rename MITM with Relay 2017-07-24 20:54:33 -05:00
radius
f7f613a244 android buildfix 2017-07-24 20:13:53 -05:00
radius
e09075dc25 Add RetroArch version and use different icons for different room types 2017-07-24 20:13:52 -05:00
radius
6804540635 improve logging 2017-07-24 20:13:52 -05:00
radius
dcd71b403f add RetroArch version to the netplay announcement 2017-07-24 06:14:34 +02:00
twinaphex
b11620e1eb Add retro_timers.h/retro_math.h 2017-06-28 04:41:38 +02:00
Twinaphex
e2be9e659d Silence some warnings 2017-06-08 02:44:38 +02:00
Gregor Richards
fb3c35dc9f Handle forwarding of netplay state demotions correctly.
Netplay state demotions, i.e. changes from playing to spectating or
disconnected states, could cause chain disconnections of all other
clients. This was due to a bug in when MODE change messages were sent.
Clients rely on the server sending all messages in its own order, and as
a consequence, the server typically holds messages for retransmission
until they can be retransmitted at the correct time. MODE messages were
not held, so could be sent early. When they were sent early, this caused
other clients to panic and disconnect.

A smaller but much stupider secondary bug was also fixed, in which the
first connection could be dropped due simply to writing connections[0]
instead of connections[i] somewhere.
2017-06-06 21:35:09 -04:00
twinaphex
449483206f Revert "New attempt to fix memory leaks of struct retro_system_info"
This reverts commit a1d3dd69dd.
2017-05-30 01:44:49 +02:00
twinaphex
a1d3dd69dd New attempt to fix memory leaks of struct retro_system_info
char variables
2017-05-29 22:24:10 +02:00
twinaphex
d2bc5e0454 Fix more ASAN errors 2017-05-29 02:21:56 +02:00
twinaphex
d8f1cf7b5a Style nits 2017-05-28 18:03:11 +02:00
twinaphex
57273a545f Be more careful here 2017-05-28 18:00:47 +02:00
aliaspider
b49d2a87ab getaddrinfo error codes can also be positive. 2017-05-28 12:46:39 +01:00
aliaspider
934f7c58ba (WiiU) enable networking. 2017-05-23 10:24:23 +01:00
Gregor Richards
2681352d53 Make sure we flush a netplay pause message, so it isn't forgotten. 2017-05-22 16:27:22 -04:00
Andrés
abd6dcd57f Merge pull request #4952 from fr500/fixes
fix delimiter for mitm connect
2017-05-21 12:13:02 -05:00
radius
a09a1030c0 fix delimiter for mitm connect 2017-05-21 12:04:50 -05:00
twinaphex
aeddb18e31 Rewrite netplay checks 2017-05-21 14:18:10 +02:00
twinaphex
0bb1de9561 Cleanups 2017-05-21 09:16:45 +02:00
twinaphex
f51aa6e4ec Add TODO/FIXME note 2017-05-17 09:10:58 +02:00
twinaphex
0aeb683444 Style nits/cleanups 2017-05-16 20:33:14 +02:00
twinaphex
944eff06b8 Cleanup 2017-05-16 20:25:54 +02:00
twinaphex
2562391167 Split up runloop message queue code from netplay_log_connection 2017-05-16 20:24:08 +02:00
twinaphex
eb409328ec Style nits 2017-05-16 20:15:57 +02:00
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