HttpServer.swift 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  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. private let router = HttpRouter()
  11. public var routes: [(method: String?, path: String)] {
  12. return router.routes()
  13. }
  14. public subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  15. set {
  16. if let handler = newValue {
  17. self.router.register(nil, path: path, handler: handler)
  18. }
  19. else {
  20. self.router.unregister(nil, path: path)
  21. }
  22. }
  23. get { return nil }
  24. }
  25. public lazy var DELETE : Route = self.lazyBuild("DELETE")
  26. public lazy var UPDATE : Route = self.lazyBuild("UPDATE")
  27. public lazy var HEAD : Route = self.lazyBuild("HEAD")
  28. public lazy var POST : Route = self.lazyBuild("POST")
  29. public lazy var GET : Route = self.lazyBuild("GET")
  30. public lazy var PUT : Route = self.lazyBuild("PUT")
  31. public struct Route {
  32. public let method: String
  33. public let server: HttpServer
  34. public subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  35. set {
  36. if let handler = newValue {
  37. server.router.register(method, path: path, handler: handler)
  38. } else {
  39. server.router.unregister(method, path: path)
  40. }
  41. }
  42. get { return nil }
  43. }
  44. }
  45. private func lazyBuild(method: String) -> Route {
  46. return Route(method: method, server: self)
  47. }
  48. override public func select(method: String, url: String) -> ([String : String], HttpRequest -> HttpResponse) {
  49. if let handler = router.select(method, url: url) {
  50. return handler
  51. }
  52. return super.select(method, url: url)
  53. }
  54. }