using System; using System.Collections.Generic; using System.Threading; using System.Threading.Tasks; using UnityEngine; using CloudPointRpc; public class RpcTest : MonoBehaviour { private static Queue _callbackTasks = new Queue(); [AOT.MonoPInvokeCallback(typeof(CrpcTestApi.RpcStringCallback))] public static IntPtr RpcStringCallback(IntPtr rpcString) { Debug.Log("smth recieved"); var rpc = new RpcString(rpcString); var message = rpc.Data; rpc.Dispose(); var task = new Task(() => Debug.Log($"[RpcTest] Callback received: {message}")); lock (_callbackTasks) { _callbackTasks.Enqueue(task); } task.Wait(); var responce = new RpcString("1"); return responce.Handle; } void Start() { CrpcTestApi.crpc_test_init(); CrpcTestExtensions.CrpcTestAddMethod(RpcStringCallback, "test_method"); Debug.Log("[RpcTest] Initialized and method added"); } private void Update() { lock (_callbackTasks) { while (_callbackTasks.Count > 0) { var task = _callbackTasks.Dequeue(); task.Start(); } } } private void OnDestroy() { lock (_callbackTasks) { _callbackTasks.Clear(); } CrpcTestApi.crpc_test_deinit(); } }