@@ -302,7 +302,7 @@ private struct PendingStreamWritesState {
302302 case 1 :
303303 switch self . pendingWrites. first!. data {
304304 case . byteBuffer:
305- return . scalarBufferWrite
305+ return . scalarBufferWrite( withMetaData : self . pendingWrites . first! . metadata != nil )
306306 case . fileRegion:
307307 return . scalarFileWrite
308308 }
@@ -315,7 +315,7 @@ private struct PendingStreamWritesState {
315315 case ( . byteBuffer, . byteBuffer) :
316316 return . vectorBufferWrite
317317 case ( . byteBuffer, . fileRegion) :
318- return . scalarBufferWrite
318+ return . scalarBufferWrite( withMetaData : self . pendingWrites . first! . metadata != nil )
319319 case ( . fileRegion, _) :
320320 return . scalarFileWrite
321321 }
@@ -387,6 +387,7 @@ final class PendingStreamWritesManager: PendingWritesManager {
387387
388388 func add( envelope: AddressedEnvelope < ByteBuffer > , promise: EventLoopPromise < Void > ? ) -> Bool {
389389 assert ( self . isOpen)
390+ print ( #function, envelope. metadata)
390391 self . state. append (
391392 PendingStreamWrite ( data: . byteBuffer( envelope. data) , promise: promise, metadata: envelope. metadata)
392393 )
@@ -407,16 +408,22 @@ final class PendingStreamWritesManager: PendingWritesManager {
407408 /// - scalarFileWriteOperation: An operation that writes a region of a file descriptor (usually `sendfile`).
408409 /// - Returns: The `OneWriteOperationResult` and whether the `Channel` is now writable.
409410 func triggerAppropriateWriteOperations(
411+ writeMessage: (
412+ UnsafeRawBufferPointer , UnsafePointer < sockaddr > ? , socklen_t , AddressedEnvelope < ByteBuffer > . Metadata ?
413+ ) throws -> IOResult < Int > ,
410414 scalarBufferWriteOperation: ( UnsafeRawBufferPointer ) throws -> IOResult < Int > ,
411415 vectorBufferWriteOperation: ( UnsafeBufferPointer < IOVector > ) throws -> IOResult < Int > ,
412416 scalarFileWriteOperation: ( CInt , Int , Int ) throws -> IOResult < Int >
413417 ) throws -> OverallWriteResult {
414418 try self . triggerWriteOperations { writeMechanism in
415419 print ( #function, writeMechanism)
416- // TODO: add with metadata calls.
417420 switch writeMechanism {
418- case . scalarBufferWrite:
419- return try triggerScalarBufferWrite ( { try scalarBufferWriteOperation ( $0) } )
421+ case . scalarBufferWrite( let metaData) :
422+ if metaData {
423+ return try _triggerScalarBufferWrite ( scalarWriteOperation: { try writeMessage ( $0, $1, $2, $3) } )
424+ } else {
425+ return try triggerScalarBufferWrite ( { try scalarBufferWriteOperation ( $0) } )
426+ }
420427 case . vectorBufferWrite:
421428 return try triggerVectorBufferWrite ( { try vectorBufferWriteOperation ( $0) } )
422429 case . scalarFileWrite:
@@ -465,6 +472,15 @@ final class PendingStreamWritesManager: PendingWritesManager {
465472 }
466473 }
467474
475+ private func _triggerScalarBufferWrite(
476+ scalarWriteOperation: (
477+ UnsafeRawBufferPointer , UnsafePointer < sockaddr > ? , socklen_t , AddressedEnvelope < ByteBuffer > . Metadata ?
478+ ) throws -> IOResult < Int >
479+ ) rethrows -> OneWriteOperationResult {
480+ fatalError ( " \( #function) We made it " )
481+ self . didWrite ( itemCount: 1 , result: . processed( 1 ) )
482+ }
483+
468484 /// Trigger a write of a single `FileRegion` (usually using `sendfile(2)`).
469485 ///
470486 /// - Parameters:
@@ -621,7 +637,7 @@ final class PendingStreamWritesManager: PendingWritesManager {
621637}
622638
623639internal enum WriteMechanism {
624- case scalarBufferWrite
640+ case scalarBufferWrite( withMetaData : Bool )
625641 case vectorBufferWrite
626642 case scalarFileWrite
627643 case nothingToBeWritten
0 commit comments