App.swift 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. //
  2. // App.swift
  3. // Swifter
  4. //
  5. // Copyright (c) 2014-2016 Damian Kołakowski. All rights reserved.
  6. //
  7. import Foundation
  8. public class App {
  9. private let server = HttpServer()
  10. public init() { }
  11. public func run(port: in_port_t = 9080, _ databasePath: String) throws -> Void {
  12. // Open database connection.
  13. DatabaseReflection.sharedDatabase = try SQLite.open(databasePath)
  14. defer {
  15. DatabaseReflection.sharedDatabase?.close()
  16. }
  17. // Watch process signals.
  18. Process.watchSignals { switch $0 {
  19. case SIGTERM, SIGINT:
  20. self.server.stop()
  21. DatabaseReflection.sharedDatabase?.close()
  22. exit(EXIT_SUCCESS)
  23. case SIGHUP:
  24. print("//TODO - Reload config.")
  25. default:
  26. print("Unknown signal received: \(signal).")
  27. }
  28. }
  29. // Add simple logging.
  30. self.server.middleware.append({ r in
  31. print("\(r.method) - \(r.path)")
  32. return nil
  33. })
  34. // Boot the server.
  35. print("Starting Swifter (\(HttpServer.VERSION)) at port \(port) with PID \(Process.PID)...")
  36. try self.server.start(port)
  37. print("Server started. Waiting for requests....")
  38. #if os(Linux)
  39. while true { }
  40. #else
  41. NSRunLoop.current().run()
  42. #endif
  43. }
  44. }