HttpServer.swift 1.9 KB

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