Mercurial > projects > dstep
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