From 65edd08384604215255e4633c9b4c923b39c06ea Mon Sep 17 00:00:00 2001 From: rob1997 Date: Mon, 27 May 2024 21:43:43 +0300 Subject: [PATCH 1/8] working remember me --- .../Scripts/WalletConnect/HyperPlayWeb3.cs | 27 ++ .../WalletConnect/HyperPlayWeb3.cs.meta | 11 + .../HyperPlayConfig.cs | 9 + .../HyperPlayData.cs | 17 + .../HyperPlayExtensions.cs | 14 +- .../HyperPlayProvider.cs | 34 +- .../HyperPlaySigner.cs | 8 +- .../IHyperPlayConfig.cs | 11 + .../IHyperPlayData.cs | 11 + .../LocalStorage/DataStorage.cs | 86 ++++ .../LocalStorage/IStorable.cs | 9 + .../Web3/Core/Build/Web3Builder.cs | 3 +- src/ChainSafe.Gaming/Web3/Core/Web3.cs | 13 +- .../Scenes/SampleLogin - HyperPlay.unity | 454 ++++++++++++++++++ .../Scripts/Scenes/HyperPlayLoginProvider.cs | 32 +- 15 files changed, 729 insertions(+), 10 deletions(-) create mode 100644 Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs create mode 100644 Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta create mode 100644 src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs create mode 100644 src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs create mode 100644 src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs create mode 100644 src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs create mode 100644 src/ChainSafe.Gaming/LocalStorage/DataStorage.cs create mode 100644 src/ChainSafe.Gaming/LocalStorage/IStorable.cs diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs new file mode 100644 index 000000000..c49e61314 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs @@ -0,0 +1,27 @@ +using System.Collections; +using System.Collections.Generic; +using System.Threading.Tasks; +using ChainSafe.Gaming.Evm.JsonRpc; +using ChainSafe.Gaming.HyperPlay; +using ChainSafe.Gaming.UnityPackage; +using ChainSafe.Gaming.Web3.Build; +using ChainSafe.Gaming.Web3.Unity; +using UnityEngine; + +namespace ChainSafe.Gaming +{ + public static class HyperPlayWeb3 + { + public static ValueTask BuildLightweightWeb3() + { + var projectConfig = ProjectConfigUtilities.Load(); + + return new Web3Builder(projectConfig).Configure(services => + { + services.UseUnityEnvironment(); + services.UseRpcProvider(); + services.UseHyperPlay(new HyperPlayConfig()); + }).LaunchAsync(); + } + } +} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta new file mode 100644 index 000000000..1318e4172 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fd38b3373d04c6408afb61a39c01a29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs new file mode 100644 index 000000000..7e1e1a68d --- /dev/null +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs @@ -0,0 +1,9 @@ +using Newtonsoft.Json; + +namespace ChainSafe.Gaming.HyperPlay +{ + public class HyperPlayConfig : IHyperPlayConfig + { + public bool RememberSession { get; set; } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs new file mode 100644 index 000000000..2753983b8 --- /dev/null +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs @@ -0,0 +1,17 @@ +using Newtonsoft.Json; + +namespace ChainSafe.Gaming.HyperPlay +{ + public class HyperPlayData : IHyperPlayData + { + [JsonIgnore] + public string StoragePath => "hyperplay-data.json"; + + [JsonIgnore] + public bool LoadOnInitialize => true; + + public bool RememberSession { get; set; } + + public string SavedAccount { get; set; } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs index b71c3671d..9c0dba1f9 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs @@ -1,9 +1,12 @@ using ChainSafe.Gaming.Evm.Signers; +using ChainSafe.Gaming.LocalStorage; using ChainSafe.Gaming.Web3.Build; using ChainSafe.Gaming.Web3.Core; using ChainSafe.Gaming.Web3.Core.Evm; +using ChainSafe.Gaming.Web3.Core.Logout; using ChainSafe.Gaming.Web3.Evm.Wallet; using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; namespace ChainSafe.Gaming.HyperPlay { @@ -13,13 +16,20 @@ public static class HyperPlayExtensions /// Binds implementation of as to Web3 as a service. /// /// Service collection to bind implementations to. + /// Config for connecting via HyperPlay. /// The same service collection that was passed in. This enables fluent style. - public static IWeb3ServiceCollection UseHyperPlay(this IWeb3ServiceCollection collection) + public static IWeb3ServiceCollection UseHyperPlay(this IWeb3ServiceCollection collection, IHyperPlayConfig config) { collection.AssertServiceNotBound(); collection.AddSingleton(); + collection.AddSingleton(); + + collection.AddSingleton(); + + collection.Replace(ServiceDescriptor.Singleton(typeof(IHyperPlayConfig), config)); + return collection; } @@ -32,7 +42,7 @@ public static IWeb3ServiceCollection UseHyperPlaySigner(this IWeb3ServiceCollect { collection.AssertServiceNotBound(); - collection.AddSingleton(); + collection.AddSingleton(); return collection; } diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs index 8cb8186ad..0d14789e0 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs @@ -2,8 +2,11 @@ using System.Threading.Tasks; using ChainSafe.Gaming.Evm; using ChainSafe.Gaming.HyperPlay.Dto; +using ChainSafe.Gaming.LocalStorage; using ChainSafe.Gaming.Web3; +using ChainSafe.Gaming.Web3.Core; using ChainSafe.Gaming.Web3.Core.Debug; +using ChainSafe.Gaming.Web3.Core.Logout; using ChainSafe.Gaming.Web3.Environment; using ChainSafe.Gaming.Web3.Evm.Wallet; using Nethereum.Signer; @@ -18,18 +21,27 @@ namespace ChainSafe.Gaming.HyperPlay /// public class HyperPlayProvider : WalletProvider { + private readonly IHyperPlayConfig config; + private readonly IHyperPlayData data; + private readonly DataStorage dataStorage; private readonly IHttpClient httpClient; private readonly IChainConfig chainConfig; /// /// Initializes a new instance of the class. /// + /// Injected . + /// Injected . + /// Injected . /// HttpClient to make requests. /// ChainConfig to fetch chain data. /// Injected . - public HyperPlayProvider(IHttpClient httpClient, IChainConfig chainConfig, ChainRegistryProvider chainRegistryProvider) + public HyperPlayProvider(IHyperPlayConfig config, IHyperPlayData data, DataStorage dataStorage, IHttpClient httpClient, IChainConfig chainConfig, ChainRegistryProvider chainRegistryProvider) : base(chainRegistryProvider: chainRegistryProvider) { + this.config = config; + this.data = data; + this.dataStorage = dataStorage; this.httpClient = httpClient; this.chainConfig = chainConfig; } @@ -44,6 +56,12 @@ public override async Task Connect() string account = accounts[0].AssertIsPublicAddress(nameof(account)); + // Saved account exists. + if (data.RememberSession && data.SavedAccount == account) + { + return account; + } + string message = "Sign-in with Ethereum"; string hash = await Perform("personal_sign", message, account); @@ -63,12 +81,22 @@ public override async Task Connect() throw new Web3Exception("Fetched address does not match the signing address."); } + if (config.RememberSession) + { + data.RememberSession = true; + + data.SavedAccount = account; + + await dataStorage.Save(data); + } + return account; } public override Task Disconnect() { - // currently HyperPlay doesn't support disconnecting. + dataStorage.Clear(data); + return Task.CompletedTask; } @@ -94,7 +122,7 @@ public override async Task Perform(string method, params object[] paramete }, }); - string response = (await httpClient.PostRaw("http://localhost:9680/rpc", body, "application/json")).Response; + string response = (await httpClient.PostRaw(config.Url, body, "application/json")).Response; // In case response is just a primitive type like string/number... // Deserializing it directly doesn't work. diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlaySigner.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlaySigner.cs index fed910337..c829a54cd 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlaySigner.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlaySigner.cs @@ -2,6 +2,7 @@ using ChainSafe.Gaming.Evm.Signers; using ChainSafe.Gaming.Web3.Core; using ChainSafe.Gaming.Web3.Core.Evm; +using ChainSafe.Gaming.Web3.Core.Logout; using ChainSafe.Gaming.Web3.Evm.Wallet; namespace ChainSafe.Gaming.HyperPlay @@ -9,7 +10,7 @@ namespace ChainSafe.Gaming.HyperPlay /// /// Concrete implementation of via HyperPlay desktop client. /// - public class HyperPlaySigner : ISigner, ILifecycleParticipant + public class HyperPlaySigner : ISigner, ILifecycleParticipant, ILogoutHandler { private readonly IWalletProvider walletProvider; @@ -57,5 +58,10 @@ public ValueTask WillStopAsync() { return new ValueTask(Task.CompletedTask); } + + public async Task OnLogout() + { + await walletProvider.Disconnect(); + } } } \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs new file mode 100644 index 000000000..47f2d9786 --- /dev/null +++ b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs @@ -0,0 +1,11 @@ +using ChainSafe.Gaming.LocalStorage; + +namespace ChainSafe.Gaming.HyperPlay +{ + public interface IHyperPlayConfig + { + public string Url => "http://localhost:9680/rpc"; + + public bool RememberSession { get; set; } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs new file mode 100644 index 000000000..ff77d6f13 --- /dev/null +++ b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs @@ -0,0 +1,11 @@ +using ChainSafe.Gaming.LocalStorage; + +namespace ChainSafe.Gaming.HyperPlay +{ + public interface IHyperPlayData : IStorable + { + public bool RememberSession { get; set; } + + public string SavedAccount { get; set; } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs new file mode 100644 index 000000000..d22049cd7 --- /dev/null +++ b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs @@ -0,0 +1,86 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using ChainSafe.Gaming.Web3; +using ChainSafe.Gaming.Web3.Environment; +using Newtonsoft.Json; + +namespace ChainSafe.Gaming.LocalStorage +{ + /// + /// Default implementation of the component responsible for storage of WalletConnect-related data. + /// + public class DataStorage + { + private readonly IOperatingSystemMediator osMediator; + private readonly ILogWriter logWriter; + + public DataStorage(IOperatingSystemMediator osMediator, ILogWriter logWriter) + { + this.osMediator = osMediator; + this.logWriter = logWriter; + } + + public async Task Save(T storable, bool createFile = true) + where T : IStorable + { + var path = AbsolutePath(storable.StoragePath); + + if (!createFile && !File.Exists(path)) + { + return; + } + + // try catch. + var json = JsonConvert.SerializeObject(storable); + logWriter.Log($"Saved {json}"); + await File.WriteAllTextAsync(path, json); + } + + public async Task Load(T storable) + where T : IStorable + { + var path = AbsolutePath(storable.StoragePath); + + if (!File.Exists(path)) + { + return; + } + + try + { + var json = await File.ReadAllTextAsync(path); + + logWriter.Log($"Loaded {json}"); + + JsonConvert.PopulateObject(json, storable); + } + catch + { + logWriter.LogError("WalletConnect local data file is corrupted. Removing.."); + + File.Delete(path); + } + } + + public void Clear(T storable) + where T : IStorable + { + string path = AbsolutePath(storable.StoragePath); + + if (!File.Exists(path)) + { + return; + } + + File.Delete(path); + } + + private string AbsolutePath(string path) + { + return Path.Combine(osMediator.AppPersistentDataPath, path); + } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming/LocalStorage/IStorable.cs b/src/ChainSafe.Gaming/LocalStorage/IStorable.cs new file mode 100644 index 000000000..20f3a8904 --- /dev/null +++ b/src/ChainSafe.Gaming/LocalStorage/IStorable.cs @@ -0,0 +1,9 @@ +namespace ChainSafe.Gaming.LocalStorage +{ + public interface IStorable + { + public string StoragePath { get; } + + public bool LoadOnInitialize { get; } + } +} \ No newline at end of file diff --git a/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs b/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs index 92b70b962..39a391e40 100644 --- a/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs +++ b/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs @@ -2,7 +2,7 @@ using System.Threading.Tasks; using ChainSafe.Gaming.Evm; using ChainSafe.Gaming.Evm.Contracts; -using ChainSafe.Gaming.Web3.Core; +using ChainSafe.Gaming.LocalStorage; using ChainSafe.Gaming.Web3.Core.Evm.EventPoller; using ChainSafe.Gaming.Web3.Core.Logout; using ChainSafe.Gaming.Web3.Environment; @@ -24,6 +24,7 @@ private Web3Builder() // Bind default services serviceCollection .UseEventPoller() + .AddSingleton() .AddSingleton() .AddSingleton() .AddSingleton(); diff --git a/src/ChainSafe.Gaming/Web3/Core/Web3.cs b/src/ChainSafe.Gaming/Web3/Core/Web3.cs index 7bc1275ad..452754122 100644 --- a/src/ChainSafe.Gaming/Web3/Core/Web3.cs +++ b/src/ChainSafe.Gaming/Web3/Core/Web3.cs @@ -4,6 +4,7 @@ using ChainSafe.Gaming.Evm.Contracts; using ChainSafe.Gaming.Evm.Providers; using ChainSafe.Gaming.Evm.Signers; +using ChainSafe.Gaming.LocalStorage; using ChainSafe.Gaming.Web3.Core; using ChainSafe.Gaming.Web3.Core.Evm; using ChainSafe.Gaming.Web3.Core.Logout; @@ -23,6 +24,7 @@ public class Web3 : IAsyncDisposable private readonly ITransactionExecutor? transactionExecutor; private readonly IEvmEvents? events; private readonly ILogoutManager logoutManager; + private readonly DataStorage dataStorage; private bool initialized; private bool terminated; @@ -38,6 +40,7 @@ internal Web3(ServiceProvider serviceProvider) ProjectConfig = serviceProvider.GetRequiredService(); ChainConfig = serviceProvider.GetRequiredService(); logoutManager = this.serviceProvider.GetRequiredService(); + dataStorage = this.serviceProvider.GetRequiredService(); } /// @@ -89,6 +92,14 @@ async ValueTask IAsyncDisposable.DisposeAsync() internal async ValueTask InitializeAsync() { + foreach (var storable in serviceProvider.GetServices()) + { + if (storable.LoadOnInitialize) + { + await dataStorage.Load(storable); + } + } + foreach (var lifecycleParticipant in serviceProvider.GetServices()) { await lifecycleParticipant.WillStartAsync(); @@ -122,7 +133,7 @@ public async ValueTask TerminateAsync(bool logout = false) } } - serviceProvider.Dispose(); + await serviceProvider.DisposeAsync(); terminated = true; } diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity index 7ad506231..e40ef7191 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity @@ -326,6 +326,217 @@ MonoBehaviour: gelatoApiKey: 7MFQqyGS1Iui_e_MgmFW1BfbFeJ06g8nnL2oUTlIJug_ errorPopup: {fileID: 314965761} loginButton: {fileID: 2048731599} + rememberMeToggle: {fileID: 1755680257} +--- !u!1 &482586192 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 482586193} + - component: {fileID: 482586195} + - component: {fileID: 482586194} + m_Layer: 5 + m_Name: Background + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &482586193 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482586192} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 859742331} + m_Father: {fileID: 1755680255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0.5} + m_AnchorMax: {x: 0.25, y: 0.5} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: -44, y: 30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &482586194 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482586192} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 1 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &482586195 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 482586192} + m_CullTransparentMesh: 1 +--- !u!1 &669337707 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 669337708} + - component: {fileID: 669337710} + - component: {fileID: 669337709} + m_Layer: 5 + m_Name: Label + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &669337708 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669337707} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 1755680255} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0.25, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: -75, y: 0} + m_SizeDelta: {x: -150, y: -30} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &669337709 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669337707} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: f4688fdb7df04437aeb418b961361dc5, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_text: Remember me + m_isRightToLeft: 0 + m_fontAsset: {fileID: 11400000, guid: b137a8f4bbcdafc439306c89bed89215, type: 2} + m_sharedMaterial: {fileID: 7077468325371864899, guid: b137a8f4bbcdafc439306c89bed89215, type: 2} + m_fontSharedMaterials: [] + m_fontMaterial: {fileID: 0} + m_fontMaterials: [] + m_fontColor32: + serializedVersion: 2 + rgba: 4294111986 + m_fontColor: {r: 0.95, g: 0.95, b: 0.95, a: 1} + m_enableVertexGradient: 0 + m_colorMode: 3 + m_fontColorGradient: + topLeft: {r: 1, g: 1, b: 1, a: 1} + topRight: {r: 1, g: 1, b: 1, a: 1} + bottomLeft: {r: 1, g: 1, b: 1, a: 1} + bottomRight: {r: 1, g: 1, b: 1, a: 1} + m_fontColorGradientPreset: {fileID: 0} + m_spriteAsset: {fileID: 0} + m_tintAllSprites: 0 + m_StyleSheet: {fileID: 0} + m_TextStyleHashCode: -1183493901 + m_overrideHtmlColors: 0 + m_faceColor: + serializedVersion: 2 + rgba: 4294967295 + m_fontSize: 18 + m_fontSizeBase: 18 + m_fontWeight: 400 + m_enableAutoSizing: 0 + m_fontSizeMin: 8 + m_fontSizeMax: 36 + m_fontStyle: 0 + m_HorizontalAlignment: 1 + m_VerticalAlignment: 512 + m_textAlignment: 65535 + m_characterSpacing: 0 + m_wordSpacing: 0 + m_lineSpacing: 0 + m_lineSpacingMax: 0 + m_paragraphSpacing: 0 + m_charWidthMaxAdj: 0 + m_enableWordWrapping: 0 + m_wordWrappingRatios: 0.4 + m_overflowMode: 0 + m_linkedTextComponent: {fileID: 0} + parentLinkedComponent: {fileID: 0} + m_enableKerning: 1 + m_enableExtraPadding: 0 + checkPaddingRequired: 0 + m_isRichText: 1 + m_parseCtrlCharacters: 1 + m_isOrthographic: 1 + m_isCullingEnabled: 0 + m_horizontalMapping: 0 + m_verticalMapping: 0 + m_uvLineOffset: 0 + m_geometrySortingOrder: 0 + m_IsTextObjectScaleStatic: 0 + m_VertexBufferAutoSizeReduction: 0 + m_useMaxVisibleDescender: 1 + m_pageToDisplay: 1 + m_margin: {x: 0, y: 0, z: 0, w: 0} + m_isUsingLegacyAnimationComponent: 0 + m_isVolumetricText: 0 + m_hasFontAssetChanged: 0 + m_baseMaterial: {fileID: 0} + m_maskOffset: {x: 0, y: 0, z: 0, w: 0} +--- !u!222 &669337710 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 669337707} + m_CullTransparentMesh: 1 --- !u!1 &740974330 GameObject: m_ObjectHideFlags: 0 @@ -632,6 +843,81 @@ RectTransform: m_AnchoredPosition: {x: 0, y: -25} m_SizeDelta: {x: -50, y: -50} m_Pivot: {x: 0.5, y: 1} +--- !u!1 &859742330 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 859742331} + - component: {fileID: 859742333} + - component: {fileID: 859742332} + m_Layer: 5 + m_Name: Checkmark + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &859742331 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859742330} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 482586193} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 1, y: 1} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &859742332 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859742330} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Material: {fileID: 0} + m_Color: {r: 1, g: 1, b: 1, a: 1} + m_RaycastTarget: 1 + m_RaycastPadding: {x: 0, y: 0, z: 0, w: 0} + m_Maskable: 1 + m_OnCullStateChanged: + m_PersistentCalls: + m_Calls: [] + m_Sprite: {fileID: 10901, guid: 0000000000000000f000000000000000, type: 0} + m_Type: 0 + m_PreserveAspect: 1 + m_FillCenter: 1 + m_FillMethod: 4 + m_FillAmount: 1 + m_FillClockwise: 1 + m_FillOrigin: 0 + m_UseSpriteMesh: 0 + m_PixelsPerUnitMultiplier: 1 +--- !u!222 &859742333 +CanvasRenderer: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 859742330} + m_CullTransparentMesh: 1 --- !u!1 &893732502 GameObject: m_ObjectHideFlags: 0 @@ -724,6 +1010,65 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} +--- !u!1 &911080506 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 911080508} + - component: {fileID: 911080507} + m_Layer: 0 + m_Name: _countly + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &911080507 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911080506} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3830ecbe0f874710af3c6377b4540a81, type: 3} + m_Name: + m_EditorClassIdentifier: + Auth: + ServerUrl: + AppKey: + DeviceId: + Config: + Salt: + EnablePost: 0 + EnableTestMode: 0 + EnableConsoleLogging: 0 + NotificationMode: 0 + SessionDuration: 0 + EventQueueThreshold: 0 + StoredRequestLimit: 0 + TotalBreadcrumbsAllowed: 0 + EnableAutomaticCrashReporting: 0 +--- !u!4 &911080508 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 911080506} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &956735923 GameObject: m_ObjectHideFlags: 0 @@ -755,6 +1100,7 @@ RectTransform: m_ConstrainProportionsScale: 0 m_Children: - {fileID: 2048731596} + - {fileID: 1755680255} m_Father: {fileID: 740974331} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} m_AnchorMin: {x: 0, y: 0} @@ -1447,6 +1793,113 @@ CanvasRenderer: m_PrefabAsset: {fileID: 0} m_GameObject: {fileID: 1572088722} m_CullTransparentMesh: 1 +--- !u!1 &1755680254 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1755680255} + - component: {fileID: 1755680257} + - component: {fileID: 1755680256} + m_Layer: 5 + m_Name: Toggle - Remember Me + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!224 &1755680255 +RectTransform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755680254} + m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: + - {fileID: 482586193} + - {fileID: 669337708} + m_Father: {fileID: 956735924} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} + m_AnchorMin: {x: 0, y: 0} + m_AnchorMax: {x: 0, y: 0} + m_AnchoredPosition: {x: 0, y: 0} + m_SizeDelta: {x: 0, y: 0} + m_Pivot: {x: 0.5, y: 0.5} +--- !u!114 &1755680256 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755680254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 306cc8c2b49d7114eaa3623786fc2126, type: 3} + m_Name: + m_EditorClassIdentifier: + m_IgnoreLayout: 0 + m_MinWidth: -1 + m_MinHeight: -1 + m_PreferredWidth: -1 + m_PreferredHeight: 50 + m_FlexibleWidth: -1 + m_FlexibleHeight: -1 + m_LayoutPriority: 1 +--- !u!114 &1755680257 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1755680254} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 9085046f02f69544eb97fd06b6048fe2, type: 3} + m_Name: + m_EditorClassIdentifier: + m_Navigation: + m_Mode: 3 + m_WrapAround: 0 + m_SelectOnUp: {fileID: 0} + m_SelectOnDown: {fileID: 0} + m_SelectOnLeft: {fileID: 0} + m_SelectOnRight: {fileID: 0} + m_Transition: 1 + m_Colors: + m_NormalColor: {r: 1, g: 1, b: 1, a: 1} + m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1} + m_SelectedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1} + m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} + m_ColorMultiplier: 1 + m_FadeDuration: 0.1 + m_SpriteState: + m_HighlightedSprite: {fileID: 0} + m_PressedSprite: {fileID: 0} + m_SelectedSprite: {fileID: 0} + m_DisabledSprite: {fileID: 0} + m_AnimationTriggers: + m_NormalTrigger: Normal + m_HighlightedTrigger: Highlighted + m_PressedTrigger: Pressed + m_SelectedTrigger: Selected + m_DisabledTrigger: Disabled + m_Interactable: 1 + m_TargetGraphic: {fileID: 482586194} + toggleTransition: 1 + graphic: {fileID: 859742332} + m_Group: {fileID: 0} + onValueChanged: + m_PersistentCalls: + m_Calls: [] + m_IsOn: 0 --- !u!1 &1812470005 GameObject: m_ObjectHideFlags: 0 @@ -1749,3 +2202,4 @@ SceneRoots: - {fileID: 1290034541} - {fileID: 433476714} - {fileID: 2066044329} + - {fileID: 911080508} diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs index c6230a0c0..f10e978a1 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs @@ -1,9 +1,11 @@ using System.Collections; using System.Collections.Generic; +using ChainSafe.Gaming; using ChainSafe.Gaming.HyperPlay; using ChainSafe.Gaming.UnityPackage.Common; using ChainSafe.Gaming.WalletConnect; using ChainSafe.Gaming.Web3.Build; +using Microsoft.Extensions.DependencyInjection; using Scenes; using UnityEngine; using UnityEngine.UI; @@ -14,11 +16,34 @@ public class HyperPlayLoginProvider : LoginProvider, IWeb3BuilderServiceAdapter { [SerializeField] private Button loginButton; + [SerializeField] private Toggle rememberMeToggle; + + private bool _storedSessionAvailable; - protected override void Initialize() + protected override async void Initialize() { base.Initialize(); + + _storedSessionAvailable = false; + await using (var lightWeb3 = await HyperPlayWeb3.BuildLightweightWeb3()) + { + var data = lightWeb3.ServiceProvider.GetService(); + + _storedSessionAvailable = data.RememberSession; + } + + if (_storedSessionAvailable) // auto-login + { + Debug.Log("Proceeding with auto-login."); + await TryLogin(); + } + + else + { + Debug.Log("No stored session available."); + } + loginButton.onClick.AddListener(OnLoginClicked); } @@ -26,7 +51,10 @@ public Web3Builder ConfigureServices(Web3Builder web3Builder) { return web3Builder.Configure(services => { - services.UseHyperPlay().UseHyperPlaySigner().UseHyperPlayTransactionExecutor(); + services.UseHyperPlay(new HyperPlayConfig + { + RememberSession = rememberMeToggle.isOn || _storedSessionAvailable, + }).UseHyperPlaySigner().UseHyperPlayTransactionExecutor(); }); } From 98bce4e8f07e9551eb5b71b430b024a43ee1c211 Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 10:23:43 +0300 Subject: [PATCH 2/8] new HyperPlay package with samples --- .../Runtime.meta | 8 +++++ .../Runtime/Libraries.meta | 8 +++++ .../Libraries/ChainSafe.Gaming.HyperPlay.dll | Bin 0 -> 17408 bytes .../ChainSafe.Gaming.HyperPlay.dll.meta | 33 ++++++++++++++++++ .../Runtime/Scripts.meta | 8 +++++ .../Runtime/Scripts/HyperPlayWeb3.cs | 24 +++++++++++++ .../Runtime/Scripts/HyperPlayWeb3.cs.meta | 11 ++++++ ...insafe.web3-unity.hyperplay.runtime.asmdef | 16 +++++++++ ...e.web3-unity.hyperplay.runtime.asmdef.meta | 7 ++++ .../package.json | 33 ++++++++++++++++++ .../package.json.meta | 7 ++++ scripts/data/published_dependencies.txt | 5 +-- .../LocalStorage/DataStorage.cs | 11 ++++-- .../Samples/web3.unity SDK HyperPlay.meta | 8 +++++ .../web3.unity SDK HyperPlay/1.0.0.meta | 8 +++++ .../1.0.0/HyperPlay Usage Sample.meta | 8 +++++ .../1.0.0/HyperPlay Usage Sample/Scenes.meta | 8 +++++ .../Scenes/SampleLogin - HyperPlay.unity | 0 .../Scenes/SampleLogin - HyperPlay.unity.meta | 0 .../1.0.0/HyperPlay Usage Sample/Scripts.meta | 8 +++++ .../Scripts}/HyperPlayLoginProvider.cs | 0 .../Scripts}/HyperPlayLoginProvider.cs.meta | 0 src/UnitySampleProject/Packages/manifest.json | 2 ++ .../Packages/packages-lock.json | 25 +++++++++++-- 24 files changed, 230 insertions(+), 8 deletions(-) create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayWeb3.cs create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayWeb3.cs.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef.meta create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/package.json create mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/package.json.meta create mode 100644 src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay.meta create mode 100644 src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0.meta create mode 100644 src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample.meta create mode 100644 src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes.meta rename src/UnitySampleProject/Assets/Samples/{web3.unity SDK/2.5.0/Web3.Unity Samples => web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample}/Scenes/SampleLogin - HyperPlay.unity (100%) rename src/UnitySampleProject/Assets/Samples/{web3.unity SDK/2.5.0/Web3.Unity Samples => web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample}/Scenes/SampleLogin - HyperPlay.unity.meta (100%) create mode 100644 src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts.meta rename src/UnitySampleProject/Assets/Samples/{web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes => web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts}/HyperPlayLoginProvider.cs (100%) rename src/UnitySampleProject/Assets/Samples/{web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes => web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts}/HyperPlayLoginProvider.cs.meta (100%) diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime.meta new file mode 100644 index 000000000..0c74a21f0 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b570d148b322940459375542e91ef7af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries.meta new file mode 100644 index 000000000..ad8be91f0 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 6aa4f545932270b48acdc4de1df73b2d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll new file mode 100644 index 0000000000000000000000000000000000000000..186c7818eb690fb9590b1451681a654539be3301 GIT binary patch literal 17408 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 BuildLightweightWeb3() + { + var projectConfig = ProjectConfigUtilities.Load(); + + return new Web3Builder(projectConfig).Configure(services => + { + services.UseUnityEnvironment(); + services.UseRpcProvider(); + services.UseHyperPlay(new HyperPlayConfig()); + }).LaunchAsync(); + } + } +} diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayWeb3.cs.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayWeb3.cs.meta new file mode 100644 index 000000000..1318e4172 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Scripts/HyperPlayWeb3.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7fd38b3373d04c6408afb61a39c01a29 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef new file mode 100644 index 000000000..6944e4657 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef @@ -0,0 +1,16 @@ +{ + "name": "io.chainsafe.web3-unity.hyperplay.runtime", + "rootNamespace": "ChainSafe.Gaming.HyperPlay", + "references": [ + "GUID:5426c6b788696eb4c88f4198b59839eb" + ], + "includePlatforms": [], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [], + "versionDefines": [], + "noEngineReferences": false +} \ No newline at end of file diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef.meta b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef.meta new file mode 100644 index 000000000..f7631ab52 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/io.chainsafe.web3-unity.hyperplay.runtime.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 2de764c29718da4449911a17cfdde636 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/package.json b/Packages/io.chainsafe.web3-unity.hyperplay/package.json new file mode 100644 index 000000000..3fba0de92 --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/package.json @@ -0,0 +1,33 @@ +{ + "name": "io.chainsafe.web3-unity.hyperplay", + "version": "1.0.0", + "displayName": "web3.unity SDK HyperPlay", + "description": "This package includes the integration of HyperPlay, which you can use with our Gaming SDK.", + "license": "LGPL-3.0-only", + "licensesUrl": "https://github.com/ChainSafe/web3.unity/blob/main/LICENSE", + "documentationUrl": "https://docs.gaming.chainsafe.io/", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "3.0.2", + "io.chainsafe.web3-unity": "2.5.0" + }, + "keywords": [ + "web3", + "ethereum", + "evm", + "blockchain", + "nft", + "hyperplay" + ], + "author": { + "name": "ChainSafe Gaming", + "email": "bd@chainsafe.io", + "url": "https://gaming.chainsafe.io/" + }, + "samples": [ + { + "displayName": "HyperPlay Usage Sample", + "description": "Contains example of integration and usage of HyperPlay functionality.", + "path": "Samples~/Web3.Unity HyperPlay Samples" + } + ] +} \ No newline at end of file diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/package.json.meta b/Packages/io.chainsafe.web3-unity.hyperplay/package.json.meta new file mode 100644 index 000000000..2829a4dde --- /dev/null +++ b/Packages/io.chainsafe.web3-unity.hyperplay/package.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 3536bd3009300f64ca0dd11bfea1da39 +PackageManifestImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/scripts/data/published_dependencies.txt b/scripts/data/published_dependencies.txt index b2fdea8e8..95a06a814 100644 --- a/scripts/data/published_dependencies.txt +++ b/scripts/data/published_dependencies.txt @@ -1,2 +1,3 @@ -Packages/io.chainsafe.web3-unity/Runtime/Libraries/:ADRaffy.ENSNormalize;Nethereum.Model;BouncyCastle.Crypto;Nethereum.RLP;ChainSafe.Gaming.Debugging;Nethereum.RPC;ChainSafe.Gaming.Gelato;ChainSafe.Gaming.SygmaClient;Nethereum.Signer.EIP712;ChainSafe.Gaming.InProcessSigner;Nethereum.Signer;ChainSafe.Gaming.InProcessTransactionExecutor;Nethereum.Util;ChainSafe.Gaming.Unity.ThirdParty;Nethereum.Web3;ChainSafe.Gaming.Unity;System.Buffers;ChainSafe.Gaming.WalletConnect;System.Memory;ChainSafe.Gaming;System.Numerics.Vectors;Microsoft.Bcl.AsyncInterfaces;System.Reactive;Microsoft.Extensions.DependencyInjection.Abstractions;System.Runtime.CompilerServices.Unsafe;Microsoft.Extensions.DependencyInjection;System.Runtime.InteropServices.WindowsRuntime;Microsoft.Extensions.Logging.Abstractions;System.Security.Cryptography.Cng;Microsoft.IdentityModel.Abstractions;System.Text.Encodings.Web;Microsoft.IdentityModel.Logging;System.Text.Json;Microsoft.IdentityModel.Tokens;System.Threading.Channels;NBitcoin;System.Threading.Tasks.Extensions;Nethereum.ABI;WalletConnectSharp.Auth;Nethereum.Accounts;WalletConnectSharp.Common;WalletConnectSharp.Events;Nethereum.BlockchainProcessing;WalletConnectSharp.Core;Nethereum.Contracts;WalletConnectSharp.Crypto;Nethereum.Hex;Nethereum.JsonRpc.Client;WalletConnectSharp.Network.Websocket;Nethereum.JsonRpc.IpcClient;WalletConnectSharp.Network;Nethereum.JsonRpc.RpcClient;WalletConnectSharp.Sign;Nethereum.KeyStore;WalletConnectSharp.Storage;Nethereum.Merkle.Patricia;WalletConnectSharp.Web3Wallet;Nethereum.Merkle;Websocket.Client;Nethereum.Metamask;Nethereum.Siwe.Core;Nethereum.Siwe;Nethereum.UI;Nethereum.Unity.Metamask;Nethereum.Unity;ChainSafe.Gaming.MetaMask;ChainSafe.Gaming.MetaMask.Unity;ChainSafe.Gaming.InProcessTransactionExecutor.Unity;ChainSafe.Gaming.Marketplace;ChainSafe.Gaming.HyperPlay -Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/:Chainsafe.Gaming.Chainlink;ChainSafe.Gaming.Lootboxes.Chainlink \ No newline at end of file +Packages/io.chainsafe.web3-unity/Runtime/Libraries/:ADRaffy.ENSNormalize;Nethereum.Model;BouncyCastle.Crypto;Nethereum.RLP;ChainSafe.Gaming.Debugging;Nethereum.RPC;ChainSafe.Gaming.Gelato;ChainSafe.Gaming.SygmaClient;Nethereum.Signer.EIP712;ChainSafe.Gaming.InProcessSigner;Nethereum.Signer;ChainSafe.Gaming.InProcessTransactionExecutor;Nethereum.Util;ChainSafe.Gaming.Unity.ThirdParty;Nethereum.Web3;ChainSafe.Gaming.Unity;System.Buffers;ChainSafe.Gaming.WalletConnect;System.Memory;ChainSafe.Gaming;System.Numerics.Vectors;Microsoft.Bcl.AsyncInterfaces;System.Reactive;Microsoft.Extensions.DependencyInjection.Abstractions;System.Runtime.CompilerServices.Unsafe;Microsoft.Extensions.DependencyInjection;System.Runtime.InteropServices.WindowsRuntime;Microsoft.Extensions.Logging.Abstractions;System.Security.Cryptography.Cng;Microsoft.IdentityModel.Abstractions;System.Text.Encodings.Web;Microsoft.IdentityModel.Logging;System.Text.Json;Microsoft.IdentityModel.Tokens;System.Threading.Channels;NBitcoin;System.Threading.Tasks.Extensions;Nethereum.ABI;WalletConnectSharp.Auth;Nethereum.Accounts;WalletConnectSharp.Common;WalletConnectSharp.Events;Nethereum.BlockchainProcessing;WalletConnectSharp.Core;Nethereum.Contracts;WalletConnectSharp.Crypto;Nethereum.Hex;Nethereum.JsonRpc.Client;WalletConnectSharp.Network.Websocket;Nethereum.JsonRpc.IpcClient;WalletConnectSharp.Network;Nethereum.JsonRpc.RpcClient;WalletConnectSharp.Sign;Nethereum.KeyStore;WalletConnectSharp.Storage;Nethereum.Merkle.Patricia;WalletConnectSharp.Web3Wallet;Nethereum.Merkle;Websocket.Client;Nethereum.Metamask;Nethereum.Siwe.Core;Nethereum.Siwe;Nethereum.UI;Nethereum.Unity.Metamask;Nethereum.Unity;ChainSafe.Gaming.MetaMask;ChainSafe.Gaming.MetaMask.Unity;ChainSafe.Gaming.InProcessTransactionExecutor.Unity;ChainSafe.Gaming.Marketplace +Packages/io.chainsafe.web3-unity.lootboxes/Chainlink/Runtime/Libraries/:Chainsafe.Gaming.Chainlink;ChainSafe.Gaming.Lootboxes.Chainlink +Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/:ChainSafe.Gaming.HyperPlay \ No newline at end of file diff --git a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs index d22049cd7..9a0119126 100644 --- a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs +++ b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs @@ -28,7 +28,7 @@ public async Task Save(T storable, bool createFile = true) { var path = AbsolutePath(storable.StoragePath); - if (!createFile && !File.Exists(path)) + if (!createFile && !Exists(path)) { return; } @@ -44,7 +44,7 @@ public async Task Load(T storable) { var path = AbsolutePath(storable.StoragePath); - if (!File.Exists(path)) + if (!Exists(path)) { return; } @@ -70,7 +70,7 @@ public void Clear(T storable) { string path = AbsolutePath(storable.StoragePath); - if (!File.Exists(path)) + if (!Exists(path)) { return; } @@ -78,6 +78,11 @@ public void Clear(T storable) File.Delete(path); } + private bool Exists(string path) + { + return File.Exists(path); + } + private string AbsolutePath(string path) { return Path.Combine(osMediator.AppPersistentDataPath, path); diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay.meta new file mode 100644 index 000000000..e31cd1d39 --- /dev/null +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 75427b31abfe3df4cac0a541e61a77fd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0.meta new file mode 100644 index 000000000..2a6c792ca --- /dev/null +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9e3d4519bbfe0064b9144f4635cafd27 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample.meta new file mode 100644 index 000000000..2d377d24b --- /dev/null +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c08bb86b42cf5254096d24c0240b9027 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes.meta new file mode 100644 index 000000000..be3471699 --- /dev/null +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d14fc9e97141fe548bdeadfc8bfa5fb0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity similarity index 100% rename from src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity rename to src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity.meta similarity index 100% rename from src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scenes/SampleLogin - HyperPlay.unity.meta rename to src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity.meta diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts.meta new file mode 100644 index 000000000..634ad428e --- /dev/null +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2d9c25322424d4f41a30626fdfd56e0e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs similarity index 100% rename from src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs rename to src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs.meta b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs.meta similarity index 100% rename from src/UnitySampleProject/Assets/Samples/web3.unity SDK/2.5.0/Web3.Unity Samples/Scripts/Scenes/HyperPlayLoginProvider.cs.meta rename to src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs.meta diff --git a/src/UnitySampleProject/Packages/manifest.json b/src/UnitySampleProject/Packages/manifest.json index 950d15899..48ca6894c 100644 --- a/src/UnitySampleProject/Packages/manifest.json +++ b/src/UnitySampleProject/Packages/manifest.json @@ -10,9 +10,11 @@ "com.unity.textmeshpro": "3.0.6", "com.unity.timeline": "1.7.6", "com.unity.toolchain.macos-arm64-linux-x86_64": "2.0.0", + "com.unity.toolchain.win-x86_64-linux-x86_64": "2.0.9", "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.9.4", "io.chainsafe.web3-unity": "file:../../../Packages/io.chainsafe.web3-unity", + "io.chainsafe.web3-unity.hyperplay": "file:C:/Users/robel/Documents/ChainSafe/Code/Main/web3.unity/Packages/io.chainsafe.web3-unity.hyperplay", "io.chainsafe.web3-unity.lootboxes": "file:../../../Packages/io.chainsafe.web3-unity.lootboxes", "io.chainsafe.web3-unity.ramp": "file:../../../Packages/io.chainsafe.web3-unity.ramp", "io.chainsafe.web3-unity.web3auth": "file:../../../Packages/io.chainsafe.web3-unity.web3auth", diff --git a/src/UnitySampleProject/Packages/packages-lock.json b/src/UnitySampleProject/Packages/packages-lock.json index 5e56dcb7c..06561f818 100644 --- a/src/UnitySampleProject/Packages/packages-lock.json +++ b/src/UnitySampleProject/Packages/packages-lock.json @@ -63,18 +63,18 @@ "url": "https://packages.unity.com" }, "com.unity.sysroot": { - "version": "2.0.7", + "version": "2.0.10", "depth": 1, "source": "registry", "dependencies": {}, "url": "https://packages.unity.com" }, "com.unity.sysroot.linux-x86_64": { - "version": "2.0.6", + "version": "2.0.9", "depth": 1, "source": "registry", "dependencies": { - "com.unity.sysroot": "2.0.7" + "com.unity.sysroot": "2.0.10" }, "url": "https://packages.unity.com" }, @@ -120,6 +120,16 @@ }, "url": "https://packages.unity.com" }, + "com.unity.toolchain.win-x86_64-linux-x86_64": { + "version": "2.0.9", + "depth": 0, + "source": "registry", + "dependencies": { + "com.unity.sysroot": "2.0.10", + "com.unity.sysroot.linux-x86_64": "2.0.9" + }, + "url": "https://packages.unity.com" + }, "com.unity.ugui": { "version": "1.0.0", "depth": 0, @@ -148,6 +158,15 @@ "com.unity.textmeshpro": "3.0.6" } }, + "io.chainsafe.web3-unity.hyperplay": { + "version": "file:C:/Users/robel/Documents/ChainSafe/Code/Main/web3.unity/Packages/io.chainsafe.web3-unity.hyperplay", + "depth": 0, + "source": "local", + "dependencies": { + "com.unity.nuget.newtonsoft-json": "3.0.2", + "io.chainsafe.web3-unity": "2.5.0" + } + }, "io.chainsafe.web3-unity.lootboxes": { "version": "file:../../../Packages/io.chainsafe.web3-unity.lootboxes", "depth": 0, From 16ecbfc911c8f10a975f6c8df6bbd6f47cd1c511 Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 13:01:25 +0300 Subject: [PATCH 3/8] Cleanup and Added documentation --- .../Libraries/ChainSafe.Gaming.HyperPlay.dll | Bin 17408 -> 0 bytes .../ChainSafe.Gaming.HyperPlay.dll.meta | 33 --------- .../Runtime/Scripts/HyperPlayWeb3.cs | 15 +++- .../Scripts/WalletConnect/HyperPlayWeb3.cs | 27 ------- .../WalletConnect/HyperPlayWeb3.cs.meta | 11 --- .../HyperPlayConfig.cs | 9 ++- .../HyperPlayData.cs | 3 + .../HyperPlayExtensions.cs | 2 - .../IHyperPlayConfig.cs | 11 ++- .../IHyperPlayData.cs | 10 +++ .../LocalStorage/DataStorage.cs | 69 +++++++++++++++--- .../LocalStorage/IStorable.cs | 9 +++ src/ChainSafe.Gaming/Web3/Core/Web3.cs | 8 +- .../Scripts/HyperPlayLoginProvider.cs | 8 +- src/UnitySampleProject/Packages/manifest.json | 2 +- .../Packages/packages-lock.json | 2 +- 16 files changed, 112 insertions(+), 107 deletions(-) delete mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll delete mode 100644 Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll.meta delete mode 100644 Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs delete mode 100644 Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll b/Packages/io.chainsafe.web3-unity.hyperplay/Runtime/Libraries/ChainSafe.Gaming.HyperPlay.dll deleted file mode 100644 index 186c7818eb690fb9590b1451681a654539be3301..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17408 zcmeHueRNdUb??6CUfubSG}6od{z3ApiUyj;6=VmI+>(&sJ*g3~@+*X^rWFK^X$ zpYi+ceeY;S2xs}_y}!D8;qJ5dKKtym&p!L?bMBq19d~?zbRsfvfA}HMS(JQj68M|J zII08JJrkfm@x3zdthW7?c|C*4Tx2+#8OX+lBJo%{oykY~?MSwejwI8O_FdhPp-jS# zR#*EMx~jW6h_-7w-SDMf{Ib~FMVcR})S8Lbf#Y?!-`j^Wg1ZklQLW(0v6~rezg(vQ z!RJe-zI$1e|CdUaWEQRj^zLG$k7(h95@xv9I8hbQO}7*E6nP(~j7*p=(q7Qp%GyQq z_VGOEAFKsHos8AB8y%X?VsKQW zTC!1D9w8x)R!g2y0n=)LDC~nGLm6WbH&n$Kio?VRjoO!AmzF9O~e{|6dWx)~VqZx1- zmxP;5T7j{_$LL2ltYvJL)3Bqgq1$ND4D)`7&T(5u#X~uy0Jv$wX84b7Ud}edgJLtB zCN|HL@`S^-0*=j0SuL#O)(OABWjyH^6=v7beG^L4(Y=y&gD<+V6j178aFX zK8?UZvWiy9m^7us!^`BHbAba$|0)GzW{?(_7x}?o55`-g_s&;9>I9cp>JZFjL-AOfpvh_l z$i4?loNhClxgT%HYqbG!coux@4;wjzv)|eR5HvDd8Q;eIieQD+2_$nfgIgGE2XKrp z(bf(yn<}%*G#bwB1b&xi6br$~AV-;NKaE**oHip90mH#v9rJ~Oz;&HGBZK*G%ydCX z*cb9yyMZj-sAf)h#5aaSS@eicS(t&w3rE!`bHhG$g3Bv)m@2I_vp#DN)VLFL;fAnZ zU3bNam1#1+YMM-y6EQ)*)eY$j^M8|&*Xn@`mJPMm1K`4NXUW=GyP0O~|}bhc&H2X2^4;4(m>ZJZkiI2v}IgV5-r5 zOhiEhJr>d^;y>iQQs-w;uV)mBjm#Y^vXDi*oKMZ5c|R+)J_&xcXB0sXU(58sbkmpp zGG;BaAC+N$$Zs8Bggt*J5O-Ozr7Gwf>*ex9A7BWcMS9 zsUHPz>xi?UQ9!bo(-d}*GfZ)qRbA+ypkZNMHdb9&cRf(Vbz`_Pdk)rxDlMdQ)3Tw% ziLY=K&yLt7_5`b}gQ&bPZ8F6(6&aDQFnkYJQ3J|(D6f|-(V4qu@HXN`w-j;a zt`E|>HOLxZWwTCSMI9Cz<_@hnS1mwMX*R9%$exf%LR3PxDx{pqT`y^grInYrMFcJ) z-Uunh`+ehuU22rMRf;#m^0?(DP{MJ0VMaBNN|Z=zpLLko;mKSpC5CFqkUXOPVVV(f z#=$-6){s=oIL<%l{Z%E#L`#sTLUAzks2rSZZ( zHOky-b%Kksbi_@dWD_)2dAyvz%nP%^2AeM0L=9$p7y{0SN^I*0m~cH6$8_j8&2q=Y zz3W!i5#W8K2I~&nBF3~BRTvXi492u}nuacC-1v1AYLqv@Ob(5#JV4WQhvON=`YoD`l}TrgmoY|I?5;A#C^Jr!F~*qjpUN1YV#atG<0Rut&Fi!O%4_fLvYLBX z^wVXGdztYW04!aM&&Ym&CNtag*QRaU9{{5-V2v<>FoE|3$f%I&tHO1 z)hJi+UdUzHjBz_?+5}BuBfCh^FxIDmjo?1k9m?(i2NPz4D&~5&D`;>cLh#K&+W8$+ zWTCjQv*VRj;@S0 zM_Za(maheY=ZX~IX$)}zCbtTQkS4~v^Vwv206|5xW**V~h{FYYyXnu78&FLPw(jk0 zNBJ|*3%#H>r!xI4j0>XLZ8ILN^aVh?ueH#0Fo1U9#^?!tpf$L$B&ZrU%%odz!{3~T zL_d5dIgRDHExLfE{M?8AO&9(oGdNcud-2 z*7{6(v4Y_}0#6I95dM1x^Xmh;*Q6gAU##@gkM)y!fEp`K`TR8B_nPw4+rHHSKPAEU z)9(h(0RIc~SFmx8e;Zn@Gq`Q7*w9aJ!=AtNFq~^Lf3eiQr?YLJC9%-Y@E#x6CWUi* z#iziz8@M0dI1@1G0Q3aN_OT65`#)Rlr{jT}3_m^O-&^CSe}p|IJ&#`ebeDIr*H0EL zhPJJu`A$GTHC8hJF=GqbhHJJ|hv;)PeduKqalZ$=3|GKo0U9$;VY)OA_m!!7O--lm zRd0Hy(^}t~komc;1D{pNoHJE3tNe7{H&|`buWNMZ|8dpL@Nk<)_s*tg{g3%)(;dcR zev`h2Ugpx*Jg=bkUGuS;+4O$RV}3u~=KB>g`M(5C`9d@fd*;(;{m;RwhvKV@ly^<|Gp8`6{Li#1hx}{4dvZg2Ko^ z{S~NHh_H}QZIw(_(rkJJbr+$Nqp@D71JKFTb>xH2y!Wi{2&e@@8I?>05WQS?eGOAJ zI2$pwOsF6=k`AgGRv)1-EfWf708n#ixllZyBiOB5gnCz~MYKw&7lc}jXIqUr)dzYJ zKB6kLd34z%V;;_124F$=0)8b>1^6?w7Vv%FG()4iMUwG(biqFhoPW?NG>v9~uhE~W zx!|l&^8q#C98zA*q(3vN0Ppf&ZJ^T5-QmQNPg@fqUqZ??La& zu6y;oswI~{ODb}Ls(=PQFftgCD z`(5g_KrOP*Lqa({81%4EU!pf_h7E&Wb*UfwM_~6wm)cZ0VtDACiFV_Lmm>2B*Ne0u zuo77&?oy3`VJ$!>Txy;-3hF09aerShYUzSdmwex@o~eR#NvM1U;i?mi*I+SUD|0QOkZ-T`yp9JkGa&bnqg3H3dQ|>%fKTGvO8<}f%mL2 zgKiP(Mc=={pB&A6y;#j2EK%&i62*1AEAjPWHP@9W_AU;Ka=lp1-knW*q=(OVpU`Hi zIdq3hJ&m6A+i zdw&kT#Fiy7|;&mFnhG!lk%w0o7w$FSc7iO)kZC3+bJ*I-H^TxQHIOZV|0%Dz#e#RHJX2 zSHtbtNEPP_)G}U#%u({RrXzdclz{BPJL}KDH)*+_B_rS~tYyaEm$r`n=fT(L6t-eT z4$id-8HV|ZHKu0PE;)1%Hcp z2Hql`>7d3k-w}8Yuon9`b6(PZt>)3I+QYsm@P~by=p4PN-$rj~r+vM2S!>Y;g?|@4 z0QraUR`{&(ZNRqz=Kvq~yhwjQ|IPOkdX>K8d7Y+7Z9TH`yNGknto4#>>m}FLOAekU zZKp}w5$&wepp9s(ZA5$AV`=YcoJkgM)j(W9wF zwP&=IblLv{Z9ToFy{uKybJ|aVCjyr=pZe?Sx3!?sYcFfYb*|Lte!_cE-3{!X;2 zg-@O|Th*)R>t^+y^z|P4(%`Xi->s^O(t!hjJTE=slOFL^kNB!beDwrzR@tqzz?an{ z^i<8))P86?rxK#A2l4U~)gyjR$w(72mOOpgxTNh?!GO|v6mM%O=`kferliN+8fWe! z8vEyn#`YZ1(y;A_WQ5%sXZaDS9g*4*sU4Bp2ecX)X+!N{eXYiM{Q+&J7vq(<+NT(Q zK>IJgnQEWk<~b*%EJ{(yF)&iFQ+@!vBUf7oPv14g<}Z9(3AK-&wMKhSzb z<`Xqzz_--gr#HzMN7P}@W$mPT+51iXewoJy#TyUG*qdaeO)}CZ8EJ&#^a0Kk45K(Z zF$|Nch$25%0xqB>fQ{4w*g~U#H_}%D+vst?Tj*)PZsC6taFgh171&9Kp)DqOQt*33 z{||+8Q6OpDZ$x0Lz&?#_NNV4}>2qB0-vQp`IW71jBJ%_|2RzRS{=C4Kz&Yf(sO9Lb ziZ_JwcLM)j8-=#FP+Rb5iu=+9`qVe*q$i?swAh>{oCN|~1-1$76F4sLG$aq35j{sw znSFron0>}qp{>tgo#O&e3+J@pKNNUTI2Q${3K?kyw~7e9NnoFF`UD>rcv?881^=Ny zGJg-PHVGUT_(Or@Vg5JhBF)rp()zT5cApkkVSSOlMOVnaIx@M5e_rHPAO88_|4OW{ zDx7?)kzM!WVIPZw%7eA4(kBZmd>Nj9NzFKO!hk5eQ#0aim z>8G$u^G?st?auYKzEl)d6d5Rgt=CGkayg>Mu(w~`_7&-)T<&fCEC&d@QUO0ypeGaK zHZfii#f;o2{Vj0IWz=FUg|C<4J-~9>in0s7&0}vqiSqNHAEKME!?)4jP&a-n*+&bs z188g0VeK&8qh;uiwfXdvR-o5W-iT6HUx#dgcB$v-@6}7>(_f;1{&SkE|B}}0HQIx? zUtxc(-<95;8ORj!8xy^~%bRKa#sW%O-(_bHX0k)fUDLOmy6tQ-mP+0g>rdG|Bg1y0 zJ(iDwzq61^F^^F@e=L(dyvNQBXVN+5+!{+2?4DTeF!0vgNIK5=4m&@XNo+18Qwcj; zF4TG~mdp!ldoq_tO=mjavVzvf;_*x&o!_{sw-*$fhhoUi)rO6gCD;#?DPCCG!RWw<@eY__E5i_ z?Z(XT9877~6~mVnxohwX{i$TUHIc}o<<#o#*ik#t>c+qnrF-ln1v{6Y(oBrJde);7 zbqK|roy{Ynk0#^x&P;wY!prfP;|uYxiw=o*C~fC+`B*v;%O+@#J)DZgZE^9|Sgs3G zXG@a_g5zRmChf8vj3b~spUEOs&-+Shc&*uw^!^Wj`d{9&dO>+U7|IQSGN5HNVVJjg@FN1Qzae;!BBr{q$io5 z%to3j_d=<~&ACjvb0Ceem3Td|EKJ>kz_vN}l`5Pr?d-N>B4MXXeE7gl^ZF>Uik57F z^|#vDYgcxrIUC0~VZ>4&DTVxXFgZ}jid?A&$2G#-W2a)r1qg z-bsj4fh@c28MdG^oy^OoWK*XsBWL&&=Zx>-r4(GO6c%kG6(a~i3OO$vMO;k!_v*ql^`w*wcyIbR3V{!@OXL;~e770g5@LD&*V}vC}@5$AN&& zB)#AP+T3M(bC+u=TV)qV_E9lGaSeII-0~u3*(64$dR9*k4+{g z+D`~b7klgh9LBOE6WlmY;}ouJCR0v#&Y^E2KAkPqJ^3MZ=X-nmons(vvyX314&cCN z53s4uiPYJtvSr6E-XOT%E!`c^rS|6Ri9xumoFmVMxu;7Gk|NrZ*`7HDbrY>Rve`_Q zqH%1#9G-kUXt#6mY;u@6on`w_$8kGeU}kxz*QzfqNgNrY*b}4eJ-c!;i#RS6!>v6T z!^V=!C*u>WVyba+Hy^9So}9axAuMnzwR2_8fe)j&d7sbmFgK6nfvn%SvbQ&nZ(WOh z^$cR`%&XeObVkai_E>%}SY+ zdx9+ElqR;g>z2G=AJ0b-#z@53j^o38^u)T%ee6ULZSBXha2_{uQ&%IhU$iV7K0>0n zs6L|F3E~_L^T8RX`m8%y<>zH*&L(kqGtTBab6u0T2#CoH?1%AKo+r)OLwEIa4n%mN z^&}1i`Jsr~lexHyPRTy98StQ;BqKqE_}-ozO6EBhac;vVi_VHz=l0}5J3bOm*$6nq zeG=P59uG|U{BT<;X#*cDp&!v*`e-tnNe{8`0Fq<*gMzqa5(8(tY+f=k#)I>w)5d*# z5b+{jHg84NL?9Iz+#jAv5H3ortwJS zP@Oq`yx*1W7#c<$K6o3X5xlXnDGQjQ7^tOq%M-(!iWuGk9ikj%@Loroa~g+S0exbA@PX-M4mEbW7A-}YrU)HF$(BW^LrNZ{jrK#Nt(rB3 z7r}cNXGD0MLz^9tMOue_1HjhdZJ{=>1y~+d45DP27+^xQvSb8!Mp{MCe+H5f^u-?F z77^Em2qc|;*vf$^TJY`2ycovL^N~bLZl8pyIoXaiRl^PxMMR+==-(PM-vKDRi|0 zZUJX0=IQ{AV!l?=7~VE&8+bfCLs_waHSm~^gX`FYyeH$}{@5y(bo>LG=$1XXF@Zj>N!#VT&P|w*k^dO;2N_oIDW4dz#B+G!sKa&UA1%ZEgNdR5vmK>T9{1c z3NyriO%Y0ZJz8CGJy;%TH-D?h+-W;rYX--k|yoePrLfL^hVf4-wBf#pJY9oM9(?av&o3SC}wW+ib0|A z7nr}T-c#ufO$#&x0u2>)!4a(?z%bwqj)lfgVh*TbE}_GE2sZ>wwxJ=wqlOSh?X5z}X#4>Uqa1(8MT1Q|RGywNUNUQe`r3$IRt-xk%Say&9%{nG+@iWFp4KAa zOnI2_L30_`=>RU|?iHMe0LOg7vFH|4(d73S-q1|P@iLrE0Z#=u&WylDj}vVr$F(o? z_`RWe%w=f&m4GA1t_1@fzp4ete~xAt6aMA|^M7)=_~+zuKPx)93Qk{J30D>Ii3yPy zk>+)z^NdLkAF$Je>v4G)sB~88%p{}`UN4V^KYV5B`Q6^;CwE=??jL>YpS_Qkmd_(yOr#JvOeZrpnf6HA-H!@3z zFoWag&}t?l&-xreSitRH0>7SDnpnrFMR7vtz`qE`8jzZZsUcx34DAT*4($!?b0X&n zZv@^zga)eJ6&JvonoB-eTu;EVDn~#Z@)C#MN)EQ*N=7X~EuamOLadJoM@_#i8ym*E$BD;F9Q-rKavJ26$Zf^VBDx$J0@EhmYvJgJcb+3VaSRP|lSr{m1fthzG<(X4r*!n7D*RT3zxc9aIUC@5vE%6UKJbpV8qH*;qJCSH!)3Rpe>gJUzmakf|YL&fmbxTWpZU4&n+7&JREoye$M?o-{?hQV zhf!2gJTSVy($F4_c6=No$_}%|XV%7R|6C$d6KBuh7X~4UFP7aIlo##z3RR;D5yJ0fLk^T4!%92R&7psZz+@I+` zwBKDz`^$clz$*L=t)jz;e(K)Vx?If7=(yT#la>8e6o0`=gm3G{CpYKp zM>ug#<+I#2+_(1;{iXa?%pAt~4@YjriM|)G11IBd>cn5#?gZTlxW)OaTYA>`mn%+$ za1VSrCBDX&%K&sztII&qj$4D)7*4NS+;ep&&bWM@jQ&#j`Y@&Wk5_5um3G z{##NFHsvAZJOxbEWQa^N#_jxDiQnMi1N6+l;w?UHlE|QO1;xl6do%+^A(>RxZRziw`fN@+U0PXXZwaH+5g+>Z^mY(O?d29=+DZN z5I@=QwH$UfPuy$|f0e+V&5LXrV@Q>a^tZ7iil>|u{_%y47y7qD_kd_-j}F5#JmLZP z5PxWbFeiAB?bzk=*@tXL(N9b{p8tQf$C=kI^pk;=1$hGd|1qz3LH`@H9n80kTp%&aL!D|LwfjL?QxJo3L+k$^_JO}opmdh2O`*E)Y)r@)@-r;MF t%zZ27o1guLAd`|O){nM>W8pupfA=2f!np*4JiGSa{Yd{~fY + /// Helper class to build preconfigured Web3 clients for HyperPlay. + /// public static class HyperPlayWeb3 { - public static ValueTask BuildLightweightWeb3() + /// + /// Builds a lightweight Web3 client with basic HyperPlay functionality. + /// + /// Your HyperPlay config. + /// A lightweight version of Web3 client with basic HyperPlay functionality. + public static ValueTask BuildLightweightWeb3(IHyperPlayConfig config) { var projectConfig = ProjectConfigUtilities.Load(); @@ -17,8 +24,8 @@ public static class HyperPlayWeb3 { services.UseUnityEnvironment(); services.UseRpcProvider(); - services.UseHyperPlay(new HyperPlayConfig()); + services.UseHyperPlay(config); }).LaunchAsync(); } } -} +} \ No newline at end of file diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs deleted file mode 100644 index c49e61314..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections; -using System.Collections.Generic; -using System.Threading.Tasks; -using ChainSafe.Gaming.Evm.JsonRpc; -using ChainSafe.Gaming.HyperPlay; -using ChainSafe.Gaming.UnityPackage; -using ChainSafe.Gaming.Web3.Build; -using ChainSafe.Gaming.Web3.Unity; -using UnityEngine; - -namespace ChainSafe.Gaming -{ - public static class HyperPlayWeb3 - { - public static ValueTask BuildLightweightWeb3() - { - var projectConfig = ProjectConfigUtilities.Load(); - - return new Web3Builder(projectConfig).Configure(services => - { - services.UseUnityEnvironment(); - services.UseRpcProvider(); - services.UseHyperPlay(new HyperPlayConfig()); - }).LaunchAsync(); - } - } -} diff --git a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta b/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta deleted file mode 100644 index 1318e4172..000000000 --- a/Packages/io.chainsafe.web3-unity/Runtime/Scripts/WalletConnect/HyperPlayWeb3.cs.meta +++ /dev/null @@ -1,11 +0,0 @@ -fileFormatVersion: 2 -guid: 7fd38b3373d04c6408afb61a39c01a29 -MonoImporter: - externalObjects: {} - serializedVersion: 2 - defaultReferences: [] - executionOrder: 0 - icon: {instanceID: 0} - userData: - assetBundleName: - assetBundleVariant: diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs index 7e1e1a68d..eaf0ebd34 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayConfig.cs @@ -1,9 +1,14 @@ -using Newtonsoft.Json; - namespace ChainSafe.Gaming.HyperPlay { + /// + /// Config for a HyperPlay connection. + /// public class HyperPlayConfig : IHyperPlayConfig { + /// + /// Remember the HyperPlay session. + /// Like remember me for login. + /// public bool RememberSession { get; set; } } } \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs index 2753983b8..4822f2748 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayData.cs @@ -2,6 +2,9 @@ namespace ChainSafe.Gaming.HyperPlay { + /// + /// Concrete implementation of . + /// public class HyperPlayData : IHyperPlayData { [JsonIgnore] diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs index 9c0dba1f9..f418b75a6 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayExtensions.cs @@ -26,8 +26,6 @@ public static IWeb3ServiceCollection UseHyperPlay(this IWeb3ServiceCollection co collection.AddSingleton(); - collection.AddSingleton(); - collection.Replace(ServiceDescriptor.Singleton(typeof(IHyperPlayConfig), config)); return collection; diff --git a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs index 47f2d9786..c1019e971 100644 --- a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs +++ b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayConfig.cs @@ -1,11 +1,18 @@ -using ChainSafe.Gaming.LocalStorage; - namespace ChainSafe.Gaming.HyperPlay { + /// + /// Config for a HyperPlay connection. + /// public interface IHyperPlayConfig { + /// + /// Url for connecting to HyperPlay desktop client. + /// public string Url => "http://localhost:9680/rpc"; + /// + /// Remember a connected session. + /// public bool RememberSession { get; set; } } } \ No newline at end of file diff --git a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs index ff77d6f13..c53dad351 100644 --- a/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs +++ b/src/ChainSafe.Gaming.HyperPlay/IHyperPlayData.cs @@ -2,10 +2,20 @@ namespace ChainSafe.Gaming.HyperPlay { + /// + /// data for HyperPlay. + /// Persisted data for HyperPlay. + /// public interface IHyperPlayData : IStorable { + /// + /// Remember session from a previous connection. + /// public bool RememberSession { get; set; } + /// + /// Saved account from a previous session. + /// public string SavedAccount { get; set; } } } \ No newline at end of file diff --git a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs index 9a0119126..d61eb6bf7 100644 --- a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs +++ b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs @@ -10,19 +10,49 @@ namespace ChainSafe.Gaming.LocalStorage { /// - /// Default implementation of the component responsible for storage of WalletConnect-related data. + /// Default implementation of the component responsible for storage of persistent data. /// public class DataStorage { + private readonly IEnumerable store; private readonly IOperatingSystemMediator osMediator; private readonly ILogWriter logWriter; - public DataStorage(IOperatingSystemMediator osMediator, ILogWriter logWriter) + /// + /// Initializes a new instance of the class. + /// + /// All injected . + /// Injected . + /// Injected . + public DataStorage(IEnumerable store, IOperatingSystemMediator osMediator, ILogWriter logWriter) { + this.store = store; this.osMediator = osMediator; this.logWriter = logWriter; } + /// + /// Initialize all storable data. + /// + /// Awaitable task for Initialize operation. + public async Task Initialize() + { + foreach (var storable in store) + { + if (storable.LoadOnInitialize) + { + await Load(storable); + } + } + } + + /// + /// Save storable data to local storage. + /// + /// Storable data to be saved. + /// Create new file if file doesn't exist. + /// Type of Storable to be saved. Helps for serializing. + /// Awaitable Task for save operation. public async Task Save(T storable, bool createFile = true) where T : IStorable { @@ -33,12 +63,24 @@ public async Task Save(T storable, bool createFile = true) return; } - // try catch. - var json = JsonConvert.SerializeObject(storable); - logWriter.Log($"Saved {json}"); - await File.WriteAllTextAsync(path, json); + try + { + var json = JsonConvert.SerializeObject(storable); + + await File.WriteAllTextAsync(path, json); + } + catch (Exception e) + { + logWriter.LogError($"Failed to save {storable.StoragePath} : {e.Message} : {e}"); + } } + /// + /// Load storable data from local storage. + /// + /// Storable data to be loaded. + /// Type of Storable to be loaded. Helps for deserializing. + /// Awaitable Task for load operation. public async Task Load(T storable) where T : IStorable { @@ -46,6 +88,8 @@ public async Task Load(T storable) if (!Exists(path)) { + logWriter.LogError($"Failed to load {storable.StoragePath} : File not found."); + return; } @@ -53,25 +97,28 @@ public async Task Load(T storable) { var json = await File.ReadAllTextAsync(path); - logWriter.Log($"Loaded {json}"); - JsonConvert.PopulateObject(json, storable); } catch { - logWriter.LogError("WalletConnect local data file is corrupted. Removing.."); + logWriter.LogError($"Local data file for {storable.StoragePath} is corrupted. Removing.."); File.Delete(path); } } - public void Clear(T storable) - where T : IStorable + /// + /// Clear storable data from local storage. + /// + /// Storable data to be cleared. + public void Clear(IStorable storable) { string path = AbsolutePath(storable.StoragePath); if (!Exists(path)) { + logWriter.LogError($"Failed to clear {storable.StoragePath} : File not found."); + return; } diff --git a/src/ChainSafe.Gaming/LocalStorage/IStorable.cs b/src/ChainSafe.Gaming/LocalStorage/IStorable.cs index 20f3a8904..169453389 100644 --- a/src/ChainSafe.Gaming/LocalStorage/IStorable.cs +++ b/src/ChainSafe.Gaming/LocalStorage/IStorable.cs @@ -1,9 +1,18 @@ namespace ChainSafe.Gaming.LocalStorage { + /// + /// Storable data for local storage. + /// public interface IStorable { + /// + /// Path to store the data. + /// public string StoragePath { get; } + /// + /// Load data on initialize. + /// public bool LoadOnInitialize { get; } } } \ No newline at end of file diff --git a/src/ChainSafe.Gaming/Web3/Core/Web3.cs b/src/ChainSafe.Gaming/Web3/Core/Web3.cs index 452754122..0b29d762c 100644 --- a/src/ChainSafe.Gaming/Web3/Core/Web3.cs +++ b/src/ChainSafe.Gaming/Web3/Core/Web3.cs @@ -92,13 +92,7 @@ async ValueTask IAsyncDisposable.DisposeAsync() internal async ValueTask InitializeAsync() { - foreach (var storable in serviceProvider.GetServices()) - { - if (storable.LoadOnInitialize) - { - await dataStorage.Load(storable); - } - } + await dataStorage.Initialize(); foreach (var lifecycleParticipant in serviceProvider.GetServices()) { diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs index f10e978a1..0d75d2388 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs @@ -26,7 +26,7 @@ protected override async void Initialize() _storedSessionAvailable = false; - await using (var lightWeb3 = await HyperPlayWeb3.BuildLightweightWeb3()) + await using (var lightWeb3 = await HyperPlayWeb3.BuildLightweightWeb3(new HyperPlayConfig())) { var data = lightWeb3.ServiceProvider.GetService(); @@ -36,14 +36,10 @@ protected override async void Initialize() if (_storedSessionAvailable) // auto-login { Debug.Log("Proceeding with auto-login."); + await TryLogin(); } - else - { - Debug.Log("No stored session available."); - } - loginButton.onClick.AddListener(OnLoginClicked); } diff --git a/src/UnitySampleProject/Packages/manifest.json b/src/UnitySampleProject/Packages/manifest.json index 48ca6894c..cc18b40b4 100644 --- a/src/UnitySampleProject/Packages/manifest.json +++ b/src/UnitySampleProject/Packages/manifest.json @@ -14,7 +14,7 @@ "com.unity.ugui": "1.0.0", "com.unity.visualscripting": "1.9.4", "io.chainsafe.web3-unity": "file:../../../Packages/io.chainsafe.web3-unity", - "io.chainsafe.web3-unity.hyperplay": "file:C:/Users/robel/Documents/ChainSafe/Code/Main/web3.unity/Packages/io.chainsafe.web3-unity.hyperplay", + "io.chainsafe.web3-unity.hyperplay": "file:../../../Packages/io.chainsafe.web3-unity.hyperplay", "io.chainsafe.web3-unity.lootboxes": "file:../../../Packages/io.chainsafe.web3-unity.lootboxes", "io.chainsafe.web3-unity.ramp": "file:../../../Packages/io.chainsafe.web3-unity.ramp", "io.chainsafe.web3-unity.web3auth": "file:../../../Packages/io.chainsafe.web3-unity.web3auth", diff --git a/src/UnitySampleProject/Packages/packages-lock.json b/src/UnitySampleProject/Packages/packages-lock.json index 06561f818..e5073f743 100644 --- a/src/UnitySampleProject/Packages/packages-lock.json +++ b/src/UnitySampleProject/Packages/packages-lock.json @@ -159,7 +159,7 @@ } }, "io.chainsafe.web3-unity.hyperplay": { - "version": "file:C:/Users/robel/Documents/ChainSafe/Code/Main/web3.unity/Packages/io.chainsafe.web3-unity.hyperplay", + "version": "file:../../../Packages/io.chainsafe.web3-unity.hyperplay", "depth": 0, "source": "local", "dependencies": { From cae1a227f4bccfc9f6d50254ce6e4f85fbf8ce9b Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 13:10:58 +0300 Subject: [PATCH 4/8] removed erroneous using statement in Web3Builder --- src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs b/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs index db2f2332e..57958a8c2 100644 --- a/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs +++ b/src/ChainSafe.Gaming/Web3/Core/Build/Web3Builder.cs @@ -3,7 +3,6 @@ using ChainSafe.Gaming.Evm; using ChainSafe.Gaming.Evm.Contracts; using ChainSafe.Gaming.Evm.Contracts.BuiltIn; -using ChainSafe.Gaming.Web3.Core; using ChainSafe.Gaming.LocalStorage; using ChainSafe.Gaming.Web3.Core.Evm.EventPoller; using ChainSafe.Gaming.Web3.Core.Logout; From f230cbe9f768d08158214d7ada8c7cb340cabc96 Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 13:16:45 +0300 Subject: [PATCH 5/8] dependency updated to 2.6 --- Packages/io.chainsafe.web3-unity.hyperplay/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Packages/io.chainsafe.web3-unity.hyperplay/package.json b/Packages/io.chainsafe.web3-unity.hyperplay/package.json index 3fba0de92..262bd237b 100644 --- a/Packages/io.chainsafe.web3-unity.hyperplay/package.json +++ b/Packages/io.chainsafe.web3-unity.hyperplay/package.json @@ -8,7 +8,7 @@ "documentationUrl": "https://docs.gaming.chainsafe.io/", "dependencies": { "com.unity.nuget.newtonsoft-json": "3.0.2", - "io.chainsafe.web3-unity": "2.5.0" + "io.chainsafe.web3-unity": "2.6.0" }, "keywords": [ "web3", From f7846f121e9be1bbae6bca170469a8de955b5e3c Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 17:58:04 +0300 Subject: [PATCH 6/8] checkpoint --- .../HyperPlayProvider.cs | 5 +- .../LocalStorage/DataStorage.cs | 2 +- .../Scenes/SampleLogin - HyperPlay.unity | 60 +++++++++++++++++++ .../Scripts/HyperPlayLoginProvider.cs | 4 -- 4 files changed, 65 insertions(+), 6 deletions(-) diff --git a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs index 0d14789e0..5e7774bdd 100644 --- a/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs +++ b/src/ChainSafe.Gaming.HyperPlay/HyperPlayProvider.cs @@ -95,7 +95,10 @@ public override async Task Connect() public override Task Disconnect() { - dataStorage.Clear(data); + if (data.RememberSession) + { + dataStorage.Clear(data); + } return Task.CompletedTask; } diff --git a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs index d61eb6bf7..2a6d00e17 100644 --- a/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs +++ b/src/ChainSafe.Gaming/LocalStorage/DataStorage.cs @@ -39,7 +39,7 @@ public async Task Initialize() { foreach (var storable in store) { - if (storable.LoadOnInitialize) + if (storable.LoadOnInitialize && Exists(AbsolutePath(storable.StoragePath))) { await Load(storable); } diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity index e40ef7191..d58ce4176 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity @@ -1937,6 +1937,65 @@ RectTransform: m_AnchoredPosition: {x: 0, y: -21} m_SizeDelta: {x: -32, y: -58} m_Pivot: {x: 0.5, y: 0.5} +--- !u!1 &1874983799 +GameObject: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + serializedVersion: 6 + m_Component: + - component: {fileID: 1874983801} + - component: {fileID: 1874983800} + m_Layer: 0 + m_Name: _countly + m_TagString: Untagged + m_Icon: {fileID: 0} + m_NavMeshLayer: 0 + m_StaticEditorFlags: 0 + m_IsActive: 1 +--- !u!114 &1874983800 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874983799} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 3830ecbe0f874710af3c6377b4540a81, type: 3} + m_Name: + m_EditorClassIdentifier: + Auth: + ServerUrl: + AppKey: + DeviceId: + Config: + Salt: + EnablePost: 0 + EnableTestMode: 0 + EnableConsoleLogging: 0 + NotificationMode: 0 + SessionDuration: 0 + EventQueueThreshold: 0 + StoredRequestLimit: 0 + TotalBreadcrumbsAllowed: 0 + EnableAutomaticCrashReporting: 0 +--- !u!4 &1874983801 +Transform: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 1874983799} + serializedVersion: 2 + m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} + m_LocalPosition: {x: 0, y: 0, z: 0} + m_LocalScale: {x: 1, y: 1, z: 1} + m_ConstrainProportionsScale: 0 + m_Children: [] + m_Father: {fileID: 0} + m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &2048731595 PrefabInstance: m_ObjectHideFlags: 0 @@ -2203,3 +2262,4 @@ SceneRoots: - {fileID: 433476714} - {fileID: 2066044329} - {fileID: 911080508} + - {fileID: 1874983801} diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs index 0d75d2388..7ccf6694d 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scripts/HyperPlayLoginProvider.cs @@ -1,9 +1,5 @@ -using System.Collections; -using System.Collections.Generic; -using ChainSafe.Gaming; using ChainSafe.Gaming.HyperPlay; using ChainSafe.Gaming.UnityPackage.Common; -using ChainSafe.Gaming.WalletConnect; using ChainSafe.Gaming.Web3.Build; using Microsoft.Extensions.DependencyInjection; using Scenes; From 2a9e74d8fcfadcd9b1ed01ecd8231c9017e3e829 Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 18:13:29 +0300 Subject: [PATCH 7/8] countly issue fix --- .../Scenes/SampleLogin - HyperPlay.unity | 120 ------------------ 1 file changed, 120 deletions(-) diff --git a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity index d58ce4176..33c6ecd11 100644 --- a/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity +++ b/src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay/1.0.0/HyperPlay Usage Sample/Scenes/SampleLogin - HyperPlay.unity @@ -1010,65 +1010,6 @@ Transform: m_Children: [] m_Father: {fileID: 0} m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} ---- !u!1 &911080506 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 911080508} - - component: {fileID: 911080507} - m_Layer: 0 - m_Name: _countly - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &911080507 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 911080506} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3830ecbe0f874710af3c6377b4540a81, type: 3} - m_Name: - m_EditorClassIdentifier: - Auth: - ServerUrl: - AppKey: - DeviceId: - Config: - Salt: - EnablePost: 0 - EnableTestMode: 0 - EnableConsoleLogging: 0 - NotificationMode: 0 - SessionDuration: 0 - EventQueueThreshold: 0 - StoredRequestLimit: 0 - TotalBreadcrumbsAllowed: 0 - EnableAutomaticCrashReporting: 0 ---- !u!4 &911080508 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 911080506} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1 &956735923 GameObject: m_ObjectHideFlags: 0 @@ -1937,65 +1878,6 @@ RectTransform: m_AnchoredPosition: {x: 0, y: -21} m_SizeDelta: {x: -32, y: -58} m_Pivot: {x: 0.5, y: 0.5} ---- !u!1 &1874983799 -GameObject: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - serializedVersion: 6 - m_Component: - - component: {fileID: 1874983801} - - component: {fileID: 1874983800} - m_Layer: 0 - m_Name: _countly - m_TagString: Untagged - m_Icon: {fileID: 0} - m_NavMeshLayer: 0 - m_StaticEditorFlags: 0 - m_IsActive: 1 ---- !u!114 &1874983800 -MonoBehaviour: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1874983799} - m_Enabled: 1 - m_EditorHideFlags: 0 - m_Script: {fileID: 11500000, guid: 3830ecbe0f874710af3c6377b4540a81, type: 3} - m_Name: - m_EditorClassIdentifier: - Auth: - ServerUrl: - AppKey: - DeviceId: - Config: - Salt: - EnablePost: 0 - EnableTestMode: 0 - EnableConsoleLogging: 0 - NotificationMode: 0 - SessionDuration: 0 - EventQueueThreshold: 0 - StoredRequestLimit: 0 - TotalBreadcrumbsAllowed: 0 - EnableAutomaticCrashReporting: 0 ---- !u!4 &1874983801 -Transform: - m_ObjectHideFlags: 0 - m_CorrespondingSourceObject: {fileID: 0} - m_PrefabInstance: {fileID: 0} - m_PrefabAsset: {fileID: 0} - m_GameObject: {fileID: 1874983799} - serializedVersion: 2 - m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} - m_LocalPosition: {x: 0, y: 0, z: 0} - m_LocalScale: {x: 1, y: 1, z: 1} - m_ConstrainProportionsScale: 0 - m_Children: [] - m_Father: {fileID: 0} - m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} --- !u!1001 &2048731595 PrefabInstance: m_ObjectHideFlags: 0 @@ -2261,5 +2143,3 @@ SceneRoots: - {fileID: 1290034541} - {fileID: 433476714} - {fileID: 2066044329} - - {fileID: 911080508} - - {fileID: 1874983801} From 1b364175c27fbf8a5581dd64b44127e85e637415 Mon Sep 17 00:00:00 2001 From: rob1997 Date: Wed, 29 May 2024 18:27:05 +0300 Subject: [PATCH 8/8] added duplicate_samples text file --- scripts/data/duplicate_samples.txt | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 scripts/data/duplicate_samples.txt diff --git a/scripts/data/duplicate_samples.txt b/scripts/data/duplicate_samples.txt new file mode 100644 index 000000000..485699603 --- /dev/null +++ b/scripts/data/duplicate_samples.txt @@ -0,0 +1,5 @@ +src/UnitySampleProject/Assets/Samples/web3.unity SDK:Web3.Unity Samples:Packages/io.chainsafe.web3-unity/Samples~/Web3.Unity/ +src/UnitySampleProject/Assets/Samples/web3.unity SDK Web3Auth:Web3.Unity Web3Auth Samples:Packages/io.chainsafe.web3-unity.web3auth/Samples~/Web3.Unity Web3Auth/ +src/UnitySampleProject/Assets/Samples/web3.unity SDK Lootboxes:Chainlink Lootbox Sample:Packages/io.chainsafe.web3-unity.lootboxes/Samples~/Chainlink Lootbox Samples/ +src/UnitySampleProject/Assets/Samples/web3.unity SDK Ramp:Web3.Unity Ramp Samples:Packages/io.chainsafe.web3-unity.ramp/Samples~/Web3.Unity Ramp Samples/ +src/UnitySampleProject/Assets/Samples/web3.unity SDK HyperPlay:Web3.Unity HyperPlay Samples:Packages/io.chainsafe.web3-unity.hyperplay/Samples~/Web3.Unity HyperPlay Samples/ \ No newline at end of file