App.swift 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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 { signal in
  19. switch signal {
  20. case SIGTERM, SIGINT:
  21. self.server.stop()
  22. DatabaseReflection.sharedDatabase?.close()
  23. exit(EXIT_SUCCESS)
  24. case SIGINFO:
  25. print("Swifter Version: \(HttpServer.VERSION)")
  26. print(self.server.routes.joinWithSeparator("\n"))
  27. case SIGHUP:
  28. print("//TODO - Reload config.")
  29. default:
  30. print("Unknown signal received: \(signal).")
  31. }
  32. }
  33. // Add simple logging.
  34. self.server.middleware.append({ r in
  35. print("\(r.method) - \(r.path)")
  36. return nil
  37. })
  38. // Boot the server.
  39. print("Starting Swifter (\(HttpServer.VERSION)) at port \(port) with PID \(Process.PID)...")
  40. try self.server.start(port)
  41. print("Server started. Waiting for requests....")
  42. NSRunLoop.mainRunLoop().run()
  43. }
  44. }