コード例 #1
0
        private static void InternalMultipleMatchesCallback(IntPtr matches, IntPtr error, IntPtr secondaryCallback)
        {
            if (PInvokeUtil.IsNull(secondaryCallback))
            {
                return;
            }

            GKTurnBasedMatch[] gkMatches = null;

            if (PInvokeUtil.IsNotNull(matches))
            {
                // Creating a one-time usage NSArray binder, no need to use the factory.
                using (var nsArray = new NSArray <GKTurnBasedMatch>(matches))
                {
                    gkMatches = nsArray.ToArray(ptr => InteropObjectFactory <GKTurnBasedMatch> .FromPointer(ptr, p => new GKTurnBasedMatch(p)));
                }
            }

            // A new NSError object is always created on native side, so no need
            // to check the binder pool for reusing an existing one.
            NSError nsError = PInvokeUtil.IsNotNull(error) ? new NSError(error) : null;

            // Invoke consumer callback.
            PInvokeCallbackUtil.PerformInternalCallback(
                "GKTurnBasedMatch#InternalMultipleMatchesCallback",
                PInvokeCallbackUtil.Type.Temporary,
                gkMatches, nsError, secondaryCallback);
        }
コード例 #2
0
ファイル: Utilities.cs プロジェクト: artemy0/Quiz
        private static KeyValuePair <string, string>[] ToContactEmails(NSArray <CNLabeledValue <NSString> > emails)
        {
            var result = new List <KeyValuePair <string, string> >();

            if (emails == null || emails.Count < 1)
            {
                return(result.ToArray());
            }

            foreach (var labeledValue in emails.ToArray(ptr => new CNLabeledValue <NSString>(ptr)))
            {
                if (labeledValue == null)
                {
                    Debug.Log("Detected a null [CNLabeledValue<NSString>].");
                    continue;
                }

                Func <IntPtr, NSString> valueConstructor = ptr => new NSString(ptr);
                NSString email = labeledValue.GetValue(valueConstructor);
                NSString label = labeledValue.Label;

                if (label == null || email == null)
                {
                    Debug.LogFormat("Detected null value in [CNLabeledValue<NSString>] -> [{0}, {1}].",
                                    label != null ? label.UTF8String : "null",
                                    email != null ? email.UTF8String : "null");
                    continue;
                }

                result.Add(new KeyValuePair <string, string>(label.UTF8String, email.UTF8String));
            }

            return(result.ToArray());
        }
コード例 #3
0
        private static void InternalDidRequestMatchWithOtherPlayersCallback(IntPtr listenerPtr, IntPtr player, IntPtr playersToInvite)
        {
            var forwarder = FromPointer(listenerPtr);

            if (forwarder != null && forwarder.ListenerCount > 0)
            {
                // GKPlayer.
                GKPlayer gkPlayer = InteropObjectFactory <GKPlayer> .FromPointer(player, ptr => new GKPlayer(ptr));

                // GKPlayer[].
                GKPlayer[] gkPlayersToInvite = null;

                if (PInvokeUtil.IsNotNull(playersToInvite))
                {
                    // Creating a one-time usage NSArray binder, no need to use the factory.
                    using (var nsArray = new NSArray <GKPlayer>(playersToInvite))
                    {
                        gkPlayersToInvite = nsArray.ToArray(ptr => InteropObjectFactory <GKPlayer> .FromPointer(ptr, p => new GKPlayer(p)));
                    }
                }

                // Invoke consumer delegates.
                forwarder.InvokeOnAllListeners(l => l.PlayerDidRequestMatchWithOtherPlayers(gkPlayer, gkPlayersToInvite));
            }
        }
コード例 #4
0
ファイル: Utilities.cs プロジェクト: artemy0/Quiz
        private static KeyValuePair <string, string>[] ToContactPhoneNumbers(NSArray <CNLabeledValue <CNPhoneNumber> > phoneNumbers)
        {
            var result = new List <KeyValuePair <string, string> >();

            if (phoneNumbers == null || phoneNumbers.Count < 1)
            {
                return(result.ToArray());
            }

            foreach (var labeledValue in phoneNumbers.ToArray(ptr => new CNLabeledValue <CNPhoneNumber>(ptr)))
            {
                if (labeledValue == null)
                {
                    Debug.Log("Detected a null [CNLabeledValue<CNPhoneNumber>].");
                    continue;
                }

                Func <IntPtr, CNPhoneNumber> valueConstructor = ptr => new CNPhoneNumber(ptr);
                CNPhoneNumber number = labeledValue.GetValue(valueConstructor);
                NSString      label  = labeledValue.Label;

                if (label == null || number == null)
                {
                    Debug.LogFormat("Detected null value in [CNLabeledValue<CNPhoneNumber>] -> [{0}, {1}].",
                                    label != null ? label.UTF8String : "null",
                                    number != null ? number.StringValue.UTF8String : "null");
                    continue;
                }

                result.Add(new KeyValuePair <string, string>(label.UTF8String, number.StringValue.UTF8String));
            }

            return(result.ToArray());
        }
コード例 #5
0
        private static void InternalDidRequestMatchWithRecipientsCallback(IntPtr listenerPtr, IntPtr player, IntPtr recipientPlayers)
        {
            var forwarder = FromPointer(listenerPtr);

            if (forwarder != null && forwarder.ListenerCount > 0)
            {
                // GKPlayer.
                GKPlayer gkPlayer = InteropObjectFactory <GKPlayer> .FromPointer(player, ptr => new GKPlayer(ptr));

                // GKPlayer[].
                GKPlayer[] recipientGKPlayers = null;

                if (PInvokeUtil.IsNotNull(recipientPlayers))
                {
                    // Creating a one-time usage NSArray binder, no need to use the factory.
                    using (var nsArray = new NSArray <GKPlayer>(recipientPlayers))
                    {
                        recipientGKPlayers = nsArray.ToArray(ptr => InteropObjectFactory <GKPlayer> .FromPointer(ptr, p => new GKPlayer(p)));
                    }
                }

                forwarder.InvokeOnAllListeners(l => l.PlayerDidRequestMatchWithRecipients(gkPlayer, recipientGKPlayers));
            }
        }