@@ -83,16 +83,6 @@ final class PostgresRequestHandler: ChannelDuplexHandler {
8383 }
8484 }
8585
86- private func _write( context: ChannelHandlerContext , data: NIOAny , promise: EventLoopPromise < Void > ? ) throws {
87- let request = self . unwrapOutboundIn ( data)
88- self . queue. append ( request)
89- let messages = try request. delegate. start ( )
90- for message in messages {
91- context. write ( self . wrapOutboundOut ( message) , promise: nil )
92- }
93- context. flush ( )
94- }
95-
9686 func channelRead( context: ChannelHandlerContext , data: NIOAny ) {
9787 do {
9888 try self . _channelRead ( context: context, data: data)
@@ -102,9 +92,14 @@ final class PostgresRequestHandler: ChannelDuplexHandler {
10292 }
10393
10494 func write( context: ChannelHandlerContext , data: NIOAny , promise: EventLoopPromise < Void > ? ) {
95+ let request = self . unwrapOutboundIn ( data)
96+ self . queue. append ( request)
10597 do {
106- try self . _write ( context: context, data: data, promise: promise)
98+ let messages = try request. delegate. start ( )
99+ self . write ( context: context, items: messages, promise: promise)
100+ context. flush ( )
107101 } catch {
102+ promise? . fail ( error)
108103 self . errorCaught ( context: context, error: error)
109104 }
110105 }
@@ -117,3 +112,18 @@ final class PostgresRequestHandler: ChannelDuplexHandler {
117112 context. close ( mode: mode, promise: promise)
118113 }
119114}
115+
116+
117+ extension ChannelInboundHandler {
118+ func write( context: ChannelHandlerContext , items: [ OutboundOut ] , promise: EventLoopPromise < Void > ? ) {
119+ var items = items
120+ if let last = items. popLast ( ) {
121+ for item in items {
122+ context. write ( self . wrapOutboundOut ( item) , promise: nil )
123+ }
124+ context. write ( self . wrapOutboundOut ( last) , promise: promise)
125+ } else {
126+ promise? . succeed ( ( ) )
127+ }
128+ }
129+ }
0 commit comments