forked from nillerusr/source-engine
-
Notifications
You must be signed in to change notification settings - Fork 2
/
gcsdk_gcmessages.proto
376 lines (328 loc) · 12.5 KB
/
gcsdk_gcmessages.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
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
//====== Copyright 1996-2010, Valve Corporation, All rights reserved. =======
//
// Purpose: The file defines our Google Protocol Buffers which are used in over
// the wire messages between servers as well as between the TF GC and TF gameservers
// and clients.
//
//=============================================================================
// We care more about speed than code size
option optimize_for = SPEED;
// We don't use the service generation functionality
option cc_generic_services = false;
//
// STYLE NOTES:
//
// Use CamelCase CMsgMyMessageName style names for messages.
//
// Use lowercase _ delimited names like my_steam_id for field names, this is non-standard for Steam,
// but plays nice with the Google formatted code generation.
//
// Try not to use required fields ever. Only do so if you are really really sure you'll never want them removed.
// Optional should be preffered as it will make versioning easier and cleaner in the future if someone refactors
// your message and wants to remove or rename fields.
//
// Use fixed64 for JobId_t, GID_t, or SteamID. This is appropriate for any field that is normally
// going to be larger than 2^56. Otherwise use int64 for 64 bit values that are frequently smaller
// than 2^56 as it will safe space on the wire in those cases.
//
// Similar to fixed64, use fixed32 for RTime32 or other 32 bit values that are frequently larger than
// 2^28. It will safe space in those cases, otherwise use int32 which will safe space for smaller values.
// An exception to this rule for RTime32 is if the value will frequently be zero rather than set to an actual
// time.
//
import "steammessages.proto";
message CMsgSOIDOwner
{
optional uint32 type = 1;
optional uint64 id = 2;
}
//
// k_ESOMsg_Create
// k_ESOMsg_Update
// k_ESOMsg_Destroy
//
message CMsgSOSingleObject
{
optional fixed64 owner = 1; // the steam ID of the owner of this object
optional int32 type_id = 2; // the shared object type ID of this object
optional bytes object_data = 3; // the actual data for the object
optional fixed64 version = 4; // version of the cache
optional CMsgSOIDOwner owner_soid = 5; // The SOID that owns this object
optional uint32 service_id = 6; // The service that sent this update
};
//
// k_ESOMsg_UpdateMultiple
//
message CMsgSOMultipleObjects
{
message SingleObject
{
optional int32 type_id = 1; // the shared object type ID of this object
optional bytes object_data = 2; // the actual data for the object
};
optional fixed64 owner = 1; // the steam ID of the owner of the objects
repeated SingleObject objects = 2; // a list of types
optional fixed64 version = 3; // version of the cache
optional CMsgSOIDOwner owner_soid = 6; // The SOID that owns this object
optional uint32 service_id = 7; // The service that sent this update
};
//
// k_ESOMsg_CacheSubscribed
//
message CMsgSOCacheSubscribed
{
message SubscribedType
{
optional int32 type_id = 1; // ID of the type for these objects
repeated bytes object_data = 2; // the data for all the objects of this type
};
optional fixed64 owner = 1; // the owner of this cache
repeated SubscribedType objects = 2; // a list of types
optional fixed64 version = 3; // version of the cache
optional CMsgSOIDOwner owner_soid = 4; // The SOID that owns this object
optional uint32 service_id = 5; // The service that is providing this SO cache information
repeated uint32 service_list = 6; // Other services that are providing parts of this cache and need to to be received for it to be complete
optional fixed64 sync_version = 7; // The unique ID of the sync to ensure all subscribes across services match. Ignored/not provided if no other GCs are involved
};
//
// k_ESOMsg_CacheSubscribedUpToDate
//
message CMsgSOCacheSubscribedUpToDate
{
optional fixed64 version = 1; // version of the cache for this sub GC
optional CMsgSOIDOwner owner_soid = 2; // The SOID that owns this object
optional uint32 service_id = 3; // The service that is providing this SO cache information
repeated uint32 service_list = 4; // Other services that are providing parts of this cache and need to to be received for it to be complete
optional fixed64 sync_version = 5; // The unique ID of the sync to ensure all subscribes across services match. Ignored/not provided if no other GCs are involved
};
//
// k_ESOMsg_CacheUnsubscribed
//
message CMsgSOCacheUnsubscribed
{
optional fixed64 owner = 1; // the owner of this cache
};
//
// k_ESOMsg_CacheSubscriptionCheck
//
message CMsgSOCacheSubscriptionCheck
{
optional fixed64 owner = 1; // the owner of the cache
optional fixed64 version = 2; // version of the cache
optional CMsgSOIDOwner owner_soid = 3; // The SOID that owns this object
optional uint32 service_id = 4; // The service associated with this version
repeated uint32 service_list = 5; // The other services that need to provide information on this cache
optional fixed64 sync_version = 6; // The unique ID of the sync to ensure all subscribes across services match. Ignored/not provided if no other GCs are involved
};
//
// k_ESOMsg_CacheSubscriptionRefresh
//
message CMsgSOCacheSubscriptionRefresh
{
optional fixed64 owner = 1; // the owner of the cache
optional CMsgSOIDOwner owner_soid = 2; // The SOID that owns this object
};
//
// Stored in memcached for each SO Cache
//
message CMsgSOCacheVersion
{
optional fixed64 version = 1; // version of the cache
};
enum PartnerAccountType
{
//the default for users, which is an account not linked to a provider
PARTNER_NONE = 0;
//linked to a Perfect World account
PARTNER_PERFECT_WORLD = 1;
//linked to a Nexon account
PARTNER_NEXON = 2;
};
message CMsgGCMultiplexMessage
{
optional uint32 msgtype = 1; // ID of the message being sent
optional bytes payload = 2; // Serialized message to send
repeated fixed64 steamids = 3; // Clients to send the message to
};
// k_EGCToGCMsgMasterAck
message CGCToGCMsgMasterAck
{
optional uint32 dir_index = 1; // the index from the directory that this GC is responsible for
optional string machine_name = 3; // the machine name that this GC is running on so that we can quickly see the universe configuration
optional string process_name = 4; // the name of the process that this is running to ensure that it matches
repeated uint32 type_instances = 5; // the list of type instances contained within this process, must match the master directory
};
// k_EGCToGCMsgMasterAck_Response
message CGCToGCMsgMasterAck_Response
{
optional int32 eresult = 1 [default = 2]; // Is this GC what the master thinks it should be?
};
// k_EGCToGCMsgMasterStartupComplete
message CGCToGCMsgMasterStartupComplete
{
message GCInfo
{
optional uint32 dir_index = 1;
optional string machine_name = 2;
};
repeated GCInfo gc_info = 1;
};
// k_EGCToGCMsgRouted
message CGCToGCMsgRouted
{
optional uint32 msg_type = 1; // the type of the contained message
optional fixed64 sender_id = 2; // steam ID of the client that sent this. If nil, it came from the system instead.
optional bytes net_message = 3; // the binary blob contents of the contained message
};
// k_EGCToGCMsgRoutedReply
message CGCToGCMsgRoutedReply
{
optional uint32 msg_type = 1; // the type of the contained message
optional bytes net_message = 2; // the binary blob contents of the contained message
};
// k_EMsgGCUpdateSubGCSessionInfo
message CMsgGCUpdateSubGCSessionInfo
{
message CMsgUpdate
{
optional fixed64 steamid = 1;
optional fixed32 ip = 2;
optional bool trusted = 3;
};
repeated CMsgUpdate updates = 1; // the list of updates we should process (in order)
}
// k_EMsgGCRequestSubGCSessionInfo
message CMsgGCRequestSubGCSessionInfo
{
optional fixed64 steamid = 1;
}
// k_EMsgGCRequestSubGCSessionInfoRespone
message CMsgGCRequestSubGCSessionInfoResponse
{
optional fixed32 ip = 1;
optional bool trusted = 2;
}
// k_EMsgGCToGCIncrementRecruitmentLevel
message CMsgGCToGCIncrementRecruitmentLevel
{
optional fixed64 steamid = 1;
}
//
// CMsgSOCacheHaveVersion
//
// An array of these is sent to indicate what SO cache versions we currently have
//
message CMsgSOCacheHaveVersion
{
optional CMsgSOIDOwner soid = 1; // ID of the cache we have
optional fixed64 version = 2; // version stamp we have of this cache
optional uint32 service_id = 3; // For partial caches, what service this version is associated with
};
// !FIXME! DOTAMERGE
////
//// CMsgClientHello
////
//message CMsgClientHello
//{
// optional uint32 version = 1;
// repeated CMsgSOCacheHaveVersion socache_have_versions = 2;
//
// /// Game-specific value indicating what state the client is in,
// /// and what sort of session is wants. This is used to decide
// /// whether the client even needs a session, and if so, what
// /// priority we should assign
// optional uint32 client_session_need = 3;
//
// /// What special partner-specific launcher was used, if any?
// optional PartnerAccountType client_launcher = 4;
//
// /// Secret Key used to gain elevated status with the GC
// optional string secret_key = 5;
//};
//
////
//// CMsgClientWelcome
////
//message CMsgClientWelcome
//{
// optional uint32 version = 1;
// optional bytes game_data = 2;
//
// // List of caches to which the client is now subscribed, but
// // the GC thinks we don't have the latest data so it is included it here.
// repeated CMsgSOCacheSubscribed outofdate_subscribed_caches = 3;
//
// // List of caches to which the client is now subscribed, and the
// // GC thinks that we already have the latest version. (It is sending
// // the version number just to make sure.)
// repeated CMsgSOCacheSubscriptionCheck uptodate_subscribed_caches = 4;
//
// // location information
// message Location
// {
// optional float latitude = 1;
// optional float longitude = 2;
// optional string country = 3;
// }
//
// optional Location location = 5;
//
// optional bytes save_game_key = 6;
//};
/// Status of connection to GC.
//
// Don't change these values, as they need to be consistent across props, since they
// are central to handshaking with clients old and new!
enum GCConnectionStatus
{
GCConnectionStatus_HAVE_SESSION = 0; // You have a session. (The status of one or more services may have changed.)
GCConnectionStatus_GC_GOING_DOWN = 1; // Notification that the entire GC system is going down.
GCConnectionStatus_NO_SESSION = 2; // You don't have a session. Please send a hello message to initiate the session creation process.
GCConnectionStatus_NO_SESSION_IN_LOGON_QUEUE = 3; // You don't have a session, but we have your info and will sign you on ASAP. No need to send it again.
GCConnectionStatus_NO_STEAM = 4; // Client-side only value. We aren't connected to Steam.
GCConnectionStatus_SUSPENDED = 5; // Client-side only value. We were told that we've been suspended from connecting to this GC. No need to try again later.
};
//
// CMsgConnectionStatus
//
message CMsgConnectionStatus
{
optional GCConnectionStatus status = 1;
optional uint32 client_session_need = 2; // The last client session need state we got from you.
//
// If they are in the queue, this tells them where they are.
//
optional int32 queue_position = 3; // your approximate position in the queue
optional int32 queue_size = 4; // how many people are in the queue
optional int32 wait_seconds = 5; // how long you've been waiting
optional int32 estimated_wait_seconds_remaining = 6; // estimated time until you are logged on.
// TODO: Here we could include a list of services
// (perhaps just SO cache type ID's?) that
// are currently known to be offline.
};
//k_EMsgGCToGCSOCacheSubscribe
message CMsgGCToGCSOCacheSubscribe
{
message CMsgHaveVersions
{
optional uint32 service_id = 1;
optional uint64 version = 2;
};
optional fixed64 subscriber = 1; // the ID of the user that is subscribing to a cache
optional fixed64 subscribe_to = 2; // the ID of the cache that is being subscribed to
optional fixed64 sync_version = 3; // the unique ID that is used to distinguish this synch across the various parts
repeated CMsgHaveVersions have_versions = 4; // the version that the client has already (used to skip unnecessary sends)
};
//k_EMsgGCToGCSOCacheUnsubscribe
message CMsgGCToGCSOCacheUnsubscribe
{
optional fixed64 subscriber = 1; // if 0, then this means unsubscribe everyone from the cache
optional fixed64 unsubscribe_from = 2; // the cache we are unsubscribing from
};
// k_EMsgGCPingRequest
// k_EMsgGCPingReply
message CMsgGCClientPing
{
// Remember, if you need to associate ping replies with requests, consider using the JobID field
};
// Do not remove this comment due to a bug on the Mac OS X protobuf compiler