Quellcode durchsuchen

Upgrade swift-nio to 1.12

George Barnett vor 7 Jahren
Ursprung
Commit
a43337ca59
2 geänderte Dateien mit 13 neuen und 8 gelöschten Zeilen
  1. 1 1
      Package.swift
  2. 12 7
      Sources/SwiftGRPCNIO/GRPCChannelHandler.swift

+ 1 - 1
Package.swift

@@ -21,7 +21,7 @@ var packageDependencies: [Package.Dependency] = [
   .package(url: "https://github.com/apple/swift-protobuf.git", .upToNextMinor(from: "1.1.1")),
   .package(url: "https://github.com/kylef/Commander.git", .upToNextMinor(from: "0.8.0")),
   .package(url: "https://github.com/apple/swift-nio-zlib-support.git", .upToNextMinor(from: "1.0.0")),
-  .package(url: "https://github.com/apple/swift-nio.git", .upToNextMinor(from: "1.11.0")),
+  .package(url: "https://github.com/apple/swift-nio.git", .upToNextMinor(from: "1.12.0")),
   .package(url: "https://github.com/apple/swift-nio-nghttp2-support.git", .upToNextMinor(from: "1.0.0")),
   .package(url: "https://github.com/apple/swift-nio-http2.git", .revision("dd9339e6310ad8537a271f3ff60a4f3976ca8e4d"))
 ]

+ 12 - 7
Sources/SwiftGRPCNIO/GRPCChannelHandler.swift

@@ -55,15 +55,20 @@ extension GRPCChannelHandler: ChannelInboundHandler {
           return
       }
 
-      var responseHeaders = HTTPHeaders()
-      responseHeaders.add(name: "content-type", value: "application/grpc")
-      ctx.write(self.wrapOutboundOut(.headers(responseHeaders)), promise: nil)
-
       let codec = callHandler.makeGRPCServerCodec()
+      let handlerRemoved: EventLoopPromise<Bool> = ctx.eventLoop.newPromise()
+      handlerRemoved.futureResult.whenSuccess { handlerWasRemoved in
+        assert(handlerWasRemoved)
+
+        ctx.pipeline.add(handler: callHandler, after: codec).whenComplete {
+          var responseHeaders = HTTPHeaders()
+          responseHeaders.add(name: "content-type", value: "application/grpc")
+          ctx.write(self.wrapOutboundOut(.headers(responseHeaders)), promise: nil)
+        }
+      }
+
       ctx.pipeline.add(handler: codec, after: self)
-        .then { ctx.pipeline.add(handler: callHandler, after: codec) }
-        //! FIXME(lukasa): Fix the ordering of this with NIO 1.12 and replace with `remove(, promise:)`.
-        .whenComplete { _ = ctx.pipeline.remove(handler: self) }
+        .whenComplete { ctx.pipeline.remove(handler: self, promise: handlerRemoved) }
 
     case .message, .end:
       preconditionFailure("received \(requestPart), should have been removed as a handler at this point")