-
Notifications
You must be signed in to change notification settings - Fork 3
/
backend.proto
204 lines (163 loc) · 5.01 KB
/
backend.proto
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
// server - server 의 service, rpc, message 정의.
syntax = "proto3";
// import "sample.proto"; // 공통 message 를 사용할 수 있으면 좋겠는데.. 경로문제로 쉽지 않네.
package K2B;
message Null {} // same as google.protobuf.Empty
// Services
service ServerManager {
rpc Register (RegisterRequest) returns (RegisterResponse);
rpc Unregister (UnregisterRequest) returns (Null); // 정상적인 종료
rpc Ping (PingRequest) returns (PingResponse);
rpc Broadcast (PushRequest) returns (Null);
}
service ServerHost { // from ServerManager
rpc Stop (StopRequest) returns (Null); // 종료 명령
rpc Broadcast (PushRequest) returns (Null);
rpc UpdateBackend (UpdateBackendRequest) returns (Null);
}
service SessionManager {
rpc AddUser (AddUserRequest) returns (AddUserResponse);
rpc RemoveUser (RemoveUserRequest) returns (RemoveUserResponse);
rpc KickUser (KickUserRequest) returns (KickUserResponse);
rpc Push (PushRequest) returns (PushResponse);
}
service SessionHost { // from SessionManager
rpc KickUser (KickUserRequest) returns (KickUserResponse);
rpc Push (PushRequest) returns (PushResponse);
rpc IsOnline (IsOnlineRequest) returns (IsOnlineResponse);
}
// Common messages
message PushRequest {
message PushResponse { // K2.PushResponse
enum PushType {
ERROR = 0;
MESSAGE = 1;
CONFIG = 2;
COMMAND = 3;
}
PushType type = 1;
string message = 2;
string extra = 3;
}
string targetUserId = 1;
PushResponse pushMessage = 2;
}
// ServerManager /////////////////////////////////////////////////////////////
message RegisterRequest { // 서버가 시작되면 실행환경 정보와 함께 요청
string version = 1;
string serverId = 11; // backend communication 에 사용될 unique key
int32 listeningPort = 12;
string publicIp = 13; // null or empty 인 경우, backend 전용
string serviceScheme = 14; // "http" or "https"
// backend unique service
bool hasServerManager = 21;
bool hasSessionManager = 22;
// frontend Services
bool hasPush = 31;
bool hasInit = 32;
bool hasPushSample = 33;
bool hasSimpleSample = 34;
}
message RegisterResponse {
enum ResultType {
OK = 0;
INVALID_VERSION = 1;
DUPLICATED_SERVER_ID = 2;
SERVERMANAGER_NOT_READY = 3;
DUPLICATED_BACKEND_LISTENING_ADDRESS = 11;
DUPLICATED_FRONTEND_LISTENING_ADDRESS = 12;
ALREADY_HAS_SERVER_MANAGEMENT = 21;
ALREADY_HAS_USER_SEESION = 22;
UNKNOWN_ERROR = 99;
}
ResultType result = 1; // OK 가 아닌 경우 일정 시간 이후에 다시 register(서비스 시작) 시도(standby). 이전 연결 데이터가 남아있기 때문일 수 있음.
string backendListeningAddress = 2;
string frontendListeningAddress = 3;
// backend service address
string serverManagementAddress = 11; // local 설정을 통해 Register 했기 때문에 굳이 사용될 일은 없지만, 데이터 일관성을 위해 유지
string userSessionAddress = 12;
}
message UnregisterRequest {
string serverId = 1;
}
message PingRequest {
string serverId = 1;
// hardware
uint32 cpuUsagePercent = 2;
uint64 memoryUsage = 3;
uint64 freeHddBytes = 4;
// service
uint32 population = 101;
// more service status here
}
message PingResponse {
bool ok = 1; // false 인 경우 정책에 따라 서비스를 종료하거나, 다시 register 하거나 등등
}
///////////////////////////////////////////////////////////// ServerManager //
// ServerHost ////////////////////////////////////////////////////////////////
message StopRequest {
string reason = 1;
}
message UpdateBackendRequest {
string SessionManagerAddress = 1; // session manager 를 사용할 수 없는 경우 공백
}
//////////////////////////////////////////////////////////////// ServerHost //
// SessionManager ////////////////////////////////////////////////////////////
message AddUserRequest {
string backendListeningAddress = 1; // push backend
string userId = 3;
bool force = 4; // 이미 연결중이라도 강제로 대체하고 Kick을 발생시킬 것.
}
message AddUserResponse {
enum ResultType {
OK = 0;
FORCE_ADDED = 1;
ALREADY_CONNECTED = 2;
UNKNOWN_ERROR = 10; // 해당 서버에 이미 있다고 나오는 경우 등
}
ResultType result = 1;
}
message RemoveUserRequest {
string backendListeningAddress = 1;
string userId = 2;
}
message RemoveUserResponse {
enum ResultType {
OK = 0;
NOT_EXIST = 1;
UNKNOWN_ERROR = 10;
}
ResultType result = 1;
}
message PushResponse {
enum ResultType {
OK = 0;
NOT_EXIST = 1;
UNKNOWN_ERROR = 10;
}
ResultType result = 1;
}
message KickUserRequest {
string userId = 1;
}
message KickUserResponse {
enum ResultType {
OK = 0;
NOT_EXIST = 1;
UNKNOWN_ERROR = 10;
}
ResultType result = 1;
}
//////////////////////////////////////////////////////////// SessionManager //
// SessionHost ///////////////////////////////////////////////////////////////
message IsOnlineRequest {
string userId = 1;
}
message IsOnlineResponse {
enum ResultType {
ONLINE = 0;
OFFLINE = 1;
}
ResultType result = 1;
}
/////////////////////////////////////////////////////////////// SessionHost //