diff dstep/foundation/NSStream.d @ 14:89f3c3ef1fd2

Added the Foundation framework
author Jacob Carlborg <doob@me.com>
date Mon, 03 Aug 2009 15:23:15 +0200
parents
children 19885b43130e
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/dstep/foundation/NSStream.d	Mon Aug 03 15:23:15 2009 +0200
@@ -0,0 +1,305 @@
+/**
+ * Copyright: Copyright (c) 2009 Jacob Carlborg.
+ * Authors: Jacob Carlborg
+ * Version: Initial created: Aug 3, 2009 
+ * License: $(LINK2 http://www.boost.org/LICENSE_1_0.txt, Boost Software License 1.0)
+ */
+module dstep.foundation.NSStream;
+
+import dstep.foundation.NSData;
+import dstep.foundation.NSDictionary;
+import dstep.foundation.NSError;
+import dstep.foundation.NSHost;
+import dstep.foundation.NSInputStream;
+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 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;
+
+enum
+{
+	NSStreamStatusNotOpen = 0,
+	NSStreamStatusOpening = 1,
+	NSStreamStatusOpen = 2,
+	NSStreamStatusReading = 3,
+	NSStreamStatusWriting = 4,
+	NSStreamStatusAtEnd = 5,
+	NSStreamStatusClosed = 6,
+	NSStreamStatusError = 7
+}
+
+enum
+{
+	NSStreamEventNone = 0,
+	NSStreamEventOpenCompleted = 1 << 0,
+	NSStreamEventHasBytesAvailable = 1 << 1,
+	NSStreamEventHasSpaceAvailable = 1 << 2,
+	NSStreamEventErrorOccurred = 1 << 3,
+	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);
+}
+
+class NSStream : NSObject
+{
+	mixin ObjcWrap;
+	mixin TNSSocketStreamCreationExtensions;
+
+	void open ()
+	{
+		return invokeObjcSelf!(void, "open");
+	}
+
+	void close ()
+	{
+		return invokeObjcSelf!(void, "close");
+	}
+
+	Object delegate_ ()
+	{
+		return invokeObjcSelf!(Object, "delegate");
+	}
+
+	void setDelegate (Object delegate_)
+	{
+		return invokeObjcSelf!(void, "setDelegate:", Object)(delegate_);
+	}
+
+	Object propertyForKey (NSString key)
+	{
+		return invokeObjcSelf!(Object, "propertyForKey:", NSString)(key);
+	}
+
+	bool setProperty (Object property, NSString key)
+	{
+		return invokeObjcSelf!(bool, "setProperty:forKey:", Object, NSString)(property, key);
+	}
+
+	void scheduleInRunLoop (NSRunLoop aRunLoop, NSString mode)
+	{
+		return invokeObjcSelf!(void, "scheduleInRunLoop:forMode:", NSRunLoop, NSString)(aRunLoop, mode);
+	}
+
+	void removeFromRunLoop (NSRunLoop aRunLoop, NSString mode)
+	{
+		return invokeObjcSelf!(void, "removeFromRunLoop:forMode:", NSRunLoop, NSString)(aRunLoop, mode);
+	}
+
+	uint streamStatus ()
+	{
+		return invokeObjcSelf!(uint, "streamStatus");
+	}
+
+	NSError streamError ()
+	{
+		return invokeObjcSelf!(NSError, "streamError");
+	}
+}
+
+class NSOutputStream : NSStream
+{
+	mixin ObjcWrap;
+	mixin TNSOutputStreamExtensions;
+
+	NSInteger write (char* buffer, NSUInteger len)
+	{
+		return invokeObjcSelf!(NSInteger, "write:maxLength:", char*, NSUInteger)(buffer, len);
+	}
+
+	bool hasSpaceAvailable ()
+	{
+		return invokeObjcSelf!(bool, "hasSpaceAvailable");
+	}
+}
+
+class NSInputStream : NSStream
+{
+	mixin ObjcWrap;
+	mixin TNSInputStreamExtensions;
+
+	NSInteger read (char* buffer, NSUInteger len)
+	{
+		return invokeObjcSelf!(NSInteger, "read:maxLength:", char*, NSUInteger)(buffer, len);
+	}
+
+	bool getBuffer (uint8_t** buffer, NSUInteger* len)
+	{
+		return invokeObjcSelf!(bool, "getBuffer:length:", uint8_t**, 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 ()
+{
+	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;
+	}
+
+	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;
+	}
+
+	static Object inputStreamWithData (NSData data)
+	{
+		return invokeObjcSelfClass!(Object, "inputStreamWithData:", NSData)(data);
+	}
+
+	static Object inputStreamWithFileAtPath (NSString path)
+	{
+		return invokeObjcSelfClass!(Object, "inputStreamWithFileAtPath:", NSString)(path);
+	}
+}
+