1
0

HttpServer.swift 2.7 KB

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