ソースを参照

Added currentWorkingDirectory method to 'File' class.
Fixed warnings for WebSocket tests.

Damian Kołakowski 10 年 前
コミット
4d8fdf0265

+ 6 - 6
Sources/DemoServer.swift

@@ -7,13 +7,13 @@
 
 import Foundation
 
-public func demoServer(publicDir: String?) -> HttpServer {
+public func demoServer(publicDir: String) -> HttpServer {
+    
+    print(publicDir)
     
     let server = HttpServer()
     
-    if let publicDir = publicDir {
-        server["/resources/:file"] = HttpHandlers.directory(publicDir)
-    }
+    server["/public/:path"] = HttpHandlers.shareFilesFromDirectory(publicDir)
     
     server["/files/:path"] = HttpHandlers.directoryBrowser("/")
 
@@ -49,7 +49,7 @@ public func demoServer(publicDir: String?) -> HttpServer {
     }
     
     server.GET["/upload"] = { r in
-        if let rootDir = publicDir, html = NSData(contentsOfFile:"\(rootDir)/file.html") {
+        if let html = NSData(contentsOfFile:"\(publicDir)/file.html") {
             var array = [UInt8](count: html.length, repeatedValue: 0)
             html.getBytes(&array, length: html.length)
             return HttpResponse.RAW(200, "OK", nil, { $0.write(array) })
@@ -66,7 +66,7 @@ public func demoServer(publicDir: String?) -> HttpServer {
     }
     
     server.GET["/login"] = { r in
-        if let rootDir = publicDir, html = NSData(contentsOfFile:"\(rootDir)/login.html") {
+        if let html = NSData(contentsOfFile:"\(publicDir)/login.html") {
             var array = [UInt8](count: html.length, repeatedValue: 0)
             html.getBytes(&array, length: html.length)
             return HttpResponse.RAW(200, "OK", nil, { $0.write(array) })

+ 12 - 0
Sources/File.swift

@@ -16,6 +16,7 @@ public enum FileError: ErrorType {
     case WriteFailed(String)
     case ReadFailed(String)
     case SeekFailed(String)
+    case GetCurrentWorkingDirectory(String)
 }
 
 public class File {
@@ -40,6 +41,17 @@ public class File {
         return File(file)
     }
     
+    public static func currentWorkingDirectory() throws -> String {
+        let path = getcwd(nil, 0)
+        if path == nil {
+            throw FileError.GetCurrentWorkingDirectory(descriptionOfLastError())
+        }
+        guard let result = String.fromCString(path) else {
+            throw FileError.GetCurrentWorkingDirectory("Could not convert getcwd(...)'s result to String.")
+        }
+        return result
+    }
+    
     private let pointer: UnsafeMutablePointer<FILE>
     
     public init(_ pointer: UnsafeMutablePointer<FILE>) {

+ 2 - 2
Sources/HttpHandlers+WebSockets.swift

@@ -24,7 +24,7 @@ extension HttpHandlers {
             }
             let protocolSessionClosure: (Socket -> Void) = { socket in
                 let session = WebSocketSession(socket)
-                while let frame = try? session.readFrame(socket) {
+                while let frame = try? session.readFrame() {
                     switch frame.opcode {
                     case .Text:
                         if let handleText = text {
@@ -122,7 +122,7 @@ extension HttpHandlers {
             return encodedBytes
         }
         
-        public func readFrame(socket: Socket) throws -> Frame {
+        public func readFrame() throws -> Frame {
             let frm = Frame()
             let fst = try socket.read()
             frm.fin = fst & 0x80 != 0

+ 1 - 3
SwifterSampleOSX/main.swift

@@ -8,10 +8,8 @@ import Foundation
 import Swifter
 
 
-let server = demoServer(NSBundle.mainBundle().resourcePath!)
-
 do {
-    server["/sharedir/:path"] = HttpHandlers.shareFilesFromDirectory("/Users/damiankolakowski/Desktop")
+    let server = demoServer(try File.currentWorkingDirectory())
     server["/SwiftyJSON"] = { request in
         let js: JSON = ["return": "OK", "isItAJSON": true, "code" : 200]
         return .OK(.Custom(js, { object in

+ 1 - 1
SwifterSampleiOS/Base.lproj/Main.storyboard

@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15B42" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
+<document type="com.apple.InterfaceBuilder3.CocoaTouch.Storyboard.XIB" version="3.0" toolsVersion="9531" systemVersion="15D21" targetRuntime="iOS.CocoaTouch" propertyAccessControl="none" useAutolayout="YES" useTraitCollections="YES" initialViewController="BYZ-38-t0r">
     <dependencies>
         <deployment identifier="iOS"/>
         <plugIn identifier="com.apple.InterfaceBuilder.IBCocoaTouchPlugin" version="9529"/>

+ 2 - 4
SwifterSampleiOS/ViewController.swift

@@ -13,15 +13,13 @@ class ViewController: UIViewController {
     
     override func viewDidLoad() {
         super.viewDidLoad()
-        
-        let server = HttpServer();
-        
         do {
+            let server = demoServer(NSBundle.mainBundle().resourcePath!)
             try server.start(9080)
+            self.server = server
         } catch {
             print("Server start error: \(error)")
         }
-        self.server = server
     }
     
     @IBAction func likedThis(sender: UIButton) {

+ 1 - 3
SwifterTestsCommon/SwifterTestsWebSocketSession.swift

@@ -97,7 +97,7 @@ class SwifterTestsWebSocketSession: XCTestCase {
             XCTAssert(false, "Parser should accept Pong opcode without any errors.")
         }
         
-        for var opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
+        for opcode in [3, 4, 5, 6, 7, 11, 12, 13, 14, 15] {
             do {
                 try session.readFrame(TestSocket([UInt8(opcode), 0b1000_0000, 0, 0, 0, 0]))
                 XCTAssert(false, "Parse should throw an error for unknown opcode: \(opcode)")
@@ -107,7 +107,5 @@ class SwifterTestsWebSocketSession: XCTestCase {
                 XCTAssert(false, "Parse should throw UnknownOpCode error for unknown opcode (was \(error)).")
             }
         }
-        
     }
-    
 }