1
0

HttpServer.swift 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. //
  2. // HttpServer2.swift
  3. // Swifter
  4. //
  5. // Copyright (c) 2014-2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import Foundation
  8. public class HttpServer: HttpServerIO {
  9. public static let VERSION = "1.1.3"
  10. private let router = HttpRouter()
  11. public override init() {
  12. self.DELETE = MethodRoute(method: "DELETE", router: router)
  13. self.UPDATE = MethodRoute(method: "UPDATE", router: router)
  14. self.HEAD = MethodRoute(method: "HEAD", router: router)
  15. self.POST = MethodRoute(method: "POST", router: router)
  16. self.GET = MethodRoute(method: "GET", router: router)
  17. self.PUT = MethodRoute(method: "PUT", router: router)
  18. self.delete = MethodRoute(method: "DELETE", router: router)
  19. self.update = MethodRoute(method: "UPDATE", router: router)
  20. self.head = MethodRoute(method: "HEAD", router: router)
  21. self.post = MethodRoute(method: "POST", router: router)
  22. self.get = MethodRoute(method: "GET", router: router)
  23. self.put = MethodRoute(method: "PUT", router: router)
  24. }
  25. public var DELETE, UPDATE, HEAD, POST, GET, PUT : MethodRoute
  26. public var delete, update, head, post, get, put : MethodRoute
  27. public func get(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  28. router.register("GET", path: path, handler: handler)
  29. }
  30. public func post(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  31. router.register("POST", path: path, handler: handler)
  32. }
  33. public func put(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  34. router.register("PUT", path: path, handler: handler)
  35. }
  36. public func head(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  37. router.register("HEAD", path: path, handler: handler)
  38. }
  39. public func delete(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  40. router.register("DELETE", path: path, handler: handler)
  41. }
  42. public func update(_ path: String, _ handler: @escaping ((HttpRequest) -> HttpResponse)) {
  43. router.register("UPDATE", path: path, handler: handler)
  44. }
  45. public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
  46. set {
  47. router.register(nil, path: path, handler: newValue)
  48. }
  49. get { return nil }
  50. }
  51. public var routes: [String] {
  52. return router.routes();
  53. }
  54. public var notFoundHandler: ((HttpRequest) -> HttpResponse)?
  55. public var middleware = Array<(HttpRequest) -> HttpResponse?>()
  56. override public func dispatch(_ request: HttpRequest) -> ([String:String], (HttpRequest) -> HttpResponse) {
  57. for layer in middleware {
  58. if let response = layer(request) {
  59. return ([:], { _ in response })
  60. }
  61. }
  62. if let result = router.route(request.method, path: request.path) {
  63. return result
  64. }
  65. if let notFoundHandler = self.notFoundHandler {
  66. return ([:], notFoundHandler)
  67. }
  68. return super.dispatch(request)
  69. }
  70. public struct MethodRoute {
  71. public let method: String
  72. public let router: HttpRouter
  73. public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
  74. set {
  75. router.register(method, path: path, handler: newValue)
  76. }
  77. get { return nil }
  78. }
  79. }
  80. }