// // MongoController.swift // MongoView // // Created by Shadowfacts on 1/8/20. // Copyright © 2020 Shadowfacts. All rights reserved. // import Foundation import MongoSwift import NIO class MongoController { let connectionString: String var group: EventLoopGroup! var client: MongoClient! var status: Status = .connecting { didSet { statusDidChange.forEach { $0(status) } } } var statusDidChange = [(Status) -> Void]() init(connectionString: String) { self.connectionString = connectionString } deinit { try! group.syncShutdownGracefully() cleanupMongoSwift() } func setup() { print("setting up mongo") group = MultiThreadedEventLoopGroup(numberOfThreads: 1) do { client = try MongoClient(connectionString, using: group) status = .success } catch { status = .failed print("Failed to connect to Mongo: \(error)") } } func db(for collection: DatabaseCollection) -> MongoDatabase { return client.db(collection.database) } func collection(_ collection: DatabaseCollection) -> MongoCollection { return db(for: collection).collection(collection.name) } } extension MongoController { enum Status { case connecting, success, failed } }