diff options
| author | Techjar <tecknojar@gmail.com> | 2018-07-04 17:01:50 -0400 |
|---|---|---|
| committer | Techjar <tecknojar@gmail.com> | 2018-07-19 18:09:20 -0400 |
| commit | 4407854e9cbffeb8da1d7a8e70186b6d7498bccb (patch) | |
| tree | f3e356855c3cfc7bada351cb13e66aa75c77c188 /Source/Core/Common | |
| parent | f5e8af7b6ca24962f1a9fea14b989a0092bae210 (diff) | |
NetPlay save data synchronization
This adds the functionality of sending the host's save data (raw memory
cards, as well as GCI files and Wii saves with a matching GameID) to
all other clients. The data is compressed using LZO1X to greatly reduce
its size while keeping compression/decompression fast. Save
synchronization is enabled by default, and toggleable with a checkbox
in the NetPlay dialog.
On clicking start, if the option is enabled, game boot will be delayed
until all players have received the save data sent by the host. If any
player fails to receive it properly, boot will be cancelled to prevent
desyncs.
Diffstat (limited to 'Source/Core/Common')
| -rw-r--r-- | Source/Core/Common/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj | 2 | ||||
| -rw-r--r-- | Source/Core/Common/Common.vcxproj.filters | 2 | ||||
| -rw-r--r-- | Source/Core/Common/CommonPaths.h | 1 | ||||
| -rw-r--r-- | Source/Core/Common/SFMLHelper.cpp | 38 | ||||
| -rw-r--r-- | Source/Core/Common/SFMLHelper.h | 23 |
6 files changed, 67 insertions, 0 deletions
diff --git a/Source/Core/Common/CMakeLists.txt b/Source/Core/Common/CMakeLists.txt index f93bd67efb..d7327a2a47 100644 --- a/Source/Core/Common/CMakeLists.txt +++ b/Source/Core/Common/CMakeLists.txt @@ -36,6 +36,7 @@ add_library(common QoSSession.cpp Random.cpp SDCardUtil.cpp + SFMLHelper.cpp SettingsHandler.cpp StringUtil.cpp SymbolDB.cpp diff --git a/Source/Core/Common/Common.vcxproj b/Source/Core/Common/Common.vcxproj index 2a38dd721c..9939e0ccd3 100644 --- a/Source/Core/Common/Common.vcxproj +++ b/Source/Core/Common/Common.vcxproj @@ -147,6 +147,7 @@ <ClInclude Include="Result.h" /> <ClInclude Include="ScopeGuard.h" /> <ClInclude Include="SDCardUtil.h" /> + <ClInclude Include="SFMLHelper.h" /> <ClInclude Include="Semaphore.h" /> <ClInclude Include="SettingsHandler.h" /> <ClInclude Include="SPSCQueue.h" /> @@ -210,6 +211,7 @@ <ClCompile Include="QoSSession.cpp" /> <ClCompile Include="Random.cpp" /> <ClCompile Include="SDCardUtil.cpp" /> + <ClCompile Include="SFMLHelper.cpp" /> <ClCompile Include="SettingsHandler.cpp" /> <ClCompile Include="StringUtil.cpp" /> <ClCompile Include="SymbolDB.cpp" /> diff --git a/Source/Core/Common/Common.vcxproj.filters b/Source/Core/Common/Common.vcxproj.filters index 76793bd9ae..3737a5a1ff 100644 --- a/Source/Core/Common/Common.vcxproj.filters +++ b/Source/Core/Common/Common.vcxproj.filters @@ -68,6 +68,7 @@ <ClInclude Include="Result.h" /> <ClInclude Include="ScopeGuard.h" /> <ClInclude Include="SDCardUtil.h" /> + <ClInclude Include="SFMLHelper.h" /> <ClInclude Include="SettingsHandler.h" /> <ClInclude Include="SPSCQueue.h" /> <ClInclude Include="StringUtil.h" /> @@ -299,6 +300,7 @@ <ClCompile Include="Profiler.cpp" /> <ClCompile Include="Random.cpp" /> <ClCompile Include="SDCardUtil.cpp" /> + <ClCompile Include="SFMLHelper.cpp" /> <ClCompile Include="SettingsHandler.cpp" /> <ClCompile Include="StringUtil.cpp" /> <ClCompile Include="SymbolDB.cpp" /> diff --git a/Source/Core/Common/CommonPaths.h b/Source/Core/Common/CommonPaths.h index 2255b594f5..3022e7c5b6 100644 --- a/Source/Core/Common/CommonPaths.h +++ b/Source/Core/Common/CommonPaths.h @@ -109,6 +109,7 @@ #define GC_SRAM "SRAM.raw" #define GC_MEMCARDA "MemoryCardA" #define GC_MEMCARDB "MemoryCardB" +#define GC_MEMCARD_NETPLAY "NetPlayTemp" #define WII_STATE "state.dat" diff --git a/Source/Core/Common/SFMLHelper.cpp b/Source/Core/Common/SFMLHelper.cpp new file mode 100644 index 0000000000..367bd93a9e --- /dev/null +++ b/Source/Core/Common/SFMLHelper.cpp @@ -0,0 +1,38 @@ +// Copyright 2018 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#include "Common/SFMLHelper.h" + +#include <SFML/Network/Packet.hpp> + +namespace Common +{ +// This only exists as a helper for BigEndianValue +u16 PacketReadU16(sf::Packet& packet) +{ + u16 tmp; + packet >> tmp; + return tmp; +} + +// This only exists as a helper for BigEndianValue +u32 PacketReadU32(sf::Packet& packet) +{ + u32 tmp; + packet >> tmp; + return tmp; +} + +u64 PacketReadU64(sf::Packet& packet) +{ + u32 low, high; + packet >> low >> high; + return low | (static_cast<u64>(high) << 32); +} + +void PacketWriteU64(sf::Packet& packet, const u64 value) +{ + packet << static_cast<u32>(value) << static_cast<u32>(value >> 32); +} +} // namespace Common diff --git a/Source/Core/Common/SFMLHelper.h b/Source/Core/Common/SFMLHelper.h new file mode 100644 index 0000000000..459af6203b --- /dev/null +++ b/Source/Core/Common/SFMLHelper.h @@ -0,0 +1,23 @@ +// Copyright 2018 Dolphin Emulator Project +// Licensed under GPLv2+ +// Refer to the license.txt file included. + +#pragma once + +#include "Common/CommonTypes.h" + +namespace sf +{ +class Packet; +} + +namespace Common +{ +template <typename value_type> +struct BigEndianValue; + +u16 PacketReadU16(sf::Packet& packet); +u32 PacketReadU32(sf::Packet& packet); +u64 PacketReadU64(sf::Packet& packet); +void PacketWriteU64(sf::Packet& packet, u64 value); +} // namespace Common |
