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); }
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()); }
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)); } }
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()); }
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)); } }