1
0

HttpServer.swift 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. //
  2. // HttpServer2.swift
  3. // Swifter
  4. //
  5. // Created by Damian Kolakowski on 17/12/15.
  6. // Copyright © 2015 Damian Kołakowski. All rights reserved.
  7. //
  8. import Foundation
  9. public class HttpServer: HttpServerIO {
  10. public static let VERSION = "1.0.6"
  11. public override init() { }
  12. private let router = HttpRouter()
  13. public var routes: [(method: String?, path: String)] {
  14. return router.routes();
  15. }
  16. public subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  17. set {
  18. if let handler = newValue {
  19. self.router.register(nil, path: path, handler: handler)
  20. } else {
  21. self.router.unregister(nil, path: path)
  22. }
  23. }
  24. get { return nil }
  25. }
  26. public lazy var DELETE : Route = self.newRoute("DELETE")
  27. public lazy var UPDATE : Route = self.newRoute("UPDATE")
  28. public lazy var HEAD : Route = self.newRoute("HEAD")
  29. public lazy var POST : Route = self.newRoute("POST")
  30. public lazy var GET : Route = self.newRoute("GET")
  31. public lazy var PUT : Route = self.newRoute("PUT")
  32. public struct Route {
  33. public let method: String
  34. public let router: HttpRouter
  35. public subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  36. set {
  37. if let handler = newValue {
  38. router.register(method, path: path, handler: handler)
  39. } else {
  40. router.unregister(method, path: path)
  41. }
  42. }
  43. get { return nil }
  44. }
  45. }
  46. private func newRoute(method: String) -> Route {
  47. return Route(method: method, router: self.router)
  48. }
  49. override public func dispatch(method: String, url: String) -> ([String:String], HttpRequest -> HttpResponse) {
  50. if let handler = router.select(method, url: url) {
  51. return handler
  52. }
  53. return super.dispatch(method, url: url)
  54. }
  55. }