Remove uses of Task
This commit is contained in:
parent
037d146aba
commit
39766467e6
@ -25,6 +25,8 @@ final class DeviceManager {
|
||||
|
||||
private let messagesToDeviceMetric: Metric<Int>
|
||||
|
||||
private let scheduler: AsyncScheduler
|
||||
|
||||
/// Indicator for device availability
|
||||
var deviceIsConnected: Bool {
|
||||
deviceIsAuthenticated && !(connection?.isClosed ?? true)
|
||||
@ -33,7 +35,7 @@ final class DeviceManager {
|
||||
/// A promise to finish the request once the device responds or times out
|
||||
private var requestInProgress: EventLoopPromise<Data>?
|
||||
|
||||
init(deviceKey: Data, remoteKey: Data, deviceTimeout: Int64) {
|
||||
init(deviceKey: Data, remoteKey: Data, deviceTimeout: Int64, scheduler: AsyncScheduler) {
|
||||
self.deviceKey = deviceKey
|
||||
self.remoteKey = remoteKey
|
||||
self.deviceTimeout = deviceTimeout
|
||||
@ -45,17 +47,20 @@ final class DeviceManager {
|
||||
"sesame.messages",
|
||||
name: "Forwarded Messages",
|
||||
description: "The number of messages transmitted to the device")
|
||||
self.scheduler = scheduler
|
||||
}
|
||||
|
||||
private func updateDeviceConnectionMetric() {
|
||||
Task {
|
||||
try? await deviceConnectedMetric.update(deviceIsConnected)
|
||||
scheduler.schedule { [weak self] in
|
||||
guard let self else { return }
|
||||
_ = try? await deviceConnectedMetric.update(deviceIsConnected)
|
||||
}
|
||||
}
|
||||
|
||||
private func updateMessageCountMetric() {
|
||||
Task {
|
||||
let lastValue = await messagesToDeviceMetric.lastValue()?.value ?? 0
|
||||
scheduler.schedule { [weak self] in
|
||||
guard let self else { return }
|
||||
let lastValue = await self.messagesToDeviceMetric.lastValue()?.value ?? 0
|
||||
_ = try? await messagesToDeviceMetric.update(lastValue + 1)
|
||||
}
|
||||
}
|
||||
|
@ -14,15 +14,8 @@ enum ServerError: Error {
|
||||
case invalidAuthenticationToken
|
||||
}
|
||||
|
||||
private let dateFormatter: DateFormatter = {
|
||||
let df = DateFormatter()
|
||||
df.dateStyle = .short
|
||||
df.timeStyle = .short
|
||||
return df
|
||||
}()
|
||||
|
||||
// configures your application
|
||||
public func configure(_ app: Application) async throws {
|
||||
public func configure(_ app: Application) throws {
|
||||
let storageFolder = URL(fileURLWithPath: app.directory.resourcesDirectory)
|
||||
let logFolder = storageFolder.appendingPathComponent("logs")
|
||||
|
||||
@ -30,7 +23,9 @@ public func configure(_ app: Application) async throws {
|
||||
MetricObserver.standard = monitor
|
||||
|
||||
let status = Metric<ServerStatus>("sesame.status")
|
||||
asyncScheduler.schedule {
|
||||
_ = try await status.update(.initializing)
|
||||
}
|
||||
|
||||
let configUrl = storageFolder.appendingPathComponent("config.json")
|
||||
let config = try Config(loadFrom: configUrl)
|
||||
@ -43,7 +38,8 @@ public func configure(_ app: Application) async throws {
|
||||
deviceManager = DeviceManager(
|
||||
deviceKey: deviceKey,
|
||||
remoteKey: remoteKey,
|
||||
deviceTimeout: config.deviceTimeout)
|
||||
deviceTimeout: config.deviceTimeout,
|
||||
scheduler: asyncScheduler)
|
||||
|
||||
try routes(app)
|
||||
|
||||
@ -58,8 +54,14 @@ public func configure(_ app: Application) async throws {
|
||||
}
|
||||
}
|
||||
|
||||
asyncScheduler.schedule {
|
||||
_ = try await status.update(.nominal)
|
||||
print("[\(dateFormatter.string(from: Date()))] Server started")
|
||||
}
|
||||
|
||||
let df = DateFormatter()
|
||||
df.dateStyle = .short
|
||||
df.timeStyle = .short
|
||||
print("[\(df.string(from: Date()))] Server started")
|
||||
}
|
||||
|
||||
private func loadKeys(at url: URL) throws -> (deviceKey: Data, remoteKey: Data) {
|
||||
|
@ -6,10 +6,5 @@ try LoggingSystem.bootstrap(from: &env)
|
||||
let app = Application(env)
|
||||
defer { app.shutdown() }
|
||||
|
||||
private let semaphore = DispatchSemaphore(value: 0)
|
||||
Task {
|
||||
try await configure(app)
|
||||
semaphore.signal()
|
||||
}
|
||||
semaphore.wait()
|
||||
try configure(app)
|
||||
try app.run()
|
||||
|
Loading…
Reference in New Issue
Block a user