|
|
@@ -62,9 +62,8 @@ public protocol StreamingRequestClientCall: ClientCall {
|
|
|
///
|
|
|
/// - Parameters:
|
|
|
/// - message: The message to
|
|
|
- /// - flush: Whether the buffer should be flushed after writing the message.
|
|
|
/// - Returns: A future which will be fullfilled when the message has been sent.
|
|
|
- func sendMessage(_ message: RequestMessage, flush: Bool) -> EventLoopFuture<Void>
|
|
|
+ func sendMessage(_ message: RequestMessage) -> EventLoopFuture<Void>
|
|
|
|
|
|
/// Sends a message to the service.
|
|
|
///
|
|
|
@@ -73,8 +72,24 @@ public protocol StreamingRequestClientCall: ClientCall {
|
|
|
/// - Parameters:
|
|
|
/// - message: The message to send.
|
|
|
/// - promise: A promise to be fulfilled when the message has been sent.
|
|
|
- /// - flush: Whether the buffer should be flushed after writing the message.
|
|
|
- func sendMessage(_ message: RequestMessage, promise: EventLoopPromise<Void>?, flush: Bool)
|
|
|
+ func sendMessage(_ message: RequestMessage, promise: EventLoopPromise<Void>?)
|
|
|
+
|
|
|
+ /// Sends a sequence of messages to the service.
|
|
|
+ ///
|
|
|
+ /// - Important: Callers must terminate the stream of messages by calling `sendEnd()` or `sendEnd(promise:)`.
|
|
|
+ ///
|
|
|
+ /// - Parameters:
|
|
|
+ /// - messages: The sequence of messages to send.
|
|
|
+ func sendMessages<S: Sequence>(_ messages: S) -> EventLoopFuture<Void> where S.Element == RequestMessage
|
|
|
+
|
|
|
+ /// Sends a sequence of messages to the service.
|
|
|
+ ///
|
|
|
+ /// - Important: Callers must terminate the stream of messages by calling `sendEnd()` or `sendEnd(promise:)`.
|
|
|
+ ///
|
|
|
+ /// - Parameters:
|
|
|
+ /// - messages: The sequence of messages to send.
|
|
|
+ /// - promise: A promise to be fulfilled when all messages have been sent successfully.
|
|
|
+ func sendMessages<S: Sequence>(_ messages: S, promise: EventLoopPromise<Void>?) where S.Element == RequestMessage
|
|
|
|
|
|
/// Returns a future which can be used as a message queue.
|
|
|
///
|
|
|
@@ -112,20 +127,36 @@ public protocol UnaryResponseClientCall: ClientCall {
|
|
|
}
|
|
|
|
|
|
extension StreamingRequestClientCall {
|
|
|
- public func sendMessage(_ message: RequestMessage, flush: Bool = true) -> EventLoopFuture<Void> {
|
|
|
+ public func sendMessage(_ message: RequestMessage) -> EventLoopFuture<Void> {
|
|
|
return self.subchannel.flatMap { channel in
|
|
|
- let writeFuture = channel.write(GRPCClientRequestPart.message(_Box(message)))
|
|
|
- if flush {
|
|
|
- channel.flush()
|
|
|
- }
|
|
|
- return writeFuture
|
|
|
+ return channel.writeAndFlush(GRPCClientRequestPart.message(_Box(message)))
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- public func sendMessage(_ message: RequestMessage, promise: EventLoopPromise<Void>?, flush: Bool = true) {
|
|
|
+ public func sendMessage(_ message: RequestMessage, promise: EventLoopPromise<Void>?) {
|
|
|
self.subchannel.whenSuccess { channel in
|
|
|
- channel.write(GRPCClientRequestPart.message(_Box(message)), promise: promise)
|
|
|
- if flush {
|
|
|
+ channel.writeAndFlush(GRPCClientRequestPart.message(_Box(message)), promise: promise)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public func sendMessages<S: Sequence>(_ messages: S) -> EventLoopFuture<Void> where S.Element == RequestMessage {
|
|
|
+ return self.subchannel.flatMap { channel -> EventLoopFuture<Void> in
|
|
|
+ let writeFutures = messages.map { message in
|
|
|
+ channel.write(GRPCClientRequestPart.message(_Box(message)))
|
|
|
+ }
|
|
|
+ channel.flush()
|
|
|
+ return EventLoopFuture.andAllSucceed(writeFutures, on: channel.eventLoop)
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ public func sendMessages<S: Sequence>(_ messages: S, promise: EventLoopPromise<Void>?) where S.Element == RequestMessage {
|
|
|
+ if let promise = promise {
|
|
|
+ self.sendMessages(messages).cascade(to: promise)
|
|
|
+ } else {
|
|
|
+ self.subchannel.whenSuccess { channel in
|
|
|
+ for message in messages {
|
|
|
+ channel.write(GRPCClientRequestPart.message(_Box(message)), promise: nil)
|
|
|
+ }
|
|
|
channel.flush()
|
|
|
}
|
|
|
}
|