Skip to content

Commit cfec23c

Browse files
chore: Update WebSocket subprotocols
1 parent ed02fc0 commit cfec23c

5 files changed

Lines changed: 33 additions & 27 deletions

File tree

Examples/HelloWorld/Package.resolved

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.resolved

Lines changed: 7 additions & 7 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Package.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,8 @@ let package = Package(
1616
dependencies: [
1717
.package(url: "https://github.com/apple/swift-nio.git", from: "2.0.0"),
1818
.package(url: "https://github.com/GraphQLSwift/GraphQL.git", from: "4.0.0"),
19-
.package(url: "https://github.com/GraphQLSwift/GraphQLTransportWS.git", from: "1.0.0"),
20-
.package(url: "https://github.com/GraphQLSwift/GraphQLWS.git", from: "1.0.0"),
19+
.package(url: "https://github.com/GraphQLSwift/GraphQLTransportWS.git", from: "2.0.0"),
20+
.package(url: "https://github.com/GraphQLSwift/GraphQLWS.git", from: "2.0.0"),
2121
.package(url: "https://github.com/hummingbird-project/hummingbird.git", from: "2.0.0"),
2222
.package(
2323
url: "https://github.com/hummingbird-project/hummingbird-websocket.git",

Sources/GraphQLHummingbird/WebSocket/GraphQLHandler+handleWebSocket.swift

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ import Hummingbird
33
import HummingbirdWebSocket
44
import Logging
55

6+
import struct Foundation.Data
67
import struct GraphQLTransportWS.EmptyInitPayload
78
import class GraphQLTransportWS.Server
89
import class GraphQLWS.Server
@@ -17,15 +18,16 @@ extension GraphQLHandler where Context: WebSocketRequestContext {
1718
) async throws {
1819
let messenger = WebSocketMessenger(outbound: outbound, logger: logger)
1920

20-
let messageStream = inbound.messages(maxSize: context.requestContext.maxUploadSize)
21-
.compactMap { message -> String? in
22-
// TODO: Add binary support
23-
guard case .text(let text) = message else {
24-
return nil
25-
}
26-
logger.trace("GraphQL server received: \(message)")
27-
return text
21+
let messageStream = inbound.messages(
22+
maxSize: context.requestContext.maxUploadSize
23+
).compactMap { message -> Data? in
24+
// By subprotocol specs, messages must be `text` and UTF8
25+
guard case .text(let text) = message else {
26+
return nil
2827
}
28+
logger.trace("GraphQL server received: \(text)")
29+
return text.data(using: .utf8)
30+
}
2931

3032
switch subProtocol {
3133
case .graphqlTransportWs:

Sources/GraphQLHummingbird/WebSocket/WebSocketMessenger.swift

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ import HummingbirdWebSocket
44
import Logging
55
import NIOCore
66

7+
import struct Foundation.Data
8+
79
/// Messenger wrapper for WebSockets
810
class WebSocketMessenger: GraphQLTransportWS.Messenger, GraphQLWS.Messenger, @unchecked Sendable {
911
private let outbound: WebSocketOutboundWriter
@@ -17,9 +19,11 @@ class WebSocketMessenger: GraphQLTransportWS.Messenger, GraphQLWS.Messenger, @un
1719
self.logger = logger
1820
}
1921

20-
func send<S: Collection>(_ message: S) async throws where S.Element == Character {
21-
logger.trace("GraphQL server sent: \(String(message))")
22-
try await outbound.write(.text(String(message)))
22+
func send(_ message: Data) async throws {
23+
try await outbound.withTextMessageWriter { writer in
24+
try await writer.callAsFunction(ByteBuffer(data: message))
25+
}
26+
logger.trace("GraphQL server sent: \(String(decoding: message, as: UTF8.self))")
2327
}
2428

2529
func error(_ message: String, code: Int) async throws {

0 commit comments

Comments
 (0)