HttpServer.swift 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091
  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. }
  19. public var DELETE, UPDATE, HEAD, POST, GET, PUT : MethodRoute
  20. public func get(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  21. router.register("GET", path: path, handler: handler)
  22. }
  23. public func post(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  24. router.register("POST", path: path, handler: handler)
  25. }
  26. public func put(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  27. router.register("PUT", path: path, handler: handler)
  28. }
  29. public func head(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  30. router.register("HEAD", path: path, handler: handler)
  31. }
  32. public func delete(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  33. router.register("DELETE", path: path, handler: handler)
  34. }
  35. public func update(_ path: String, _ handler: ((HttpRequest) -> HttpResponse)) {
  36. router.register("UPDATE", path: path, handler: handler)
  37. }
  38. public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
  39. set {
  40. router.register(nil, path: path, handler: newValue)
  41. }
  42. get { return nil }
  43. }
  44. public var routes: [String] {
  45. return router.routes();
  46. }
  47. public var notFoundHandler: ((HttpRequest) -> HttpResponse)?
  48. public var middleware = Array<(HttpRequest) -> HttpResponse?>()
  49. override public func dispatch(_ request: HttpRequest) -> ([String:String], (HttpRequest) -> HttpResponse) {
  50. for layer in middleware {
  51. if let response = layer(request) {
  52. return ([:], { _ in response })
  53. }
  54. }
  55. if let result = router.route(request.method, path: request.path) {
  56. return result
  57. }
  58. if let notFoundHandler = self.notFoundHandler {
  59. return ([:], notFoundHandler)
  60. }
  61. return super.dispatch(request)
  62. }
  63. public struct MethodRoute {
  64. public let method: String
  65. public let router: HttpRouter
  66. public subscript(path: String) -> ((HttpRequest) -> HttpResponse)? {
  67. set {
  68. router.register(method, path: path, handler: newValue)
  69. }
  70. get { return nil }
  71. }
  72. }
  73. }