diff --git a/Package.swift b/Package.swift index 298dd10b6f..f88ea97464 100644 --- a/Package.swift +++ b/Package.swift @@ -129,7 +129,8 @@ let package = Package( "NIOCore", "NIOEmbedded", "NIOPosix", - ] + ], + swiftSettings: strictConcurrencySettings ), .target( name: "_NIOConcurrency", @@ -274,7 +275,8 @@ let package = Package( "NIOPosix", "NIOCore", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOTCPEchoClient", @@ -282,7 +284,8 @@ let package = Package( "NIOPosix", "NIOCore", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOEchoServer", @@ -291,7 +294,8 @@ let package = Package( "NIOCore", "NIOConcurrencyHelpers", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOEchoClient", @@ -300,7 +304,8 @@ let package = Package( "NIOCore", "NIOConcurrencyHelpers", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOHTTP1Server", @@ -329,7 +334,8 @@ let package = Package( "NIOCore", "NIOConcurrencyHelpers", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOChatClient", @@ -338,7 +344,8 @@ let package = Package( "NIOCore", "NIOConcurrencyHelpers", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOWebSocketServer", @@ -365,7 +372,8 @@ let package = Package( dependencies: [ "NIOPosix", "NIOCore", - ] + ], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOUDPEchoServer", @@ -373,7 +381,8 @@ let package = Package( "NIOPosix", "NIOCore", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOUDPEchoClient", @@ -381,7 +390,8 @@ let package = Package( "NIOPosix", "NIOCore", ], - exclude: ["README.md"] + exclude: ["README.md"], + swiftSettings: strictConcurrencySettings ), .executableTarget( name: "NIOAsyncAwaitDemo", @@ -511,15 +521,18 @@ let package = Package( dependencies: [ "NIOCore", "NIOFoundationCompat", - ] + ], + swiftSettings: strictConcurrencySettings ), .testTarget( name: "NIOTests", - dependencies: ["NIO"] + dependencies: ["NIO"], + swiftSettings: strictConcurrencySettings ), .testTarget( name: "NIOSingletonsTests", - dependencies: ["NIOCore", "NIOPosix"] + dependencies: ["NIOCore", "NIOPosix"], + swiftSettings: strictConcurrencySettings ), .testTarget( name: "NIOFileSystemTests", diff --git a/Sources/NIOChatClient/main.swift b/Sources/NIOChatClient/main.swift index c41250e39d..a350bf14bf 100644 --- a/Sources/NIOChatClient/main.swift +++ b/Sources/NIOChatClient/main.swift @@ -18,19 +18,9 @@ private final class ChatHandler: ChannelInboundHandler { public typealias InboundIn = ByteBuffer public typealias OutboundOut = ByteBuffer - private func printByte(_ byte: UInt8) { - #if os(Android) - print(Character(UnicodeScalar(byte)), terminator: "") - #else - fputc(Int32(byte), stdout) - #endif - } - public func channelRead(context: ChannelHandlerContext, data: NIOAny) { - var buffer = Self.unwrapInboundIn(data) - while let byte: UInt8 = buffer.readInteger() { - printByte(byte) - } + let buffer = Self.unwrapInboundIn(data) + print(String(buffer: buffer)) } public func errorCaught(context: ChannelHandlerContext, error: Error) { @@ -47,7 +37,9 @@ let bootstrap = ClientBootstrap(group: group) // Enable SO_REUSEADDR. .channelOption(.socketOption(.so_reuseaddr), value: 1) .channelInitializer { channel in - channel.pipeline.addHandler(ChatHandler()) + channel.eventLoop.makeCompletedFuture { + try channel.pipeline.syncOperations.addHandler(ChatHandler()) + } } defer { try! group.syncShutdownGracefully() diff --git a/Sources/NIOEchoClient/main.swift b/Sources/NIOEchoClient/main.swift index d7de8eb35b..e92ebc02ff 100644 --- a/Sources/NIOEchoClient/main.swift +++ b/Sources/NIOEchoClient/main.swift @@ -58,7 +58,9 @@ let bootstrap = ClientBootstrap(group: group) // Enable SO_REUSEADDR. .channelOption(.socketOption(.so_reuseaddr), value: 1) .channelInitializer { channel in - channel.pipeline.addHandler(EchoHandler()) + channel.eventLoop.makeCompletedFuture { + try channel.pipeline.syncOperations.addHandler(EchoHandler()) + } } defer { try! group.syncShutdownGracefully() diff --git a/Sources/NIOMulticastChat/main.swift b/Sources/NIOMulticastChat/main.swift index 7d3298ee7e..94316e5ecd 100644 --- a/Sources/NIOMulticastChat/main.swift +++ b/Sources/NIOMulticastChat/main.swift @@ -72,8 +72,8 @@ let group = MultiThreadedEventLoopGroup(numberOfThreads: 1) var datagramBootstrap = DatagramBootstrap(group: group) .channelOption(.socketOption(.so_reuseaddr), value: 1) .channelInitializer { channel in - channel.pipeline.addHandler(ChatMessageEncoder()).flatMap { - channel.pipeline.addHandler(ChatMessageDecoder()) + channel.eventLoop.makeCompletedFuture { + try channel.pipeline.syncOperations.addHandlers(ChatMessageEncoder(), ChatMessageDecoder()) } } diff --git a/Sources/NIOUDPEchoClient/main.swift b/Sources/NIOUDPEchoClient/main.swift index 3a74de9d04..9d131b8899 100644 --- a/Sources/NIOUDPEchoClient/main.swift +++ b/Sources/NIOUDPEchoClient/main.swift @@ -115,7 +115,7 @@ default: connectTarget = .ip(host: defaultHost, sendPort: defaultServerPort, listeningPort: defaultListeningPort) } -let remoteAddress = { () -> SocketAddress in +let remoteAddress = { @Sendable () -> SocketAddress in switch connectTarget { case .ip(let host, let sendPort, _): return try SocketAddress.makeAddressResolvingHost(host, port: sendPort) @@ -129,7 +129,9 @@ let bootstrap = DatagramBootstrap(group: group) // Enable SO_REUSEADDR. .channelOption(.socketOption(.so_reuseaddr), value: 1) .channelInitializer { channel in - channel.pipeline.addHandler(EchoHandler(remoteAddressInitializer: remoteAddress)) + channel.eventLoop.makeCompletedFuture { + try channel.pipeline.syncOperations.addHandler(EchoHandler(remoteAddressInitializer: remoteAddress)) + } } defer { try! group.syncShutdownGracefully() diff --git a/Sources/NIOUDPEchoServer/main.swift b/Sources/NIOUDPEchoServer/main.swift index a33de6780b..f8dd508577 100644 --- a/Sources/NIOUDPEchoServer/main.swift +++ b/Sources/NIOUDPEchoServer/main.swift @@ -47,8 +47,9 @@ var bootstrap = DatagramBootstrap(group: group) // Set the handlers that are applied to the bound channel .channelInitializer { channel in - // Ensure we don't read faster than we can write by adding the BackPressureHandler into the pipeline. - channel.pipeline.addHandler(EchoHandler()) + channel.eventLoop.makeCompletedFuture { + try channel.pipeline.syncOperations.addHandler(EchoHandler()) + } } defer {