@@ -325,12 +325,12 @@ struct GRPCStreamStateMachine {
325325 }
326326 }
327327
328- mutating func send( message: [ UInt8 ] ) throws {
328+ mutating func send( message: [ UInt8 ] , promise : EventLoopPromise < Void > ? ) throws {
329329 switch self . configuration {
330330 case . client:
331- try self . clientSend ( message: message)
331+ try self . clientSend ( message: message, promise : promise )
332332 case . server:
333- try self . serverSend ( message: message)
333+ try self . serverSend ( message: message, promise : promise )
334334 }
335335 }
336336
@@ -397,23 +397,26 @@ struct GRPCStreamStateMachine {
397397 }
398398 }
399399
400- /// The result of requesting the next outbound message .
401- enum OnNextOutboundMessage : Equatable {
402- /// Either the receiving party is closed, so we shouldn't send any more messages ; or the sender is done
400+ /// The result of requesting the next outbound frame, which may contain multiple messages .
401+ enum OnNextOutboundFrame {
402+ /// Either the receiving party is closed, so we shouldn't send any more frames ; or the sender is done
403403 /// writing messages (i.e. we are now closed).
404404 case noMoreMessages
405- /// There isn't a message ready to be sent, but we could still receive more, so keep trying.
405+ /// There isn't a frame ready to be sent, but we could still receive more messages , so keep trying.
406406 case awaitMoreMessages
407- /// A message is ready to be sent.
408- case sendMessage( ByteBuffer )
407+ /// A frame is ready to be sent.
408+ case sendFrame(
409+ frame: ByteBuffer ,
410+ promise: EventLoopPromise < Void > ?
411+ )
409412 }
410413
411- mutating func nextOutboundMessage ( ) throws -> OnNextOutboundMessage {
414+ mutating func nextOutboundFrame ( ) throws -> OnNextOutboundFrame {
412415 switch self . configuration {
413416 case . client:
414- return try self . clientNextOutboundMessage ( )
417+ return try self . clientNextOutboundFrame ( )
415418 case . server:
416- return try self . serverNextOutboundMessage ( )
419+ return try self . serverNextOutboundFrame ( )
417420 }
418421 }
419422
@@ -540,15 +543,15 @@ extension GRPCStreamStateMachine {
540543 }
541544 }
542545
543- private mutating func clientSend( message: [ UInt8 ] ) throws {
546+ private mutating func clientSend( message: [ UInt8 ] , promise : EventLoopPromise < Void > ? ) throws {
544547 switch self . state {
545548 case . clientIdleServerIdle:
546549 try self . invalidState ( " Client not yet open. " )
547550 case . clientOpenServerIdle( var state) :
548- state. framer. append ( message)
551+ state. framer. append ( message, promise : promise )
549552 self . state = . clientOpenServerIdle( state)
550553 case . clientOpenServerOpen( var state) :
551- state. framer. append ( message)
554+ state. framer. append ( message, promise : promise )
552555 self . state = . clientOpenServerOpen( state)
553556 case . clientOpenServerClosed:
554557 // The server has closed, so it makes no sense to send the rest of the request.
@@ -577,31 +580,33 @@ extension GRPCStreamStateMachine {
577580
578581 /// Returns the client's next request to the server.
579582 /// - Returns: The request to be made to the server.
580- private mutating func clientNextOutboundMessage ( ) throws -> OnNextOutboundMessage {
583+ private mutating func clientNextOutboundFrame ( ) throws -> OnNextOutboundFrame {
581584 switch self . state {
582585 case . clientIdleServerIdle:
583586 try self . invalidState ( " Client is not open yet. " )
584587 case . clientOpenServerIdle( var state) :
585588 let request = try state. framer. next ( compressor: state. compressor)
586589 self . state = . clientOpenServerIdle( state)
587- return request. map { . sendMessage( $0) } ?? . awaitMoreMessages
590+ return request. map { . sendFrame( frame: $0. bytes, promise: $0. promise) }
591+ ?? . awaitMoreMessages
588592 case . clientOpenServerOpen( var state) :
589593 let request = try state. framer. next ( compressor: state. compressor)
590594 self . state = . clientOpenServerOpen( state)
591- return request. map { . sendMessage( $0) } ?? . awaitMoreMessages
595+ return request. map { . sendFrame( frame: $0. bytes, promise: $0. promise) }
596+ ?? . awaitMoreMessages
592597 case . clientClosedServerIdle( var state) :
593598 let request = try state. framer. next ( compressor: state. compressor)
594599 self . state = . clientClosedServerIdle( state)
595600 if let request {
596- return . sendMessage ( request)
601+ return . sendFrame ( frame : request. bytes , promise : request . promise )
597602 } else {
598603 return . noMoreMessages
599604 }
600605 case . clientClosedServerOpen( var state) :
601606 let request = try state. framer. next ( compressor: state. compressor)
602607 self . state = . clientClosedServerOpen( state)
603608 if let request {
604- return . sendMessage ( request)
609+ return . sendFrame ( frame : request. bytes , promise : request . promise )
605610 } else {
606611 return . noMoreMessages
607612 }
@@ -1003,17 +1008,17 @@ extension GRPCStreamStateMachine {
10031008 }
10041009 }
10051010
1006- private mutating func serverSend( message: [ UInt8 ] ) throws {
1011+ private mutating func serverSend( message: [ UInt8 ] , promise : EventLoopPromise < Void > ? ) throws {
10071012 switch self . state {
10081013 case . clientIdleServerIdle, . clientOpenServerIdle, . clientClosedServerIdle:
10091014 try self . invalidState (
10101015 " Server must have sent initial metadata before sending a message. "
10111016 )
10121017 case . clientOpenServerOpen( var state) :
1013- state. framer. append ( message)
1018+ state. framer. append ( message, promise : promise )
10141019 self . state = . clientOpenServerOpen( state)
10151020 case . clientClosedServerOpen( var state) :
1016- state. framer. append ( message)
1021+ state. framer. append ( message, promise : promise )
10171022 self . state = . clientClosedServerOpen( state)
10181023 case . clientOpenServerClosed, . clientClosedServerClosed:
10191024 try self . invalidState (
@@ -1351,31 +1356,33 @@ extension GRPCStreamStateMachine {
13511356 }
13521357 }
13531358
1354- private mutating func serverNextOutboundMessage ( ) throws -> OnNextOutboundMessage {
1359+ private mutating func serverNextOutboundFrame ( ) throws -> OnNextOutboundFrame {
13551360 switch self . state {
13561361 case . clientIdleServerIdle, . clientOpenServerIdle, . clientClosedServerIdle:
13571362 try self . invalidState ( " Server is not open yet. " )
13581363 case . clientOpenServerOpen( var state) :
13591364 let response = try state. framer. next ( compressor: state. compressor)
13601365 self . state = . clientOpenServerOpen( state)
1361- return response. map { . sendMessage( $0) } ?? . awaitMoreMessages
1366+ return response. map { . sendFrame( frame: $0. bytes, promise: $0. promise) }
1367+ ?? . awaitMoreMessages
13621368 case . clientClosedServerOpen( var state) :
13631369 let response = try state. framer. next ( compressor: state. compressor)
13641370 self . state = . clientClosedServerOpen( state)
1365- return response. map { . sendMessage( $0) } ?? . awaitMoreMessages
1371+ return response. map { . sendFrame( frame: $0. bytes, promise: $0. promise) }
1372+ ?? . awaitMoreMessages
13661373 case . clientOpenServerClosed( var state) :
13671374 let response = try state. framer? . next ( compressor: state. compressor)
13681375 self . state = . clientOpenServerClosed( state)
13691376 if let response {
1370- return . sendMessage ( response)
1377+ return . sendFrame ( frame : response. bytes , promise : response . promise )
13711378 } else {
13721379 return . noMoreMessages
13731380 }
13741381 case . clientClosedServerClosed( var state) :
13751382 let response = try state. framer? . next ( compressor: state. compressor)
13761383 self . state = . clientClosedServerClosed( state)
13771384 if let response {
1378- return . sendMessage ( response)
1385+ return . sendFrame ( frame : response. bytes , promise : response . promise )
13791386 } else {
13801387 return . noMoreMessages
13811388 }
0 commit comments