Significant changes include LDN functionality from @Vudjun (no more separate build!) and an XCI trimmer from @amurgshere. Merged PRs in this release (in the order they were merged): #183, #150, #105, #160, #188, #98, #158, #13, #216, #73, #217, #122, #228, #65, #226, #236, #247, #243, #249, #242, #260, #273, #272, #262, #259, #241 ## Versioning: There now exists "stable" (release branch) and ["canary" (master branch)](https://github.com/GreemDev/Ryujinx-Canary/releases) versions. Instead of everyone using the same emulator, getting updates for every code change, you now *opt-in* to the more frequent updates by using the Canary version. Use stable and you'll get about an update a week, but that update will be MUCH more significant as it's the entire previous week's changes & PR merges. ## LDN LDN functionality is now merged! Use [this](https://github.com/GreemDev/Ryujinx/wiki/Multiplayer%E2%80%90(LDN%E2%80%90Local%E2%80%90Wireless)%E2%80%90Guide) to get started. Please note that LDN is only for local wireless; **this is not a Nintendo Switch Online emulation feature**. ## UI - Added an XCI trimmer (#105). - You can use this feature to trim dead bytes & the embedded firmware out of your dumped XCIs, to make them smaller. - If you right-click an XCI and the trim button it is greyed out, that means your XCI is already as small as possible. - Fix for fullscreen not being really fullscreen (#150) - Fix window sizing calculations when Show Title Bar is enabled (#247) - The "Install/Uninstall file types" buttons will be enabled/disabled depending on which one you contextually need; install will be clickable when they aren't installed, and vice versa. - Fix for showing default config screen when swapping players in controller settings (#122) - Command-line argument to prevent update checking `--hide-updates` (#272) - # RPC: - Added a LOT of game images to Discord RPC. - Play time will now show the time unit hours at a maximum. ## Localization - Update outdated/incorrect & added missing translations for zh-TW (#158) - Add many missing locale strings to all languages (#160) - Update & improve Korean translation (#226) - Minor fixes & add missing translations to Spanish translation (#242) ## Headless - Added `ignore-controller-applet` as an option you can configure via headless command-line options. ## Graphics Backend - ### Vulkan - fix divide-by-zero when recovering from missed draw (#235) - fixes crash in 'Baldo: The Guardian Owls' opening cutscene ## Horizon - fix crash that occurs when launching an NSP forwarder generated by Nro2Nsp (#237) # Nerd Zone Slightly more technical information. If you don't understand what's under here, no worry. - Updater now uses the release's Tag Name instead of its Name for version checking. - Baked in value change logging into ReactiveObject. - Split ConfigurationState into 3, smaller partial classes of the same name. - Specify if the current version is Canary in the version log line --------- Co-authored-by: James Duarte <GarnetSunset@users.noreply.github.com> Co-authored-by: Luke Warner <65521430+LukeWarnut@users.noreply.github.com> Co-authored-by: TheToid <amurgshere@gmail.com> Co-authored-by: GabCoolGuy <gabrielfreville@proton.me> Co-authored-by: Kekschen <52585984+Kek5chen@users.noreply.github.com> Co-authored-by: WilliamWsyHK <WilliamWsyHK@users.noreply.github.com> Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Jacobwasbeast <38381609+Jacobwasbeast@users.noreply.github.com> Co-authored-by: Piplup <100526773+piplup55@users.noreply.github.com> Co-authored-by: Vladimir Sokolov <tehnicalmailone@gmail.com> Co-authored-by: Jonas Henriksson <gr3ger@gmail.com> Co-authored-by: Vudjun <Vudjun@users.noreply.github.com> Co-authored-by: extherian <extherian@gmail.com> Co-authored-by: Hack茶ん <120134269+Hackjjang@users.noreply.github.com> Co-authored-by: EmulationEnjoyer <144477224+EmulationEnjoyer@users.noreply.github.com> Co-authored-by: Nicola <61830443+nicola02nb@users.noreply.github.com> Co-authored-by: jzumaran <juan.zumaran@gitz.cl> Co-authored-by: Pitchoune <yrigaud@icloud.com> Co-authored-by: Narugakuruga <31060534+Narugakuruga@users.noreply.github.com>
106 lines
3.6 KiB
C#
106 lines
3.6 KiB
C#
using Ryujinx.Common.Logging;
|
|
using Ryujinx.Common.Utilities;
|
|
using Ryujinx.HLE.HOS.Services.Ldn.Types;
|
|
using Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.Types;
|
|
using System;
|
|
using System.Net.NetworkInformation;
|
|
|
|
namespace Ryujinx.HLE.HOS.Services.Ldn.UserServiceCreator.LdnMitm
|
|
{
|
|
/// <summary>
|
|
/// Client implementation for <a href="https://github.com/spacemeowx2/ldn_mitm">ldn_mitm</a>
|
|
/// </summary>
|
|
internal class LdnMitmClient : INetworkClient
|
|
{
|
|
public ProxyConfig Config { get; }
|
|
public bool NeedsRealId => false;
|
|
|
|
public event EventHandler<NetworkChangeEventArgs> NetworkChange;
|
|
|
|
private readonly LanDiscovery _lanDiscovery;
|
|
|
|
public LdnMitmClient(HLEConfiguration config)
|
|
{
|
|
UnicastIPAddressInformation localIpInterface = NetworkHelpers.GetLocalInterface(config.MultiplayerLanInterfaceId).Item2;
|
|
|
|
_lanDiscovery = new LanDiscovery(this, localIpInterface.Address, localIpInterface.IPv4Mask);
|
|
}
|
|
|
|
internal void InvokeNetworkChange(NetworkInfo info, bool connected, DisconnectReason reason = DisconnectReason.None)
|
|
{
|
|
NetworkChange?.Invoke(this, new NetworkChangeEventArgs(info, connected: connected, disconnectReason: reason));
|
|
}
|
|
|
|
public NetworkError Connect(ConnectRequest request)
|
|
{
|
|
return _lanDiscovery.Connect(request.NetworkInfo, request.UserConfig, request.LocalCommunicationVersion);
|
|
}
|
|
|
|
public NetworkError ConnectPrivate(ConnectPrivateRequest request)
|
|
{
|
|
// NOTE: This method is not implemented in ldn_mitm
|
|
Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient ConnectPrivate");
|
|
|
|
return NetworkError.None;
|
|
}
|
|
|
|
public bool CreateNetwork(CreateAccessPointRequest request, byte[] advertiseData)
|
|
{
|
|
return _lanDiscovery.CreateNetwork(request.SecurityConfig, request.UserConfig, request.NetworkConfig);
|
|
}
|
|
|
|
public bool CreateNetworkPrivate(CreateAccessPointPrivateRequest request, byte[] advertiseData)
|
|
{
|
|
// NOTE: This method is not implemented in ldn_mitm
|
|
Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient CreateNetworkPrivate");
|
|
|
|
return true;
|
|
}
|
|
|
|
public void DisconnectAndStop()
|
|
{
|
|
_lanDiscovery.DisconnectAndStop();
|
|
}
|
|
|
|
public void DisconnectNetwork()
|
|
{
|
|
_lanDiscovery.DestroyNetwork();
|
|
}
|
|
|
|
public ResultCode Reject(DisconnectReason disconnectReason, uint nodeId)
|
|
{
|
|
// NOTE: This method is not implemented in ldn_mitm
|
|
Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient Reject");
|
|
|
|
return ResultCode.Success;
|
|
}
|
|
|
|
public NetworkInfo[] Scan(ushort channel, ScanFilter scanFilter)
|
|
{
|
|
return _lanDiscovery.Scan(channel, scanFilter);
|
|
}
|
|
|
|
public void SetAdvertiseData(byte[] data)
|
|
{
|
|
_lanDiscovery.SetAdvertiseData(data);
|
|
}
|
|
|
|
public void SetGameVersion(byte[] versionString)
|
|
{
|
|
// NOTE: This method is not implemented in ldn_mitm
|
|
Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient SetGameVersion");
|
|
}
|
|
|
|
public void SetStationAcceptPolicy(AcceptPolicy acceptPolicy)
|
|
{
|
|
// NOTE: This method is not implemented in ldn_mitm
|
|
Logger.Stub?.PrintMsg(LogClass.ServiceLdn, "LdnMitmClient SetStationAcceptPolicy");
|
|
}
|
|
|
|
public void Dispose()
|
|
{
|
|
_lanDiscovery.Dispose();
|
|
}
|
|
}
|
|
}
|