App.swift 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162
  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. @available(OSX 10.10, *)
  12. public func run(_ port: in_port_t = 9080, _ databasePath: String) throws -> Void {
  13. // Open database connection.
  14. DatabaseReflection.sharedDatabase = try SQLite.open(databasePath)
  15. defer {
  16. DatabaseReflection.sharedDatabase?.close()
  17. }
  18. // Watch process signals.
  19. Process.watchSignals { switch $0 {
  20. case SIGTERM, SIGINT:
  21. self.server.stop()
  22. DatabaseReflection.sharedDatabase?.close()
  23. exit(EXIT_SUCCESS)
  24. case SIGHUP:
  25. print("//TODO - Reload config.")
  26. default:
  27. print("Unknown signal received: \(signal).")
  28. }
  29. }
  30. // Add simple logging.
  31. self.server.middleware.append({ r in
  32. print("\(r.method) - \(r.path)")
  33. return nil
  34. })
  35. // Boot the server.
  36. print("Starting Swifter (\(HttpServer.VERSION)) at port \(port) with PID \(Process.PID)...")
  37. try self.server.start(port)
  38. print("Server started. Waiting for requests....")
  39. #if os(Linux)
  40. while true { }
  41. #else
  42. RunLoop.current.run()
  43. #endif
  44. }
  45. }