HttpServer.swift 1.9 KB

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