Skip to content

Commit

Permalink
Merge pull request #89 from dojoengine/gc-controller
Browse files Browse the repository at this point in the history
fix(controller): gc task for callback
  • Loading branch information
Larkooo authored Jan 30, 2025
2 parents 748fbfc + 48d6eff commit 555886c
Showing 1 changed file with 7 additions and 4 deletions.
11 changes: 7 additions & 4 deletions Assets/Dojo/Runtime/Controller.cs
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,9 @@ public unsafe class Controller
public FieldElement ChainId => new FieldElement(dojo.controller_chain_id(controller));
public string Username => CString.ToString(dojo.controller_username(controller));

private static dojo.FnPtr_ControllerPtr_Void onConnectCallback;
private static TaskCompletionSource<Controller> connectionTask;

private Controller(dojo.Controller* controller)
{
this.controller = controller;
Expand Down Expand Up @@ -63,8 +66,8 @@ public static Controller GetAccount(Policy[] policies, FieldElement chainId)

public static Task<Controller> Connect(string rpcUrl, Policy[] policies)
{
connectionTask = new TaskCompletionSource<Controller>();
var nativePolicies = policies.Select(p => p.ToNative()).ToArray();
var connectionTask = new TaskCompletionSource<Controller>();
CString crpcUrl = CString.FromString(rpcUrl);

dojo.Policy* policiesPtr = null;
Expand All @@ -76,13 +79,13 @@ public static Task<Controller> Connect(string rpcUrl, Policy[] policies)
}
}

var onConnect = new dojo.FnPtr_ControllerPtr_Void((controllerPtr) =>
onConnectCallback = new dojo.FnPtr_ControllerPtr_Void((controllerPtr) =>
{
var controller = new Controller(controllerPtr);
connectionTask.SetResult(controller);
connectionTask.TrySetResult(controller);
});

dojo.controller_connect(crpcUrl, policiesPtr, (UIntPtr)policies.Length, onConnect);
dojo.controller_connect(crpcUrl, policiesPtr, (UIntPtr)policies.Length, onConnectCallback);

return connectionTask.Task;
}
Expand Down

0 comments on commit 555886c

Please sign in to comment.