private static void HandleResponse <T>(string id, ZPCUError error, Func <T> successCallback) where T : class
        {
            var callback = _queryCallbacks[id] as Action <T, ZapicError>;

            if (callback == null)
            {
                Debug.LogWarning("Unable to find callback");
                return;
            }

            _queryCallbacks.Remove(id);

            //If there is an error
            if (error.code != 0)
            {
                var e = error.ToError();

                callback(null, e);
            }
            else
            {
                Debug.Log("Received a successful response");
                var result = successCallback();
                Debug.LogFormat("Received result {0}", result);

                callback(result, null);
            }
        }
 internal static ZapicError ToError(this ZPCUError e)
 {
     return(new ZapicError(e.code, e.message));
 }
        private static void HandleArrayResponse <TCPP, TUnity>(string id, IntPtr ptr, int size, ZPCUError error, Func <TCPP, TUnity> transform)
        {
            var cppData   = MarshalData <TCPP>(ptr, size);
            var unityData = cppData.Select(x => transform(x)).ToArray();

            HandleResponse <TUnity[]>(id, error, () =>
            {
                return(unityData);
            });
        }
 private static void _get_competitions(string id, IntPtr ptr, int size, ZPCUError error)
 {
     HandleArrayResponse <ZPCUCompetition, ZapicCompetition>(id, ptr, size, error, ZapicExtensions.ToCompetition);
 }
 private static void _get_challenges(string id, IntPtr ptr, int size, ZPCUError error)
 {
     HandleArrayResponse <ZPCUChallenge, ZapicChallenge>(id, ptr, size, error, ZapicExtensions.ToChallenge);
 }
 private static void _get_player(string id, ZPCUPlayer p, ZPCUError error)
 {
     HandleResponse <ZapicPlayer>(id, error, () => p.ToPlayer());
 }
 private static void _get_statistics(string id, IntPtr ptr, int size, ZPCUError error)
 {
     HandleArrayResponse <ZPCUStatistic, ZapicStatistic>(id, ptr, size, error, ZapicExtensions.ToStatistic);
 }