@@ -325,20 +325,24 @@ struct GRPCStreamStateMachine {
325325 }
326326 }
327327
328- mutating func send( message: [ UInt8 ] , endStream : Bool ) throws {
328+ mutating func send( message: [ UInt8 ] ) throws {
329329 switch self . configuration {
330330 case . client:
331- try self . clientSend ( message: message, endStream : endStream )
331+ try self . clientSend ( message: message)
332332 case . server:
333- if endStream {
334- try self . invalidState (
335- " Can't end response stream by sending a message - send(status:metadata:) must be called "
336- )
337- }
338333 try self . serverSend ( message: message)
339334 }
340335 }
341336
337+ mutating func closeOutbound( ) throws {
338+ switch self . configuration {
339+ case . client:
340+ try self . clientCloseOutbound ( )
341+ case . server:
342+ try self . invalidState ( " Server cannot call close: it must send status and trailers. " )
343+ }
344+ }
345+
342346 mutating func send(
343347 status: Status ,
344348 metadata: Metadata
@@ -532,31 +536,36 @@ extension GRPCStreamStateMachine {
532536 }
533537 }
534538
535- private mutating func clientSend( message: [ UInt8 ] , endStream: Bool ) throws {
536- // Client sends message.
539+ private mutating func clientSend( message: [ UInt8 ] ) throws {
537540 switch self . state {
538541 case . clientIdleServerIdle:
539542 try self . invalidState ( " Client not yet open. " )
540543 case . clientOpenServerIdle( var state) :
541544 state. framer. append ( message)
542- if endStream {
543- self . state = . clientClosedServerIdle( . init( previousState: state) )
544- } else {
545- self . state = . clientOpenServerIdle( state)
546- }
545+ self . state = . clientOpenServerIdle( state)
547546 case . clientOpenServerOpen( var state) :
548547 state. framer. append ( message)
549- if endStream {
550- self . state = . clientClosedServerOpen( . init( previousState: state) )
551- } else {
552- self . state = . clientOpenServerOpen( state)
553- }
554- case . clientOpenServerClosed( let state) :
548+ self . state = . clientOpenServerOpen( state)
549+ case . clientOpenServerClosed:
555550 // The server has closed, so it makes no sense to send the rest of the request.
556- // However, do close if endStream is set.
557- if endStream {
558- self . state = . clientClosedServerClosed( . init( previousState: state) )
559- }
551+ ( )
552+ case . clientClosedServerIdle, . clientClosedServerOpen, . clientClosedServerClosed:
553+ try self . invalidState (
554+ " Client is closed, cannot send a message. "
555+ )
556+ }
557+ }
558+
559+ private mutating func clientCloseOutbound( ) throws {
560+ switch self . state {
561+ case . clientIdleServerIdle:
562+ try self . invalidState ( " Client not yet open. " )
563+ case . clientOpenServerIdle( let state) :
564+ self . state = . clientClosedServerIdle( . init( previousState: state) )
565+ case . clientOpenServerOpen( let state) :
566+ self . state = . clientClosedServerOpen( . init( previousState: state) )
567+ case . clientOpenServerClosed( let state) :
568+ self . state = . clientClosedServerClosed( . init( previousState: state) )
560569 case . clientClosedServerIdle, . clientClosedServerOpen, . clientClosedServerClosed:
561570 try self . invalidState (
562571 " Client is closed, cannot send a message. "
0 commit comments