using CPF.Mac.ObjCRuntime; using System; using System.ComponentModel; namespace CPF.Mac.Foundation { [Register("NSConnection", true)] public class NSConnection : NSObject { private static readonly IntPtr selRootObjectHandle = Selector.GetHandle("rootObject"); private static readonly IntPtr selSetRootObject_Handle = Selector.GetHandle("setRootObject:"); private static readonly IntPtr selRemoteObjectsHandle = Selector.GetHandle("remoteObjects"); private static readonly IntPtr selLocalObjectsHandle = Selector.GetHandle("localObjects"); private static readonly IntPtr selCurrentConversationHandle = Selector.GetHandle("currentConversation"); private static readonly IntPtr selAllConnectionsHandle = Selector.GetHandle("allConnections"); private static readonly IntPtr selRequestTimeoutHandle = Selector.GetHandle("requestTimeout"); private static readonly IntPtr selSetRequestTimeout_Handle = Selector.GetHandle("setRequestTimeout:"); private static readonly IntPtr selReplyTimeoutHandle = Selector.GetHandle("replyTimeout"); private static readonly IntPtr selSetReplyTimeout_Handle = Selector.GetHandle("setReplyTimeout:"); private static readonly IntPtr selIndependentConversationQueueingHandle = Selector.GetHandle("independentConversationQueueing"); private static readonly IntPtr selSetIndependentConversationQueueing_Handle = Selector.GetHandle("setIndependentConversationQueueing:"); private static readonly IntPtr selRequestModesHandle = Selector.GetHandle("requestModes"); private static readonly IntPtr selIsValidHandle = Selector.GetHandle("isValid"); private static readonly IntPtr selReceivePortHandle = Selector.GetHandle("receivePort"); private static readonly IntPtr selSendPortHandle = Selector.GetHandle("sendPort"); private static readonly IntPtr selStatisticsHandle = Selector.GetHandle("statistics"); private static readonly IntPtr selDelegateHandle = Selector.GetHandle("delegate"); private static readonly IntPtr selSetDelegate_Handle = Selector.GetHandle("setDelegate:"); private static readonly IntPtr selConnectionWithReceivePortSendPort_Handle = Selector.GetHandle("connectionWithReceivePort:sendPort:"); private static readonly IntPtr selRunInNewThreadHandle = Selector.GetHandle("runInNewThread"); private static readonly IntPtr selAddRunLoop_Handle = Selector.GetHandle("addRunLoop:"); private static readonly IntPtr selRemoveRunLoop_Handle = Selector.GetHandle("removeRunLoop:"); private static readonly IntPtr selServiceConnectionWithNameRootObjectUsingNameServer_Handle = Selector.GetHandle("serviceConnectionWithName:rootObject:usingNameServer:"); private static readonly IntPtr selServiceConnectionWithNameRootObject_Handle = Selector.GetHandle("serviceConnectionWithName:rootObject:"); private static readonly IntPtr selRegisterName_Handle = Selector.GetHandle("registerName:"); private static readonly IntPtr selRegisterNameWithNameServer_Handle = Selector.GetHandle("registerName:withNameServer:"); private static readonly IntPtr selConnectionWithRegisteredNameHost_Handle = Selector.GetHandle("connectionWithRegisteredName:host:"); private static readonly IntPtr selConnectionWithRegisteredNameHostUsingNameServer_Handle = Selector.GetHandle("connectionWithRegisteredName:host:usingNameServer:"); private static readonly IntPtr selRootProxyHandle = Selector.GetHandle("rootProxy"); private static readonly IntPtr selRootProxyForConnectionWithRegisteredNameHost_Handle = Selector.GetHandle("rootProxyForConnectionWithRegisteredName:host:"); private static readonly IntPtr selRootProxyForConnectionWithRegisteredNameHostUsingNameServer_Handle = Selector.GetHandle("rootProxyForConnectionWithRegisteredName:host:usingNameServer:"); private static readonly IntPtr selAddRequestMode_Handle = Selector.GetHandle("addRequestMode:"); private static readonly IntPtr selRemoveRequestMode_Handle = Selector.GetHandle("removeRequestMode:"); private static readonly IntPtr selInvalidateHandle = Selector.GetHandle("invalidate"); private static readonly IntPtr selDispatchWithComponents_Handle = Selector.GetHandle("dispatchWithComponents:"); private static readonly IntPtr class_ptr = Class.GetHandle("NSConnection"); private object __mt_RootObject_var; private object __mt_RemoteObjects_var; private object __mt_LocalObjects_var; private static object __mt_CurrentConversation_var_static; private static object __mt_AllConnections_var_static; private object __mt_RequestModes_var; private object __mt_ReceivePort_var; private object __mt_SendPort_var; private object __mt_Statistics_var; private object __mt_WeakDelegate_var; public override IntPtr ClassHandle => class_ptr; public virtual NSObject RootObject { [Export("rootObject")] get { return (NSObject)(__mt_RootObject_var = ((!IsDirectBinding) ? Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selRootObjectHandle)) : Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selRootObjectHandle)))); } [Export("setRootObject:")] set { if (value == null) { throw new ArgumentNullException("value"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetRootObject_Handle, value.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetRootObject_Handle, value.Handle); } __mt_RootObject_var = value; } } public virtual NSObject[] RemoteObjects { [Export("remoteObjects")] get { return (NSObject[])(__mt_RemoteObjects_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selRemoteObjectsHandle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selRemoteObjectsHandle)))); } } public virtual NSObject[] LocalObjects { [Export("localObjects")] get { return (NSObject[])(__mt_LocalObjects_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selLocalObjectsHandle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selLocalObjectsHandle)))); } } public static NSObject CurrentConversation { [Export("currentConversation")] get { return (NSObject)(__mt_CurrentConversation_var_static = Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(class_ptr, selCurrentConversationHandle))); } } public static NSConnection[] AllConnections { [Export("allConnections")] get { return (NSConnection[])(__mt_AllConnections_var_static = NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(class_ptr, selAllConnectionsHandle))); } } public virtual double RequestTimeout { [Export("requestTimeout")] get { if (IsDirectBinding) { return Messaging.Double_objc_msgSend(base.Handle, selRequestTimeoutHandle); } return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selRequestTimeoutHandle); } [Export("setRequestTimeout:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_Double(base.Handle, selSetRequestTimeout_Handle, value); } else { Messaging.void_objc_msgSendSuper_Double(base.SuperHandle, selSetRequestTimeout_Handle, value); } } } public virtual double ReplyTimeout { [Export("replyTimeout")] get { if (IsDirectBinding) { return Messaging.Double_objc_msgSend(base.Handle, selReplyTimeoutHandle); } return Messaging.Double_objc_msgSendSuper(base.SuperHandle, selReplyTimeoutHandle); } [Export("setReplyTimeout:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_Double(base.Handle, selSetReplyTimeout_Handle, value); } else { Messaging.void_objc_msgSendSuper_Double(base.SuperHandle, selSetReplyTimeout_Handle, value); } } } public virtual bool IndependentConversationQueueing { [Export("independentConversationQueueing")] get { if (IsDirectBinding) { return Messaging.bool_objc_msgSend(base.Handle, selIndependentConversationQueueingHandle); } return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIndependentConversationQueueingHandle); } [Export("setIndependentConversationQueueing:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_bool(base.Handle, selSetIndependentConversationQueueing_Handle, value); } else { Messaging.void_objc_msgSendSuper_bool(base.SuperHandle, selSetIndependentConversationQueueing_Handle, value); } } } public virtual NSString[] RequestModes { [Export("requestModes")] get { return (NSString[])(__mt_RequestModes_var = ((!IsDirectBinding) ? NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selRequestModesHandle)) : NSArray.ArrayFromHandle(Messaging.IntPtr_objc_msgSend(base.Handle, selRequestModesHandle)))); } } public virtual bool IsValid { [Export("isValid")] get { if (IsDirectBinding) { return Messaging.bool_objc_msgSend(base.Handle, selIsValidHandle); } return Messaging.bool_objc_msgSendSuper(base.SuperHandle, selIsValidHandle); } } public virtual NSPort ReceivePort { [Export("receivePort")] get { return (NSPort)(__mt_ReceivePort_var = ((!IsDirectBinding) ? ((NSPort)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selReceivePortHandle))) : ((NSPort)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selReceivePortHandle))))); } } public virtual NSPort SendPort { [Export("sendPort")] get { return (NSPort)(__mt_SendPort_var = ((!IsDirectBinding) ? ((NSPort)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selSendPortHandle))) : ((NSPort)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selSendPortHandle))))); } } public virtual NSDictionary Statistics { [Export("statistics")] get { return (NSDictionary)(__mt_Statistics_var = ((!IsDirectBinding) ? ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selStatisticsHandle))) : ((NSDictionary)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selStatisticsHandle))))); } } public virtual NSObject WeakDelegate { [Export("delegate")] get { return (NSObject)(__mt_WeakDelegate_var = ((!IsDirectBinding) ? Runtime.GetNSObject(Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selDelegateHandle)) : Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend(base.Handle, selDelegateHandle)))); } [Export("setDelegate:")] set { if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selSetDelegate_Handle, value?.Handle ?? IntPtr.Zero); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selSetDelegate_Handle, value?.Handle ?? IntPtr.Zero); } __mt_WeakDelegate_var = value; } } public NSConnectionDelegate Delegate { get { return WeakDelegate as NSConnectionDelegate; } set { WeakDelegate = value; } } public TProxy GetRootProxy() where TProxy : NSObject { return GetRootProxy(_GetRootProxy()); } public static TProxy GetRootProxy(string name, string hostName) where TProxy : NSObject { return GetRootProxy(_GetRootProxy(name, hostName)); } public static TProxy GetRootProxy(string name, string hostName, NSPortNameServer server) where TProxy : NSObject { return GetRootProxy(_GetRootProxy(name, hostName, server)); } private static TProxy GetRootProxy(IntPtr handle) where TProxy : NSObject { TProxy val = Runtime.TryGetNSObject(handle) as TProxy; if (val == null) { val = (TProxy)Activator.CreateInstance(typeof(TProxy), handle); } return val; } [EditorBrowsable(EditorBrowsableState.Advanced)] [Export("initWithCoder:")] public NSConnection(NSCoder coder) : base(NSObjectFlag.Empty) { if (IsDirectBinding) { base.Handle = Messaging.IntPtr_objc_msgSend_IntPtr(base.Handle, Selector.InitWithCoder, coder.Handle); } else { base.Handle = Messaging.IntPtr_objc_msgSendSuper_IntPtr(base.SuperHandle, Selector.InitWithCoder, coder.Handle); } } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSConnection(NSObjectFlag t) : base(t) { } [EditorBrowsable(EditorBrowsableState.Advanced)] public NSConnection(IntPtr handle) : base(handle) { } [Export("connectionWithReceivePort:sendPort:")] public static NSConnection Create(NSPort receivePort, NSPort sendPort) { return (NSConnection)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(class_ptr, selConnectionWithReceivePortSendPort_Handle, receivePort?.Handle ?? IntPtr.Zero, sendPort?.Handle ?? IntPtr.Zero)); } [Export("runInNewThread")] public virtual void RunInNewThread() { if (IsDirectBinding) { Messaging.void_objc_msgSend(base.Handle, selRunInNewThreadHandle); } else { Messaging.void_objc_msgSendSuper(base.SuperHandle, selRunInNewThreadHandle); } } [Export("addRunLoop:")] public virtual void AddRunLoop(NSRunLoop runLoop) { if (runLoop == null) { throw new ArgumentNullException("runLoop"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selAddRunLoop_Handle, runLoop.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selAddRunLoop_Handle, runLoop.Handle); } } [Export("removeRunLoop:")] public virtual void RemoveRunLoop(NSRunLoop runLoop) { if (runLoop == null) { throw new ArgumentNullException("runLoop"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveRunLoop_Handle, runLoop.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveRunLoop_Handle, runLoop.Handle); } } [Export("serviceConnectionWithName:rootObject:usingNameServer:")] public static NSConnection CreateService(string name, NSObject root, NSPortNameServer server) { if (name == null) { throw new ArgumentNullException("name"); } if (root == null) { throw new ArgumentNullException("root"); } if (server == null) { throw new ArgumentNullException("server"); } IntPtr intPtr = NSString.CreateNative(name); NSConnection result = (NSConnection)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr(class_ptr, selServiceConnectionWithNameRootObjectUsingNameServer_Handle, intPtr, root.Handle, server.Handle)); NSString.ReleaseNative(intPtr); return result; } [Export("serviceConnectionWithName:rootObject:")] public static NSConnection CreateService(string name, NSObject root) { if (name == null) { throw new ArgumentNullException("name"); } if (root == null) { throw new ArgumentNullException("root"); } IntPtr intPtr = NSString.CreateNative(name); NSConnection result = (NSConnection)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(class_ptr, selServiceConnectionWithNameRootObject_Handle, intPtr, root.Handle)); NSString.ReleaseNative(intPtr); return result; } [Export("registerName:")] public virtual bool RegisterName(string name) { if (name == null) { throw new ArgumentNullException("name"); } IntPtr intPtr = NSString.CreateNative(name); bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr(base.SuperHandle, selRegisterName_Handle, intPtr) : Messaging.bool_objc_msgSend_IntPtr(base.Handle, selRegisterName_Handle, intPtr); NSString.ReleaseNative(intPtr); return result; } [Export("registerName:withNameServer:")] public virtual bool RegisterName(string name, NSPortNameServer server) { if (name == null) { throw new ArgumentNullException("name"); } if (server == null) { throw new ArgumentNullException("server"); } IntPtr intPtr = NSString.CreateNative(name); bool result = (!IsDirectBinding) ? Messaging.bool_objc_msgSendSuper_IntPtr_IntPtr(base.SuperHandle, selRegisterNameWithNameServer_Handle, intPtr, server.Handle) : Messaging.bool_objc_msgSend_IntPtr_IntPtr(base.Handle, selRegisterNameWithNameServer_Handle, intPtr, server.Handle); NSString.ReleaseNative(intPtr); return result; } [Export("connectionWithRegisteredName:host:")] public static NSConnection LookupService(string name, string hostName) { if (name == null) { throw new ArgumentNullException("name"); } IntPtr intPtr = NSString.CreateNative(name); IntPtr intPtr2 = NSString.CreateNative(hostName); NSConnection result = (NSConnection)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(class_ptr, selConnectionWithRegisteredNameHost_Handle, intPtr, intPtr2)); NSString.ReleaseNative(intPtr); NSString.ReleaseNative(intPtr2); return result; } [Export("connectionWithRegisteredName:host:usingNameServer:")] public static NSConnection LookupService(string name, string hostName, NSPortNameServer server) { if (name == null) { throw new ArgumentNullException("name"); } if (server == null) { throw new ArgumentNullException("server"); } IntPtr intPtr = NSString.CreateNative(name); IntPtr intPtr2 = NSString.CreateNative(hostName); NSConnection result = (NSConnection)Runtime.GetNSObject(Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr(class_ptr, selConnectionWithRegisteredNameHostUsingNameServer_Handle, intPtr, intPtr2, server.Handle)); NSString.ReleaseNative(intPtr); NSString.ReleaseNative(intPtr2); return result; } [Export("rootProxy")] internal virtual IntPtr _GetRootProxy() { if (IsDirectBinding) { return Messaging.IntPtr_objc_msgSend(base.Handle, selRootProxyHandle); } return Messaging.IntPtr_objc_msgSendSuper(base.SuperHandle, selRootProxyHandle); } [Export("rootProxyForConnectionWithRegisteredName:host:")] internal static IntPtr _GetRootProxy(string name, string hostName) { if (name == null) { throw new ArgumentNullException("name"); } IntPtr intPtr = NSString.CreateNative(name); IntPtr intPtr2 = NSString.CreateNative(hostName); IntPtr result = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr(class_ptr, selRootProxyForConnectionWithRegisteredNameHost_Handle, intPtr, intPtr2); NSString.ReleaseNative(intPtr); NSString.ReleaseNative(intPtr2); return result; } [Export("rootProxyForConnectionWithRegisteredName:host:usingNameServer:")] internal static IntPtr _GetRootProxy(string name, string hostName, NSPortNameServer server) { if (name == null) { throw new ArgumentNullException("name"); } if (server == null) { throw new ArgumentNullException("server"); } IntPtr intPtr = NSString.CreateNative(name); IntPtr intPtr2 = NSString.CreateNative(hostName); IntPtr result = Messaging.IntPtr_objc_msgSend_IntPtr_IntPtr_IntPtr(class_ptr, selRootProxyForConnectionWithRegisteredNameHostUsingNameServer_Handle, intPtr, intPtr2, server.Handle); NSString.ReleaseNative(intPtr); NSString.ReleaseNative(intPtr2); return result; } [Export("addRequestMode:")] public virtual void AddRequestMode(NSString runLoopMode) { if (runLoopMode == null) { throw new ArgumentNullException("runLoopMode"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selAddRequestMode_Handle, runLoopMode.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selAddRequestMode_Handle, runLoopMode.Handle); } } [Export("removeRequestMode:")] public virtual void RemoveRequestMode(NSString runLoopMode) { if (runLoopMode == null) { throw new ArgumentNullException("runLoopMode"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selRemoveRequestMode_Handle, runLoopMode.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selRemoveRequestMode_Handle, runLoopMode.Handle); } } [Export("invalidate")] public virtual void Invalidate() { if (IsDirectBinding) { Messaging.void_objc_msgSend(base.Handle, selInvalidateHandle); } else { Messaging.void_objc_msgSendSuper(base.SuperHandle, selInvalidateHandle); } } [Export("dispatchWithComponents:")] public virtual void Dispatch(NSArray components) { if (components == null) { throw new ArgumentNullException("components"); } if (IsDirectBinding) { Messaging.void_objc_msgSend_IntPtr(base.Handle, selDispatchWithComponents_Handle, components.Handle); } else { Messaging.void_objc_msgSendSuper_IntPtr(base.SuperHandle, selDispatchWithComponents_Handle, components.Handle); } } protected override void Dispose(bool disposing) { base.Dispose(disposing); if (base.Handle == IntPtr.Zero) { __mt_RootObject_var = null; __mt_RemoteObjects_var = null; __mt_LocalObjects_var = null; __mt_RequestModes_var = null; __mt_ReceivePort_var = null; __mt_SendPort_var = null; __mt_Statistics_var = null; __mt_WeakDelegate_var = null; } } } }