forked from KyoheiG3/grpc-swift
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserver.swift
73 lines (68 loc) · 2.92 KB
/
server.swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
//-{% for service in file.services %}
/// To build a server, implement a class that conforms to this protocol.
{{ access }} protocol {{ .|provider:file,service }} {
//-{% for method in service.methods %}
//-{% if method|methodIsUnary %}
func {{ method|methodDescriptorName|lowercase }}(request: {{ method|input }}, session: {{ .|session:file,service,method }}) throws -> {{ method|output }}
//-{% endif %}
//-{% if method|methodIsServerStreaming %}
func {{ method|methodDescriptorName|lowercase }}(request: {{ method|input }}, session: {{ .|session:file,service,method }}) throws
//-{% endif %}
//-{% if method|methodIsClientStreaming %}
func {{ method|methodDescriptorName|lowercase }}(session: {{ .|session:file,service,method }}) throws
//-{% endif %}
//-{% if method|methodIsBidiStreaming %}
func {{ method|methodDescriptorName|lowercase }}(session: {{ .|session:file,service,method }}) throws
//-{% endif %}
//-{% endfor %}
}
//-{% for method in service.methods %}
//-{% if method|methodIsUnary %}
//-{% include "server-session-unary.swift" %}
//-{% endif %}
//-{% if method|methodIsServerStreaming %}
//-{% include "server-session-serverstreaming.swift" %}
//-{% endif %}
//-{% if method|methodIsClientStreaming %}
//-{% include "server-session-clientstreaming.swift" %}
//-{% endif %}
//-{% if method|methodIsBidiStreaming %}
//-{% include "server-session-bidistreaming.swift" %}
//-{% endif %}
//-{% endfor %}
/// Main server for generated service
{{ access }} final class {{ .|server:file,service }}: ServiceServer {
private let provider: {{ .|provider:file,service }}
{{ access }} init(address: String, provider: {{ .|provider:file,service }}) {
self.provider = provider
super.init(address: address)
}
{{ access }} init?(address: String, certificateURL: URL, keyURL: URL, provider: {{ .|provider:file,service }}) {
self.provider = provider
super.init(address: address, certificateURL: certificateURL, keyURL: keyURL)
}
/// Start the server.
{{ access }} override func handleMethod(_ method: String, handler: Handler, queue: DispatchQueue) throws -> Bool {
let provider = self.provider
switch method {
//-{% for method in service.methods %}
case "{{ .|path:file,service,method }}":
//-{% if method|methodIsUnary or method|methodIsServerStreaming %}
try {{ .|session:file,service,method }}Base(
handler: handler,
providerBlock: { try provider.{{ method|methodDescriptorName|lowercase }}(request: $0, session: $1 as! {{ .|session:file,service,method }}Base) })
.run(queue: queue)
//-{% else %}
try {{ .|session:file,service,method }}Base(
handler: handler,
providerBlock: { try provider.{{ method|methodDescriptorName|lowercase }}(session: $0 as! {{ .|session:file,service,method }}Base) })
.run(queue: queue)
//-{% endif %}
return true
//-{% endfor %}
default:
return false
}
}
}
//-{% endfor %}