using GplSession.Program; using Solana.Unity.Bolt.Test; using Solana.Unity.Programs; using Solana.Unity.Wallet; using System; using System.Collections.Generic; using System.Threading.Tasks; using World.Program; using System.Diagnostics; using Solana.Unity.Rpc.Types; namespace SessionTest { public class Test { public static async Task Run(Framework framework) { await CreateSession(framework); await AddEntity(framework); await InitializePositionComponent(framework); await ApplyFlySystemOnComponentUsingSessionToken(framework); } public static async Task CreateSession(Framework framework) { framework.SessionToken = WorldProgram.FindSessionTokenPda(framework.SessionSigner.Account.PublicKey, framework.Wallet.Account.PublicKey); var createSession = new CreateSessionAccounts() { SessionToken = framework.SessionToken, SessionSigner = framework.SessionSigner.Account.PublicKey, Authority = framework.Wallet.Account.PublicKey, TargetProgram = new PublicKey(WorldProgram.ID) }; var instruction = GplSessionProgram.CreateSession(createSession, true, null, 100000000); await framework.SendAndConfirmInstruction(instruction, new List { framework.Wallet.Account, framework.SessionSigner.Account }); } public static async Task AddEntity(Framework framework) { var addEntity = await Bolt.World.AddEntity(framework.Client, framework.WorldPda, framework.SessionSigner.Account.PublicKey, Commitment.Processed); framework.SessionEntityPda = addEntity.Pda; await framework.SendAndConfirmInstruction(addEntity.Instruction, new List { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey); } public static async Task InitializePositionComponent(Framework framework) { var initializeComponent = await Bolt.World.InitializeComponent(framework.SessionSigner.Account.PublicKey, framework.SessionEntityPda, framework.ExampleComponentPosition); framework.SessionComponentPositionPda = initializeComponent.Pda; await framework.SendAndConfirmInstruction(initializeComponent.Instruction, new List { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey); } public static async Task ApplyFlySystemOnComponentUsingSessionToken(Framework framework) { var instruction = Bolt.World.ApplySystem( framework.WorldPda, framework.SystemSimpleMovement, [new Bolt.World.EntityType(framework.SessionEntityPda, [framework.ExampleComponentPosition])], new { direction = "Right" }, framework.SessionSigner.Account.PublicKey, framework.SessionToken ); await framework.SendAndConfirmInstruction(instruction, new List { framework.SessionSigner.Account }, framework.SessionSigner.Account.PublicKey); var accountInfo = await framework.GetAccountInfo(framework.SessionComponentPositionPda); var data = Convert.FromBase64String(accountInfo.Data[0]); var position = Position.Accounts.Position.Deserialize(data); Debug.Assert(1 == position.X, "X is not equal to 1"); Debug.Assert(0 == position.Y, "Y is not equal to 0"); Debug.Assert(0 == position.Z, "Z is not equal to 0"); } } }