xamarin-macios/src/multipeerconnectivity.cs

364 строки
11 KiB
C#

//
// multipeerconnectivity.cs: binding for iOS (7+) MultipeerConnectivity framework
//
// Authors:
// Aaron Bockover (abock@xamarin.com)
//
// Copyright 2013 Xamarin, Inc.
#if XAMCORE_2_0 || !MONOMAC // MultipeerConnectivity is 64-bit only on OS X
using System;
using XamCore.Foundation;
using XamCore.ObjCRuntime;
using XamCore.Security;
#if MONOMAC
using XamCore.AppKit;
#else
using XamCore.UIKit;
#endif
namespace XamCore.MultipeerConnectivity {
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // NSInvalidArgumentException Reason: -[MCPeerID init]: unrecognized selector sent to instance 0x7d721090
partial interface MCPeerID : NSCopying, NSSecureCoding {
[DesignatedInitializer]
[Export ("initWithDisplayName:")]
IntPtr Constructor (string myDisplayName);
[Export ("displayName")]
string DisplayName { get; }
}
delegate void MCSessionNearbyConnectionDataForPeerCompletionHandler (NSData connectionData, NSError error);
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // crash when calling `description` selector
partial interface MCSession {
[Export ("initWithPeer:")]
IntPtr Constructor (MCPeerID myPeerID);
// Note: it should be a constructor but it's use of an NSArray of different types makes it hard to provide a
// nice binding, i.e. the first item of NSArray must be an SecIdentity followed by (0...) SecCertificate
[Internal]
[Export ("initWithPeer:securityIdentity:encryptionPreference:")]
IntPtr Init (MCPeerID myPeerID, [NullAllowed] NSArray identity, MCEncryptionPreference encryptionPreference);
[Export ("sendData:toPeers:withMode:error:")]
bool SendData (NSData data, MCPeerID [] peerIDs, MCSessionSendDataMode mode, out NSError error);
[Export ("disconnect")]
void Disconnect ();
[Export ("connectedPeers")]
MCPeerID [] ConnectedPeers { get; }
[Async]
[Export ("sendResourceAtURL:withName:toPeer:withCompletionHandler:")]
NSProgress SendResource (NSUrl resourceUrl, string resourceName, MCPeerID peerID, [NullAllowed] Action<NSError> completionHandler);
[Export ("startStreamWithName:toPeer:error:")]
NSOutputStream StartStream (string streamName, MCPeerID peerID, out NSError error);
[Export ("delegate", ArgumentSemantic.Weak), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
MCSessionDelegate Delegate { get; set; }
[Export ("myPeerID")]
MCPeerID MyPeerID { get; }
// we use NSArray because, when non-null, it contains a SecIdentity followed by 0..n SecCertificate - none are NSObject
[Export ("securityIdentity")]
NSArray SecurityIdentity { get; }
[Export ("encryptionPreference")]
MCEncryptionPreference EncryptionPreference { get; }
[Field ("kMCSessionMaximumNumberOfPeers")]
nint MaximumNumberOfPeers { get; }
[Field ("kMCSessionMinimumNumberOfPeers")]
nint MinimumNumberOfPeers { get; }
#region Custom Discovery Category
[Async]
[Export ("nearbyConnectionDataForPeer:withCompletionHandler:")]
void NearbyConnectionDataForPeer (MCPeerID peerID, MCSessionNearbyConnectionDataForPeerCompletionHandler completionHandler);
[Export ("connectPeer:withNearbyConnectionData:")]
void ConnectPeer (MCPeerID peerID, NSData data);
[Export ("cancelConnectPeer:")]
void CancelConnectPeer (MCPeerID peerID);
#endregion
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
partial interface MCSessionDelegate {
[Abstract]
[Export ("session:peer:didChangeState:")]
void DidChangeState (MCSession session, MCPeerID peerID, MCSessionState state);
[Abstract]
[Export ("session:didReceiveData:fromPeer:")]
void DidReceiveData (MCSession session, NSData data, MCPeerID peerID);
[Abstract]
[Export ("session:didStartReceivingResourceWithName:fromPeer:withProgress:")]
void DidStartReceivingResource (MCSession session, string resourceName, MCPeerID fromPeer, NSProgress progress);
[Abstract]
[Export ("session:didFinishReceivingResourceWithName:fromPeer:atURL:withError:")]
void DidFinishReceivingResource (MCSession session, string resourceName, MCPeerID fromPeer, [NullAllowed] NSUrl localUrl, [NullAllowed] NSError error);
[Abstract]
[Export ("session:didReceiveStream:withName:fromPeer:")]
void DidReceiveStream (MCSession session, NSInputStream stream, string streamName, MCPeerID peerID);
[Export ("session:didReceiveCertificate:fromPeer:certificateHandler:")]
bool DidReceiveCertificate (MCSession session, [NullAllowed] SecCertificate[] certificate, MCPeerID peerID, Action<bool> certificateHandler);
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // NSInvalidArgumentException -[MCNearbyServiceAdvertiser init]: unrecognized selector sent to instance 0x19195e50
partial interface MCNearbyServiceAdvertiser {
[DesignatedInitializer]
[Export ("initWithPeer:discoveryInfo:serviceType:")]
IntPtr Constructor (MCPeerID myPeerID, [NullAllowed] NSDictionary info, string serviceType);
[Export ("startAdvertisingPeer")]
void StartAdvertisingPeer ();
[Export ("stopAdvertisingPeer")]
void StopAdvertisingPeer ();
[Export ("delegate", ArgumentSemantic.Weak), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
MCNearbyServiceAdvertiserDelegate Delegate { get; set; }
[Export ("myPeerID")]
MCPeerID MyPeerID { get; }
[Export ("discoveryInfo")]
NSDictionary DiscoveryInfo { get; }
[Export ("serviceType")]
string ServiceType { get; }
}
delegate void MCNearbyServiceAdvertiserInvitationHandler (bool accept, [NullAllowed] MCSession session);
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
partial interface MCNearbyServiceAdvertiserDelegate {
#if XAMCORE_2_0
[Abstract]
#endif
[Export ("advertiser:didReceiveInvitationFromPeer:withContext:invitationHandler:")]
void DidReceiveInvitationFromPeer (MCNearbyServiceAdvertiser advertiser, MCPeerID peerID, [NullAllowed] NSData context, MCNearbyServiceAdvertiserInvitationHandler invitationHandler);
[Export ("advertiser:didNotStartAdvertisingPeer:")]
void DidNotStartAdvertisingPeer (MCNearbyServiceAdvertiser advertiser, NSError error);
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // NSInvalidArgumentException -[MCNearbyServiceBrowser init]: unrecognized selector sent to instance 0x15519a70
partial interface MCNearbyServiceBrowser {
[DesignatedInitializer]
[Export ("initWithPeer:serviceType:")]
IntPtr Constructor (MCPeerID myPeerID, string serviceType);
[Export ("startBrowsingForPeers")]
void StartBrowsingForPeers ();
[Export ("stopBrowsingForPeers")]
void StopBrowsingForPeers ();
[Export ("invitePeer:toSession:withContext:timeout:")]
void InvitePeer (MCPeerID peerID, MCSession session, [NullAllowed] NSData context, double timeout);
[Export ("delegate", ArgumentSemantic.Weak), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
MCNearbyServiceBrowserDelegate Delegate { get; set; }
[Export ("myPeerID")]
MCPeerID MyPeerID { get; }
[Export ("serviceType")]
string ServiceType { get; }
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
partial interface MCNearbyServiceBrowserDelegate {
#if XAMCORE_2_0
[Abstract]
#endif
[Mac (10,9)]
[Export ("browser:foundPeer:withDiscoveryInfo:")]
void FoundPeer (MCNearbyServiceBrowser browser, MCPeerID peerID, [NullAllowed] NSDictionary info);
#if XAMCORE_2_0
[Abstract]
#endif
[Mac (10,9)]
[Export ("browser:lostPeer:")]
void LostPeer (MCNearbyServiceBrowser browser, MCPeerID peerID);
[Mac (10,9)]
[Export ("browser:didNotStartBrowsingForPeers:")]
void DidNotStartBrowsingForPeers (MCNearbyServiceBrowser browser, NSError error);
}
interface IMCNearbyServiceBrowserDelegate {}
#if MONOMAC
[Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSViewController))]
#else
[TV (10,0)]
[Since (7,0)]
[BaseType (typeof (UIViewController))]
#endif
[DisableDefaultCtor] // NSInvalidArgumentException -[MCPeerPickerViewController initWithNibName:bundle:]: unrecognized selector sent to instance 0x15517b90
partial interface MCBrowserViewController : MCNearbyServiceBrowserDelegate {
[Export ("initWithNibName:bundle:")]
[PostGet ("NibBundle")]
IntPtr Constructor ([NullAllowed] string nibName, [NullAllowed] NSBundle bundle);
[DesignatedInitializer]
[Export ("initWithBrowser:session:")]
IntPtr Constructor (MCNearbyServiceBrowser browser, MCSession session);
[Export ("initWithServiceType:session:")]
IntPtr Constructor (string serviceType, MCSession session);
[Export ("delegate", ArgumentSemantic.Weak), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
MCBrowserViewControllerDelegate Delegate { get; set; }
[Export ("minimumNumberOfPeers", ArgumentSemantic.Assign)]
nuint MinimumNumberOfPeers { get; set; }
[Export ("maximumNumberOfPeers", ArgumentSemantic.Assign)]
nuint MaximumNumberOfPeers { get; set; }
[Export ("browser")]
MCNearbyServiceBrowser Browser { get; }
[Export ("session")]
MCSession Session { get; }
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
partial interface MCBrowserViewControllerDelegate {
#if XAMCORE_2_0
[Abstract]
#endif
[Export ("browserViewControllerWasCancelled:")]
void WasCancelled (MCBrowserViewController browserViewController);
#if XAMCORE_2_0
[Abstract]
#endif
[Export ("browserViewControllerDidFinish:")]
void DidFinish (MCBrowserViewController browserViewController);
// optional
[Export ("browserViewController:shouldPresentNearbyPeer:withDiscoveryInfo:")]
bool ShouldPresentNearbyPeer (MCBrowserViewController browserViewController, MCPeerID peerID, [NullAllowed] NSDictionary info);
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[DisableDefaultCtor] // NSInvalidArgumentException Reason: -[MCAdvertiserAssistant init]: unrecognized selector sent to instance 0x7ea7fa40
interface MCAdvertiserAssistant {
[DesignatedInitializer]
[Export ("initWithServiceType:discoveryInfo:session:")]
IntPtr Constructor (string serviceType, [NullAllowed] NSDictionary info, MCSession session);
[Export ("discoveryInfo")]
NSDictionary DiscoveryInfo { get; }
[Export ("session")]
MCSession Session { get; }
[Export ("serviceType")]
string ServiceType { get; }
[Export ("delegate", ArgumentSemantic.Weak), NullAllowed]
NSObject WeakDelegate { get; set; }
[Wrap ("WeakDelegate")]
[Protocolize]
MCAdvertiserAssistantDelegate Delegate { get; set; }
[Export ("start")]
void Start ();
[Export ("stop")]
void Stop ();
}
[TV (10,0)]
[Since (7,0)][Mac (10,10, onlyOn64 : true)]
[BaseType (typeof (NSObject))]
[Model]
[Protocol]
interface MCAdvertiserAssistantDelegate {
[Export ("advertiserAssistantDidDismissInvitation:")]
void DidDismissInvitation (MCAdvertiserAssistant advertiserAssistant);
[Export ("advertiserAssistantWillPresentInvitation:")]
void WillPresentInvitation (MCAdvertiserAssistant advertiserAssistant);
}
}
#endif