Просмотр исходного кода

Merge pull request #6 from nuudles/master

Fixed server code to compile with Xcode 6 Beta 6.
Damian Kołakowski 12 лет назад
Родитель
Сommit
a559c51d57
3 измененных файлов с 33 добавлено и 30 удалено
  1. 3 3
      Swifter/HttpParser.swift
  2. 12 11
      Swifter/HttpServer.swift
  3. 18 16
      Swifter/Socket.swift

+ 3 - 3
Swifter/HttpParser.swift

@@ -18,7 +18,7 @@ class HttpParser {
             let statusTokens = split(statusLine, { $0 == " " })
             println(statusTokens)
             if ( statusTokens.count < 3 ) {
-                if error { error.memory = HttpParser.err("Invalid status line: \(statusLine)") }
+                if error != nil { error.memory = HttpParser.err("Invalid status line: \(statusLine)") }
                 return nil
             }
             let method = statusTokens[0]
@@ -71,10 +71,10 @@ class HttpParser {
         var n = 0
         do {
             n = nextUInt8(socket)
-            if ( n > 13 /* CR */ ) { characters += Character(UnicodeScalar(n)) }
+            if ( n > 13 /* CR */ ) { characters.append(Character(UnicodeScalar(n))) }
         } while ( n > 0 && n != 10 /* NL */ );
         if ( n == -1 ) {
-            if error { error.memory = Socket.socketLastError("recv(...) failed.") }
+            if error != nil { error.memory = Socket.socketLastError("recv(...) failed.") }
             return nil
         }
         return characters

+ 12 - 11
Swifter/HttpServer.swift

@@ -30,7 +30,7 @@ class HttpServer
         set ( newValue ) {
             if let regex: NSRegularExpression = NSRegularExpression.regularExpressionWithPattern(path, options: expressionOptions, error: nil) {
                 if let newHandler = newValue {
-                    handlers += (expression: regex, handler: newHandler)
+                    handlers.append(expression: regex, handler: newHandler)
                 }
             }
         }
@@ -42,13 +42,13 @@ class HttpServer
         }
         set ( directoryPath ) {
             if let regex = NSRegularExpression.regularExpressionWithPattern(path, options: expressionOptions, error: nil) {
-                handlers += (expression: regex, handler: { (method, path, headers) in
-                    if let result = regex.firstMatchInString(path, options: self.matchingOptions, range: NSMakeRange(0, path.lengthOfBytesUsingEncoding(NSASCIIStringEncoding))) {
-                        let filesPath = directoryPath.stringByAppendingPathComponent(path.bridgeToObjectiveC().substringWithRange(result.rangeAtIndex(1)))
-                        if let fileBody = String.stringWithContentsOfFile(filesPath, encoding: NSASCIIStringEncoding, error: nil) {
-                            return HttpResponse.OK(.RAW(fileBody))
-                        }
-                    }
+                handlers.append(expression: regex, handler: { (method, path, headers) in
+                    let result = regex.firstMatchInString(path, options: self.matchingOptions, range: NSMakeRange(0, path.lengthOfBytesUsingEncoding(NSASCIIStringEncoding)))
+					let myPath: NSString = path
+					let filesPath = directoryPath.stringByAppendingPathComponent(myPath.substringWithRange(result.rangeAtIndex(1)))
+					if let fileBody = String.stringWithContentsOfFile(filesPath, encoding: NSASCIIStringEncoding, error: nil) {
+						return HttpResponse.OK(.RAW(fileBody))
+					}
                     return HttpResponse.NotFound
                 })
             }
@@ -57,7 +57,7 @@ class HttpServer
     
     func routes() -> Array<String> {
         var results = [String]()
-        for (expression,_) in handlers { results += expression.pattern }
+        for (expression,_) in handlers { results.append(expression.pattern) }
         return results
     }
     
@@ -92,8 +92,9 @@ class HttpServer
         Socket.writeStringUTF8(socket, string: "HTTP/1.1 \(response.statusCode()) \(response.reasonPhrase())\r\n")
         let messageBody = response.body()
         if let body = messageBody {
-            let nsdata = body.bridgeToObjectiveC().dataUsingEncoding(NSUTF8StringEncoding)
-            Socket.writeStringUTF8(socket, string: "Content-Length: \(nsdata.length)\r\n")
+			if let nsdata = body.dataUsingEncoding(NSUTF8StringEncoding) {
+				Socket.writeStringUTF8(socket, string: "Content-Length: \(nsdata.length)\r\n")
+			}
         } else {
             Socket.writeStringUTF8(socket, string: "Content-Length: 0\r\n")
         }

+ 18 - 16
Swifter/Socket.swift

@@ -13,7 +13,7 @@ struct Socket {
         
     static func socketLastError(reason:String) -> NSError {
         let errorCode = errno
-        if let errorText = String.fromCString(ConstUnsafePointer(strerror(errorCode))) {
+        if let errorText = String.fromCString(UnsafePointer(strerror(errorCode))) {
             return NSError.errorWithDomain("SOCKET", code: Int(errorCode), userInfo: [NSLocalizedFailureReasonErrorKey : reason, NSLocalizedDescriptionKey : errorText])
         }
         return NSError.errorWithDomain("SOCKET", code: Int(errorCode), userInfo: nil)
@@ -22,13 +22,13 @@ struct Socket {
     static func tcpForListen(port: in_port_t = 8080, error:NSErrorPointer = nil) -> CInt? {
         let s = socket(AF_INET, SOCK_STREAM, 0)
         if ( s == -1 ) {
-            if error { error.memory = socketLastError("socket(...) failed.") }
+            if error != nil { error.memory = socketLastError("socket(...) failed.") }
             return nil
         }
         var value: Int32 = 1;
         if ( setsockopt(s, SOL_SOCKET, SO_REUSEADDR, &value, socklen_t(sizeof(Int32))) == -1 ) {
             release(s)
-            if error { error.memory = socketLastError("setsockopt(...) failed.") }
+            if error != nil { error.memory = socketLastError("setsockopt(...) failed.") }
             return nil
         }
         nosigpipe(s)
@@ -39,12 +39,12 @@ struct Socket {
         memcpy(&sock_addr, &addr, UInt(sizeof(sockaddr_in)))
         if ( bind(s, &sock_addr, socklen_t(sizeof(sockaddr_in))) == -1 ) {
             release(s)
-            if error { error.memory = socketLastError("bind(...) failed.") }
+            if error != nil { error.memory = socketLastError("bind(...) failed.") }
             return nil
         }
         if ( listen(s, 20 /* max pending connection */ ) == -1 ) {
             release(s)
-            if error { error.memory = socketLastError("listen(...) failed.") }
+            if error != nil { error.memory = socketLastError("listen(...) failed.") }
             return nil
         }
         return s
@@ -52,16 +52,18 @@ struct Socket {
     
     static func writeStringUTF8(socket: CInt, string: String, error:NSErrorPointer = nil) -> Bool {
         var sent = 0;
-        let nsdata = string.bridgeToObjectiveC().dataUsingEncoding(NSUTF8StringEncoding)
-        let unsafePointer = ConstUnsafePointer<UInt8>(nsdata.bytes)
-        while ( sent < nsdata.length ) {
-            let s = write(socket, unsafePointer + sent, UInt(nsdata.length - sent))
-            if ( s <= 0 ) {
-                if error { error.memory = socketLastError("write(\(string)) failed.") }
-                return false
-            }
-            sent += s
-        }
+        if let nsdata = string.dataUsingEncoding(NSUTF8StringEncoding)
+		{
+			let unsafePointer = UnsafePointer<UInt8>(nsdata.bytes)
+			while ( sent < nsdata.length ) {
+				let s = write(socket, unsafePointer + sent, UInt(nsdata.length - sent))
+				if ( s <= 0 ) {
+					if error != nil { error.memory = socketLastError("write(\(string)) failed.") }
+					return false
+				}
+				sent += s
+			}
+		}
         return true
     }
     
@@ -72,7 +74,7 @@ struct Socket {
             Socket.nosigpipe(clientSocket)
             return clientSocket
         }
-        if error { error.memory = socketLastError("accept(...) failed.") }
+        if error != nil { error.memory = socketLastError("accept(...) failed.") }
         return nil
     }