diff dstep/foundation/NSStream.d @ 16:19885b43130e

Huge update, the bridge actually works now
author Jacob Carlborg <doob@me.com>
date Sun, 03 Jan 2010 22:06:11 +0100
parents 89f3c3ef1fd2
children b9de51448c6b
line wrap: on
line diff
--- a/dstep/foundation/NSStream.d	Mon Aug 03 15:31:48 2009 +0200
+++ b/dstep/foundation/NSStream.d	Sun Jan 03 22:06:11 2010 +0100
@@ -10,37 +10,185 @@
 import dstep.foundation.NSDictionary;
 import dstep.foundation.NSError;
 import dstep.foundation.NSHost;
-import dstep.foundation.NSInputStream;
+import dstep.foundation.NSObjCRuntime;
 import dstep.foundation.NSObject;
-import dstep.foundation.NSOutputStream;
 import dstep.foundation.NSRunLoop;
 import dstep.foundation.NSString;
 import dstep.objc.bridge.Bridge;
-import dstep.objc.objc : id;
+import dstep.objc.objc;
+
+
 
 import bindings = dstep.foundation.NSStream_bindings;
 
 alias NSUInteger NSStreamStatus;
 alias NSUInteger NSStreamEvent;
 
-const NSString NSStreamSocketSecurityLevelKey;
-const NSString NSStreamSocketSecurityLevelNone;
-const NSString NSStreamSocketSecurityLevelSSLv2;
-const NSString NSStreamSocketSecurityLevelSSLv3;
-const NSString NSStreamSocketSecurityLevelTLSv1;
-const NSString NSStreamSocketSecurityLevelNegotiatedSSL;
-const NSString NSStreamSOCKSProxyConfigurationKey;
-const NSString NSStreamSOCKSProxyHostKey;
-const NSString NSStreamSOCKSProxyPortKey;
-const NSString NSStreamSOCKSProxyVersionKey;
-const NSString NSStreamSOCKSProxyUserKey;
-const NSString NSStreamSOCKSProxyPasswordKey;
-const NSString NSStreamSOCKSProxyVersion4;
-const NSString NSStreamSOCKSProxyVersion5;
-const NSString NSStreamDataWrittenToMemoryStreamKey;
-const NSString NSStreamFileCurrentOffsetKey;
-const NSString NSStreamSocketSSLErrorDomain;
-const NSString NSStreamSOCKSErrorDomain;
+private
+{
+	NSString NSStreamSocketSecurityLevelKey_;
+	NSString NSStreamSocketSecurityLevelNone_;
+	NSString NSStreamSocketSecurityLevelSSLv2_;
+	NSString NSStreamSocketSecurityLevelSSLv3_;
+	NSString NSStreamSocketSecurityLevelTLSv1_;
+	NSString NSStreamSocketSecurityLevelNegotiatedSSL_;
+	NSString NSStreamSOCKSProxyConfigurationKey_;
+	NSString NSStreamSOCKSProxyHostKey_;
+	NSString NSStreamSOCKSProxyPortKey_;
+	NSString NSStreamSOCKSProxyVersionKey_;
+	NSString NSStreamSOCKSProxyUserKey_;
+	NSString NSStreamSOCKSProxyPasswordKey_;
+	NSString NSStreamSOCKSProxyVersion4_;
+	NSString NSStreamSOCKSProxyVersion5_;
+	NSString NSStreamDataWrittenToMemoryStreamKey_;
+	NSString NSStreamFileCurrentOffsetKey_;
+	NSString NSStreamSocketSSLErrorDomain_;
+	NSString NSStreamSOCKSErrorDomain_;
+}
+
+NSString NSStreamSocketSecurityLevelKey ()
+{
+	if (NSStreamSocketSecurityLevelKey_)
+		return NSStreamSocketSecurityLevelKey_;
+		
+	return NSStreamSocketSecurityLevelKey_ = new NSString(bindings.NSStreamSocketSecurityLevelKey);
+}
+
+NSString NSStreamSocketSecurityLevelNone ()
+{
+	if (NSStreamSocketSecurityLevelNone_)
+		return NSStreamSocketSecurityLevelNone_;
+		
+	return NSStreamSocketSecurityLevelNone_ = new NSString(bindings.NSStreamSocketSecurityLevelNone);
+}
+
+NSString NSStreamSocketSecurityLevelSSLv2 ()
+{
+	if (NSStreamSocketSecurityLevelSSLv2_)
+		return NSStreamSocketSecurityLevelSSLv2_;
+		
+	return NSStreamSocketSecurityLevelSSLv2_ = new NSString(bindings.NSStreamSocketSecurityLevelSSLv2);
+}
+
+NSString NSStreamSocketSecurityLevelSSLv3 ()
+{
+	if (NSStreamSocketSecurityLevelSSLv3_)
+		return NSStreamSocketSecurityLevelSSLv3_;
+		
+	return NSStreamSocketSecurityLevelSSLv3_ = new NSString(bindings.NSStreamSocketSecurityLevelSSLv3);
+}
+
+NSString NSStreamSocketSecurityLevelTLSv1 ()
+{
+	if (NSStreamSocketSecurityLevelTLSv1_)
+		return NSStreamSocketSecurityLevelTLSv1_;
+		
+	return NSStreamSocketSecurityLevelTLSv1_ = new NSString(bindings.NSStreamSocketSecurityLevelTLSv1);
+}
+
+NSString NSStreamSocketSecurityLevelNegotiatedSSL ()
+{
+	if (NSStreamSocketSecurityLevelNegotiatedSSL_)
+		return NSStreamSocketSecurityLevelNegotiatedSSL_;
+		
+	return NSStreamSocketSecurityLevelNegotiatedSSL_ = new NSString(bindings.NSStreamSocketSecurityLevelNegotiatedSSL);
+}
+
+NSString NSStreamSOCKSProxyConfigurationKey ()
+{
+	if (NSStreamSOCKSProxyConfigurationKey_)
+		return NSStreamSOCKSProxyConfigurationKey_;
+		
+	return NSStreamSOCKSProxyConfigurationKey_ = new NSString(bindings.NSStreamSOCKSProxyConfigurationKey);
+}
+
+NSString NSStreamSOCKSProxyHostKey ()
+{
+	if (NSStreamSOCKSProxyHostKey_)
+		return NSStreamSOCKSProxyHostKey_;
+		
+	return NSStreamSOCKSProxyHostKey_ = new NSString(bindings.NSStreamSOCKSProxyHostKey);
+}
+
+NSString NSStreamSOCKSProxyPortKey ()
+{
+	if (NSStreamSOCKSProxyPortKey_)
+		return NSStreamSOCKSProxyPortKey_;
+		
+	return NSStreamSOCKSProxyPortKey_ = new NSString(bindings.NSStreamSOCKSProxyPortKey);
+}
+
+NSString NSStreamSOCKSProxyVersionKey ()
+{
+	if (NSStreamSOCKSProxyVersionKey_)
+		return NSStreamSOCKSProxyVersionKey_;
+		
+	return NSStreamSOCKSProxyVersionKey_ = new NSString(bindings.NSStreamSOCKSProxyVersionKey);
+}
+
+NSString NSStreamSOCKSProxyUserKey ()
+{
+	if (NSStreamSOCKSProxyUserKey_)
+		return NSStreamSOCKSProxyUserKey_;
+		
+	return NSStreamSOCKSProxyUserKey_ = new NSString(bindings.NSStreamSOCKSProxyUserKey);
+}
+
+NSString NSStreamSOCKSProxyPasswordKey ()
+{
+	if (NSStreamSOCKSProxyPasswordKey_)
+		return NSStreamSOCKSProxyPasswordKey_;
+		
+	return NSStreamSOCKSProxyPasswordKey_ = new NSString(bindings.NSStreamSOCKSProxyPasswordKey);
+}
+
+NSString NSStreamSOCKSProxyVersion4 ()
+{
+	if (NSStreamSOCKSProxyVersion4_)
+		return NSStreamSOCKSProxyVersion4_;
+		
+	return NSStreamSOCKSProxyVersion4_ = new NSString(bindings.NSStreamSOCKSProxyVersion4);
+}
+
+NSString NSStreamSOCKSProxyVersion5 ()
+{
+	if (NSStreamSOCKSProxyVersion5_)
+		return NSStreamSOCKSProxyVersion5_;
+		
+	return NSStreamSOCKSProxyVersion5_ = new NSString(bindings.NSStreamSOCKSProxyVersion5);
+}
+
+NSString NSStreamDataWrittenToMemoryStreamKey ()
+{
+	if (NSStreamDataWrittenToMemoryStreamKey_)
+		return NSStreamDataWrittenToMemoryStreamKey_;
+		
+	return NSStreamDataWrittenToMemoryStreamKey_ = new NSString(bindings.NSStreamDataWrittenToMemoryStreamKey);
+}
+
+NSString NSStreamFileCurrentOffsetKey ()
+{
+	if (NSStreamFileCurrentOffsetKey_)
+		return NSStreamFileCurrentOffsetKey_;
+		
+	return NSStreamFileCurrentOffsetKey_ = new NSString(bindings.NSStreamFileCurrentOffsetKey);
+}
+
+NSString NSStreamSocketSSLErrorDomain ()
+{
+	if (NSStreamSocketSSLErrorDomain_)
+		return NSStreamSocketSSLErrorDomain_;
+		
+	return NSStreamSocketSSLErrorDomain_ = new NSString(bindings.NSStreamSocketSSLErrorDomain);
+}
+
+NSString NSStreamSOCKSErrorDomain ()
+{
+	if (NSStreamSOCKSErrorDomain_)
+		return NSStreamSOCKSErrorDomain_;
+		
+	return NSStreamSOCKSErrorDomain_ = new NSString(bindings.NSStreamSOCKSErrorDomain);
+}
 
 enum
 {
@@ -64,32 +212,118 @@
 	NSStreamEventEndEncountered = 1 << 4
 }
 
-static this ()
-{
-	NSStreamSocketSecurityLevelKey = new NSString(bindings.NSStreamSocketSecurityLevelKey);
-	NSStreamSocketSecurityLevelNone = new NSString(bindings.NSStreamSocketSecurityLevelNone);
-	NSStreamSocketSecurityLevelSSLv2 = new NSString(bindings.NSStreamSocketSecurityLevelSSLv2);
-	NSStreamSocketSecurityLevelSSLv3 = new NSString(bindings.NSStreamSocketSecurityLevelSSLv3);
-	NSStreamSocketSecurityLevelTLSv1 = new NSString(bindings.NSStreamSocketSecurityLevelTLSv1);
-	NSStreamSocketSecurityLevelNegotiatedSSL = new NSString(bindings.NSStreamSocketSecurityLevelNegotiatedSSL);
-	NSStreamSOCKSProxyConfigurationKey = new NSString(bindings.NSStreamSOCKSProxyConfigurationKey);
-	NSStreamSOCKSProxyHostKey = new NSString(bindings.NSStreamSOCKSProxyHostKey);
-	NSStreamSOCKSProxyPortKey = new NSString(bindings.NSStreamSOCKSProxyPortKey);
-	NSStreamSOCKSProxyVersionKey = new NSString(bindings.NSStreamSOCKSProxyVersionKey);
-	NSStreamSOCKSProxyUserKey = new NSString(bindings.NSStreamSOCKSProxyUserKey);
-	NSStreamSOCKSProxyPasswordKey = new NSString(bindings.NSStreamSOCKSProxyPasswordKey);
-	NSStreamSOCKSProxyVersion4 = new NSString(bindings.NSStreamSOCKSProxyVersion4);
-	NSStreamSOCKSProxyVersion5 = new NSString(bindings.NSStreamSOCKSProxyVersion5);
-	NSStreamDataWrittenToMemoryStreamKey = new NSString(bindings.NSStreamDataWrittenToMemoryStreamKey);
-	NSStreamFileCurrentOffsetKey = new NSString(bindings.NSStreamFileCurrentOffsetKey);
-	NSStreamSocketSSLErrorDomain = new NSString(bindings.NSStreamSocketSSLErrorDomain);
-	NSStreamSOCKSErrorDomain = new NSString(bindings.NSStreamSOCKSErrorDomain);
-}
+const TNSStreamDelegateEventExtensions = `
+
+	void stream (NSStream aStream, NSStreamEvent eventCode)
+	{
+		return invokeObjcSelf!(void, "stream:handleEvent:", NSStream, NSStreamEvent)(aStream, eventCode);
+	}
+	
+	//mixin ObjcBindMethod!(stream, "stream:handleEvent:");
+`;
+
+const TNSOutputStreamExtensions = `
+
+	Object initToMemory ()
+	{
+		return invokeObjcSelf!(Object, "initToMemory");
+	}
+
+	this ()
+	{
+		typeof(this).alloc.initToMemory();
+	}
+
+	Object initToBuffer (char* buffer, NSUInteger capacity)
+	{
+		return invokeObjcSelf!(Object, "initToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
+	}
+
+	this (char* buffer, NSUInteger capacity)
+	{
+		typeof(this).alloc.initToBuffer(buffer, capacity);
+	}
+
+	Object initToFileAtPath (NSString path, bool shouldAppend)
+	{
+		return invokeObjcSelf!(Object, "initToFileAtPath:append:", NSString, bool)(path, shouldAppend);
+	}
+
+	this (NSString path, bool shouldAppend)
+	{
+		typeof(this).alloc.initToFileAtPath(path, shouldAppend);
+	}
+
+	static Object outputStreamToMemory ()
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToMemory");
+	}
+
+	static Object outputStreamToBuffer (char* buffer, NSUInteger capacity)
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
+	}
+
+	static Object outputStreamToFileAtPath (NSString path, bool shouldAppend)
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToFileAtPath:append:", NSString, bool)(path, shouldAppend);
+	}
+`;
+
+const TNSSocketStreamCreationExtensions = `
+
+	static void getStreamsToHost (NSHost host, NSInteger port, NSInputStream** inputStream, NSOutputStream** outputStream)
+	{
+		return invokeObjcSuperClass!(void, "getStreamsToHost:port:inputStream:outputStream:", NSHost, NSInteger, NSInputStream**, NSOutputStream**)(host, port, inputStream, outputStream);
+	}
+`;
+
+const TNSInputStreamExtensions = `
+
+	Object initWithData (NSData data)
+	{
+		return invokeObjcSelf!(Object, "initWithData:", NSData)(data);
+	}
+
+	this (NSData data)
+	{
+		typeof(this).alloc.initWithData(data);
+	}
+
+	Object initWithFileAtPath (NSString path)
+	{
+		return invokeObjcSelf!(Object, "initWithFileAtPath:", NSString)(path);
+	}
+
+	this (NSString path)
+	{
+		typeof(this).alloc.initWithFileAtPath(path);
+	}
+
+	static Object inputStreamWithData (NSData data)
+	{
+		return invokeObjcSuperClass!(Object, "inputStreamWithData:", NSData)(data);
+	}
+
+	static Object inputStreamWithFileAtPath (NSString path)
+	{
+		return invokeObjcSuperClass!(Object, "inputStreamWithFileAtPath:", NSString)(path);
+	}
+`;
 
 class NSStream : NSObject
 {
-	mixin ObjcWrap;
-	mixin TNSSocketStreamCreationExtensions;
+	mixin (ObjcWrap);
+	
+	this ()
+	{
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
+	}
 
 	void open ()
 	{
@@ -140,12 +374,27 @@
 	{
 		return invokeObjcSelf!(NSError, "streamError");
 	}
+	
+	// TNSSocketStreamCreationExtensions
+	static void getStreamsToHost (NSHost host, NSInteger port, NSInputStream** inputStream, NSOutputStream** outputStream)
+	{
+		return invokeObjcSuperClass!(void, "getStreamsToHost:port:inputStream:outputStream:", NSHost, NSInteger, NSInputStream**, NSOutputStream**)(host, port, inputStream, outputStream);
+	}
 }
 
 class NSOutputStream : NSStream
 {
-	mixin ObjcWrap;
-	mixin TNSOutputStreamExtensions;
+	mixin (ObjcWrap);
+	
+	this ()
+	{
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
+	}
 
 	NSInteger write (char* buffer, NSUInteger len)
 	{
@@ -156,150 +405,106 @@
 	{
 		return invokeObjcSelf!(bool, "hasSpaceAvailable");
 	}
+	
+	// TNSOutputStreamExtensions
+	Object initToMemory ()
+	{
+		return invokeObjcSelf!(Object, "initToMemory");
+	}
+	
+	Object initToBuffer (char* buffer, NSUInteger capacity)
+	{
+		return invokeObjcSelf!(Object, "initToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
+	}
+	
+	this (char* buffer, NSUInteger capacity)
+	{
+		typeof(this).alloc.initToBuffer(buffer, capacity);
+	}
+	
+	Object initToFileAtPath (NSString path, bool shouldAppend)
+	{
+		return invokeObjcSelf!(Object, "initToFileAtPath:append:", NSString, bool)(path, shouldAppend);
+	}
+	
+	this (NSString path, bool shouldAppend)
+	{
+		typeof(this).alloc.initToFileAtPath(path, shouldAppend);
+	}
+	
+	static Object outputStreamToMemory ()
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToMemory");
+	}
+	
+	static Object outputStreamToBuffer (char* buffer, NSUInteger capacity)
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
+	}
+	
+	static Object outputStreamToFileAtPath (NSString path, bool shouldAppend)
+	{
+		return invokeObjcSuperClass!(Object, "outputStreamToFileAtPath:append:", NSString, bool)(path, shouldAppend);
+	}
 }
 
 class NSInputStream : NSStream
 {
-	mixin ObjcWrap;
-	mixin TNSInputStreamExtensions;
+	mixin (ObjcWrap);
+	
+	this ()
+	{
+		super(typeof(this).alloc.init.objcObject);
+	}
+	
+	typeof(this) init ()
+	{
+		return invokeObjcSelf!(typeof(this), "init");
+	}
 
 	NSInteger read (char* buffer, NSUInteger len)
 	{
 		return invokeObjcSelf!(NSInteger, "read:maxLength:", char*, NSUInteger)(buffer, len);
 	}
 
-	bool getBuffer (uint8_t** buffer, NSUInteger* len)
+	bool getBuffer (ubyte** buffer, NSUInteger* len)
 	{
-		return invokeObjcSelf!(bool, "getBuffer:length:", uint8_t**, NSUInteger*)(buffer, len);
+		return invokeObjcSelf!(bool, "getBuffer:length:", ubyte**, NSUInteger*)(buffer, len);
 	}
 
 	bool hasBytesAvailable ()
 	{
 		return invokeObjcSelf!(bool, "hasBytesAvailable");
 	}
-}
-
-template TNSStreamDelegateEventExtensions ()
-{
-	void stream (NSStream aStream, uint eventCode);
-}
-
-template TNSOutputStreamExtensions ()
-{
-	Object initToMemory ()
-	{
-		return invokeObjcSelf!(Object, "initToMemory");
-	}
-
-	this ()
-	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initToMemory")(objcObject);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
-	}
-
-	Object initToBuffer (char* buffer, NSUInteger capacity)
-	{
-		return invokeObjcSelf!(Object, "initToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
-	}
-
-	this (char* buffer, NSUInteger capacity)
-	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initToBuffer:capacity:", char*, NSUInteger)(objcObject, buffer, capacity);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
-	}
-
-	Object initToFileAtPath (NSString path, bool shouldAppend)
-	{
-		return invokeObjcSelf!(Object, "initToFileAtPath:append:", NSString, bool)(path, shouldAppend);
-	}
-
-	this (NSString path, bool shouldAppend)
-	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initToFileAtPath:append:", NSString, bool)(objcObject, path, shouldAppend);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
-	}
-
-	static Object outputStreamToMemory ()
-	{
-		return invokeObjcSelfClass!(Object, "outputStreamToMemory");
-	}
-
-	static Object outputStreamToBuffer (char* buffer, NSUInteger capacity)
-	{
-		return invokeObjcSelfClass!(Object, "outputStreamToBuffer:capacity:", char*, NSUInteger)(buffer, capacity);
-	}
-
-	static Object outputStreamToFileAtPath (NSString path, bool shouldAppend)
-	{
-		return invokeObjcSelfClass!(Object, "outputStreamToFileAtPath:append:", NSString, bool)(path, shouldAppend);
-	}
-}
-
-template TNSSocketStreamCreationExtensions ()
-{
-	static void getStreamsToHost (NSHost host, NSInteger port, NSInputStream** inputStream, NSOutputStream** outputStream)
-	{
-		return invokeObjcSelfClass!(void, "getStreamsToHost:port:inputStream:outputStream:", NSHost, NSInteger, NSInputStream**, NSOutputStream**)(host, port, inputStream, outputStream);
-	}
-}
-
-template TNSInputStreamExtensions ()
-{
+	
+	// TNSInputStreamExtensions
 	Object initWithData (NSData data)
 	{
 		return invokeObjcSelf!(Object, "initWithData:", NSData)(data);
 	}
-
+	
 	this (NSData data)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithData:", NSData)(objcObject, data);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithData(data);
 	}
-
+	
 	Object initWithFileAtPath (NSString path)
 	{
 		return invokeObjcSelf!(Object, "initWithFileAtPath:", NSString)(path);
 	}
-
+	
 	this (NSString path)
 	{
-		objcObject = Bridge.invokeObjcClassMethod!(id, "alloc")(objcClass);
-		id result = Bridge.invokeObjcMethod!(id, "initWithFileAtPath:", NSString)(objcObject, path);
-
-		if (result)
-			objcObject = ret;
-
-		dObject = this;
+		typeof(this).alloc.initWithFileAtPath(path);
 	}
-
+	
 	static Object inputStreamWithData (NSData data)
 	{
-		return invokeObjcSelfClass!(Object, "inputStreamWithData:", NSData)(data);
+		return invokeObjcSuperClass!(Object, "inputStreamWithData:", NSData)(data);
 	}
-
+	
 	static Object inputStreamWithFileAtPath (NSString path)
 	{
-		return invokeObjcSelfClass!(Object, "inputStreamWithFileAtPath:", NSString)(path);
+		return invokeObjcSuperClass!(Object, "inputStreamWithFileAtPath:", NSString)(path);
 	}
-}
-
+}
\ No newline at end of file