Mercurial > projects > dstep
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); + } +} +