Skip to content

Commit

Permalink
async/await (#40)
Browse files Browse the repository at this point in the history
* Add async APIs for Application.APNS

* Add remaining async APIs

* Update CI to only test on release and add 5.5

* Fix NIO dependency
  • Loading branch information
0xTim authored Oct 26, 2021
1 parent a880646 commit de66060
Show file tree
Hide file tree
Showing 4 changed files with 102 additions and 18 deletions.
21 changes: 4 additions & 17 deletions .github/workflows/test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -12,23 +12,10 @@ jobs:
matrix:
image:
# 5.2 Stable
- swift:5.2-xenial
- swift:5.2-bionic
- swift:5.2-focal
- swift:5.2-centos8
- swift:5.2-amazonlinux2
# 5.2 Unstable
- swiftlang/swift:nightly-5.2-xenial
- swiftlang/swift:nightly-5.2-bionic
# 5.3 Unstable
- swiftlang/swift:nightly-5.3-xenial
- swiftlang/swift:nightly-5.3-bionic
# Master Unstable
- swiftlang/swift:nightly-master-xenial
- swiftlang/swift:nightly-master-bionic
- swiftlang/swift:nightly-master-focal
- swiftlang/swift:nightly-master-centos8
- swiftlang/swift:nightly-master-amazonlinux2
- swift:5.2
- swift:5.3
- swift:5.4
- swift:5.5
container: ${{ matrix.image }}
steps:
- uses: actions/checkout@v2
Expand Down
2 changes: 2 additions & 0 deletions Package.swift
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,13 @@ let package = Package(
dependencies: [
.package(name: "apnswift", url: "https://github.com/kylebrowning/APNSwift.git", from: "3.0.0"),
.package(name: "vapor", url: "https://github.com/vapor/vapor.git", from: "4.0.0"),
.package(url: "https://github.com/apple/swift-nio.git", from: "2.33.0"),
],
targets: [
.target(name: "APNS", dependencies: [
.product(name: "APNSwift", package: "apnswift"),
.product(name: "Vapor", package: "vapor"),
.product(name: "NIOCore", package: "swift-nio")
]),
.testTarget(name: "APNSTests", dependencies: [
.target(name: "APNS"),
Expand Down
95 changes: 95 additions & 0 deletions Sources/APNS/APNS+Concurrency.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
#if compiler(>=5.5) && canImport(_Concurrency)
import NIOCore
import Vapor

@available(macOS 12, iOS 15, watchOS 8, tvOS 15, *)
extension Application.APNS {
public func batchSend(
rawBytes payload: ByteBuffer,
pushType: APNSwiftConnection.PushType,
to deviceToken: String...,
expiration: Date?,
priority: Int?,
collapseIdentifier: String?,
topic: String?,
logger: Logger?,
apnsID: UUID? = nil)
async throws {
try await batchSend(
rawBytes: payload,
pushType: pushType,
to: deviceToken,
expiration: expiration,
priority: priority,
collapseIdentifier: collapseIdentifier,
topic: topic,
logger: logger,
apnsID: apnsID)
}

public func batchSend(
rawBytes payload: ByteBuffer,
pushType: APNSwiftConnection.PushType,
to deviceToken: [String],
expiration: Date?,
priority: Int?,
collapseIdentifier: String?,
topic: String?,
logger: Logger?,
apnsID: UUID? = nil)
async throws {
try await batchSend(
rawBytes: payload,
pushType: pushType,
to: deviceToken,
expiration: expiration,
priority: priority,
collapseIdentifier: collapseIdentifier,
topic: topic,
logger: logger,
apnsID: apnsID).get()
}

public func send(
rawBytes payload: ByteBuffer,
pushType: APNSwiftConnection.PushType,
to deviceToken: String,
expiration: Date?,
priority: Int?,
collapseIdentifier: String?,
topic: String?,
logger: Logger?,
apnsID: UUID? = nil
) async throws {
try await self.send(rawBytes: payload, pushType: pushType, to: deviceToken, expiration: expiration, priority: priority, collapseIdentifier: collapseIdentifier, topic: topic, logger: logger, apnsID: apnsID).get()
}
}

@available(macOS 12, iOS 15, watchOS 8, tvOS 15, *)
extension Request.APNS {
public func send(
rawBytes payload: ByteBuffer,
pushType: APNSwiftConnection.PushType,
to deviceToken: String,
expiration: Date?,
priority: Int?,
collapseIdentifier: String?,
topic: String?,
logger: Logger?,
apnsID: UUID? = nil
) async throws {
try await send(rawBytes: payload, pushType: pushType, to: deviceToken, expiration: expiration, priority: priority, collapseIdentifier: collapseIdentifier, topic: topic, logger: logger, apnsID: apnsID).get()
}
}

@available(macOS 12, iOS 15, watchOS 8, tvOS 15, *)
extension APNSConnectionSource {
public func makeConnection(
logger: Logger,
on eventLoop: EventLoop
) async throws -> APNSwiftConnection {
try await APNSwiftConnection.connect(configuration: self.configuration, on: eventLoop).get()
}
}

#endif
2 changes: 1 addition & 1 deletion Sources/APNS/APNSConnectionSource.swift
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import AsyncKit
import Logging

public final class APNSConnectionSource: ConnectionPoolSource {
private let configuration: APNSwiftConfiguration
internal let configuration: APNSwiftConfiguration

public init(configuration: APNSwiftConfiguration) {
self.configuration = configuration
Expand Down

0 comments on commit de66060

Please sign in to comment.