@@ -40,7 +40,7 @@ struct Serve: AsyncParsableCommand {
40
40
let features = try self . loadFeatures ( )
41
41
let transport = HTTP2ServerTransport . Posix (
42
42
address: . ipv4( host: " 127.0.0.1 " , port: self . port) ,
43
- config : . defaults ( transportSecurity: . plaintext)
43
+ transportSecurity: . plaintext
44
44
)
45
45
46
46
let server = GRPCServer ( transport: transport, services: [ RouteGuideService ( features: features) ] )
@@ -99,56 +99,54 @@ struct RouteGuideService {
99
99
}
100
100
}
101
101
102
- extension RouteGuideService : Routeguide_RouteGuide . ServiceProtocol {
102
+ extension RouteGuideService : Routeguide_RouteGuide . SimpleServiceProtocol {
103
103
func getFeature(
104
- request: ServerRequest < Routeguide_Point > ,
104
+ request: Routeguide_Point ,
105
105
context: ServerContext
106
- ) async throws -> ServerResponse < Routeguide_Feature > {
106
+ ) async throws -> Routeguide_Feature {
107
107
let feature = self . findFeature (
108
- latitude: request. message . latitude,
109
- longitude: request. message . longitude
108
+ latitude: request. latitude,
109
+ longitude: request. longitude
110
110
)
111
111
112
112
if let feature {
113
- return ServerResponse ( message : feature)
113
+ return feature
114
114
} else {
115
115
// No feature: return a feature with an empty name.
116
116
let unknownFeature = Routeguide_Feature . with {
117
117
$0. name = " "
118
118
$0. location = . with {
119
- $0. latitude = request. message . latitude
120
- $0. longitude = request. message . longitude
119
+ $0. latitude = request. latitude
120
+ $0. longitude = request. longitude
121
121
}
122
122
}
123
- return ServerResponse ( message : unknownFeature)
123
+ return unknownFeature
124
124
}
125
125
}
126
126
127
127
func listFeatures(
128
- request: ServerRequest < Routeguide_Rectangle > ,
128
+ request: Routeguide_Rectangle ,
129
+ response: RPCWriter < Routeguide_Feature > ,
129
130
context: ServerContext
130
- ) async throws -> StreamingServerResponse < Routeguide_Feature > {
131
- return StreamingServerResponse { writer in
132
- let featuresWithinBounds = self . features. filter { feature in
133
- !feature. name. isEmpty && feature. isContained ( by: request. message)
134
- }
135
-
136
- try await writer. write ( contentsOf: featuresWithinBounds)
137
- return [ : ]
131
+ ) async throws {
132
+ let featuresWithinBounds = self . features. filter { feature in
133
+ !feature. name. isEmpty && feature. isContained ( by: request)
138
134
}
135
+
136
+ try await response. write ( contentsOf: featuresWithinBounds)
139
137
}
140
138
141
139
func recordRoute(
142
- request: StreamingServerRequest < Routeguide_Point > ,
140
+ request: RPCAsyncSequence < Routeguide_Point , any Error > ,
143
141
context: ServerContext
144
- ) async throws -> ServerResponse < Routeguide_RouteSummary > {
142
+ ) async throws -> Routeguide_RouteSummary {
145
143
let startTime = ContinuousClock . now
146
144
var pointsVisited = 0
147
145
var featuresVisited = 0
148
146
var distanceTravelled = 0.0
149
147
var previousPoint : Routeguide_Point ? = nil
150
148
151
- for try await point in request. messages {
149
+ for try await point in request {
152
150
pointsVisited += 1
153
151
154
152
if self . findFeature ( latitude: point. latitude, longitude: point. longitude) != nil {
@@ -170,19 +168,17 @@ extension RouteGuideService: Routeguide_RouteGuide.ServiceProtocol {
170
168
$0. distance = Int32 ( distanceTravelled)
171
169
}
172
170
173
- return ServerResponse ( message : summary)
171
+ return summary
174
172
}
175
173
176
174
func routeChat(
177
- request: StreamingServerRequest < Routeguide_RouteNote > ,
175
+ request: RPCAsyncSequence < Routeguide_RouteNote , any Error > ,
176
+ response: RPCWriter < Routeguide_RouteNote > ,
178
177
context: ServerContext
179
- ) async throws -> StreamingServerResponse < Routeguide_RouteNote > {
180
- return StreamingServerResponse { writer in
181
- for try await note in request. messages {
182
- let notes = self . receivedNotes. recordNote ( note)
183
- try await writer. write ( contentsOf: notes)
184
- }
185
- return [ : ]
178
+ ) async throws {
179
+ for try await note in request {
180
+ let notes = self . receivedNotes. recordNote ( note)
181
+ try await response. write ( contentsOf: notes)
186
182
}
187
183
}
188
184
}
0 commit comments