diff --git a/Dockerfile b/Dockerfile index 6209864..1806b6b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,6 +1,6 @@ # Build the executable -FROM swift as build +FROM swift:5.10 AS build WORKDIR /build COPY ./Package.* ./ RUN swift package resolve @@ -8,6 +8,6 @@ COPY . . RUN swift build --enable-test-discovery -c release -Xswiftc -g # Run image -FROM swift +FROM swift:5.10 WORKDIR /run COPY --from=build /build/.build/release /run diff --git a/Makefile b/Makefile index 88209aa..3fd85e4 100644 --- a/Makefile +++ b/Makefile @@ -1,24 +1,24 @@ bootstrap-env: @cp Bootstrap/dewPoint-env-example .dewPoint-env - + bootstrap-topics: @cp Bootstrap/topics-example .topics - + bootstrap: bootstrap-env bootstrap-topics build: @swift build - + run: @swift run dewPoint-controller - + start-mosquitto: - @docker compose start mosquitto + @docker-compose start mosquitto stop-mosquitto: - @docker compose rm -f mosquitto || true - + @docker-compose rm -f mosquitto || true + test-docker: - @docker compose run -i test - @docker compose kill mosquitto-test + @docker-compose run -i test + @docker-compose kill mosquitto-test diff --git a/Package.swift b/Package.swift index 46ce0a8..036b79a 100644 --- a/Package.swift +++ b/Package.swift @@ -1,4 +1,4 @@ -// swift-tools-version:5.5 +// swift-tools-version:5.10 import PackageDescription diff --git a/Sources/ClientLive/Live.swift b/Sources/ClientLive/Live.swift index 44dbd31..573cc85 100644 --- a/Sources/ClientLive/Live.swift +++ b/Sources/ClientLive/Live.swift @@ -7,7 +7,7 @@ import NIO import Psychrometrics extension Client { - + // The state passed in here needs to be a class or we get escaping errors in the `addListeners` method. public static func live( client: MQTTNIO.MQTTClient, @@ -45,12 +45,13 @@ import NIOTransportServices import EnvVars public class AsyncClient { - public static let eventLoopGroup = NIOTSEventLoopGroup() + //public static let eventLoopGroup = NIOTSEventLoopGroup() + public static let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: 1) public let client: MQTTClient public private(set) var shuttingDown: Bool - + var logger: Logger { client.logger } - + public init(envVars: EnvVars, logger: Logger) { let config = MQTTClient.Configuration.init( version: .v3_1_1, @@ -70,7 +71,7 @@ public class AsyncClient { ) self.shuttingDown = false } - + public func connect() async { do { try await self.client.connect() @@ -87,17 +88,17 @@ public class AsyncClient { logger.trace("Connection Failed.\n\(error)") } } - + public func shutdown() async { self.shuttingDown = true try? await self.client.disconnect() try? await self.client.shutdown() } - + func addSensorListeners() async { - + } - + // Need to save the recieved values somewhere. func addPublishListener( topic: String, @@ -121,8 +122,8 @@ public class AsyncClient { } } } - - + + private func publish(string: String, to topic: String) async throws { try await self.client.publish( to: topic, @@ -130,26 +131,26 @@ public class AsyncClient { qos: .atLeastOnce ) } - + private func publish(double: Double, to topic: String) async throws { let rounded = round(double * 100) / 100 try await publish(string: "\(rounded)", to: topic) } - + func publishDewPoint(_ request: Client.SensorPublishRequest) async throws { // fix guard let (dewPoint, topic) = request.dewPointData(topics: .init(), units: nil) else { return } try await self.publish(double: dewPoint.rawValue, to: topic) logger.debug("Published dewpoint: \(dewPoint.rawValue), to: \(topic)") } - + func publishEnthalpy(_ request: Client.SensorPublishRequest) async throws { // fix guard let (enthalpy, topic) = request.enthalpyData(altitude: .seaLevel, topics: .init(), units: nil) else { return } try await self.publish(double: enthalpy.rawValue, to: topic) logger.debug("Publihsed enthalpy: \(enthalpy.rawValue), to: \(topic)") } - + public func publishSensor(_ request: Client.SensorPublishRequest) async throws { try await publishDewPoint(request) try await publishEnthalpy(request) diff --git a/docker-compose.yaml b/docker-compose.yaml index e6dd6f1..d5e5ff0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,6 +1,4 @@ # run this with docker-compose -f docker/docker-compose.yml run test -version: "3" - services: test: image: swift:latest