HttpServer.swift 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. //
  2. // HttpServer.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.4"
  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 subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  28. set {
  29. router.register(nil, path: path, handler: newValue)
  30. }
  31. get { return nil }
  32. }
  33. public var routes: [String] {
  34. return router.routes();
  35. }
  36. public var notFoundHandler: (HttpRequest -> HttpResponse)?
  37. override public func dispatch(method: String, path: String) -> ([String:String], HttpRequest -> HttpResponse) {
  38. if let result = router.route(method, path: path) {
  39. return result
  40. }
  41. if let notFoundHandler = self.notFoundHandler {
  42. return ([:], notFoundHandler)
  43. }
  44. return super.dispatch(method, path: path)
  45. }
  46. public struct MethodRoute {
  47. public let method: String
  48. public let router: HttpRouter
  49. public subscript(path: String) -> (HttpRequest -> HttpResponse)? {
  50. set {
  51. router.register(method, path: path, handler: newValue)
  52. }
  53. get { return nil }
  54. }
  55. }
  56. }