@@ -191,15 +191,7 @@ public final class ValkeyConnection: Sendable {
191191
192192 let connect = bootstrap. channelInitializer { channel in
193193 do {
194- let sync = channel. pipeline. syncOperations
195- if case . enable( let sslContext, let tlsServerName) = configuration. tls. base {
196- try sync. addHandler ( NIOSSLClientHandler ( context: sslContext, serverHostname: tlsServerName) )
197- }
198- let valkeyChannelHandler = ValkeyChannelHandler (
199- eventLoop: channel. eventLoop,
200- logger: logger
201- )
202- try sync. addHandler ( valkeyChannelHandler)
194+ try self . _setupChannel ( channel, configuration: configuration, logger: logger)
203195 return eventLoop. makeSucceededVoidFuture ( )
204196 } catch {
205197 return eventLoop. makeFailedFuture ( error)
@@ -226,6 +218,36 @@ public final class ValkeyConnection: Sendable {
226218 }
227219 }
228220
221+ package static func setupChannel( _ channel: any Channel , configuration: ValkeyClientConfiguration , logger: Logger ) async throws -> ValkeyConnection {
222+ if !channel. eventLoop. inEventLoop {
223+ return try await channel. eventLoop. submit {
224+ let handler = try self . _setupChannel ( channel, configuration: configuration, logger: logger)
225+ return ValkeyConnection ( channel: channel, channelHandler: handler, configuration: configuration, logger: logger)
226+ } . get ( )
227+ }
228+
229+ let handler = try self . _setupChannel ( channel, configuration: configuration, logger: logger)
230+ return ValkeyConnection ( channel: channel, channelHandler: handler, configuration: configuration, logger: logger)
231+ }
232+
233+ @discardableResult
234+ private static func _setupChannel( _ channel: any Channel , configuration: ValkeyClientConfiguration , logger: Logger ) throws -> ValkeyChannelHandler {
235+ channel. eventLoop. assertInEventLoop ( )
236+ let sync = channel. pipeline. syncOperations
237+ switch configuration. tls. base {
238+ case . enable( let sslContext, let tlsServerName) :
239+ try sync. addHandler ( NIOSSLClientHandler ( context: sslContext, serverHostname: tlsServerName) )
240+ case . disable:
241+ break
242+ }
243+ let valkeyChannelHandler = ValkeyChannelHandler (
244+ eventLoop: channel. eventLoop,
245+ logger: logger
246+ )
247+ try sync. addHandler ( valkeyChannelHandler)
248+ return valkeyChannelHandler
249+ }
250+
229251 /// create a BSD sockets based bootstrap
230252 private static func createSocketsBootstrap( eventLoopGroup: EventLoopGroup ) -> ClientBootstrap {
231253 ClientBootstrap ( group: eventLoopGroup)
0 commit comments