This repository has been archived by the owner on Aug 17, 2022. It is now read-only.
forked from jeroni7100/zwift-packet-monitor
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathzwiftMessages.proto
341 lines (310 loc) · 8.44 KB
/
zwiftMessages.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
syntax="proto3";
message PlayerState {
int32 athleteId = 1;
int64 _worldTime = 2;
int32 distance = 3; // meters
int32 roadLocation = 4; // Location on road in percent * 10,000.
int32 laps = 5;
int32 _speed = 6; // mm / hour
int32 roadPosition = 8; // Horiz, i.e. lane.
int32 _cadenceUHz = 9;
int32 draft = 10; // seems to be in percentage.
int32 heartrate = 11;
int32 power = 12;
int32 _heading = 13; // microrads from -pi -> 3pi
int32 lean = 14;
int32 climbing = 15;
int32 time = 16;
uint32 frameHue = 18;
uint32 _flags1 = 19; // Packed with info parsed in user code
uint32 _flags2 = 20; // Packed with info parsed in user code
uint32 _progress = 21; // 16-32 are some sort of inverse mask when set, 8-16 is pct progress, 0 is workout
int64 _joinTime = 22;
bool justWatching = 23;
int32 _mwHours = 24; // milliwatt/hours of energy
float x = 25; // cartesian meters
float y = 27; // cartesian meters
float altitude = 26;
int32 watchingAthleteId = 28;
int32 groupId = 29;
int32 sport = 31; // 0 = biking, 1 = running
float _distanceWithLateral = 34; // cm
int32 world = 35;
int32 _f36 = 36; // low vals like 56 maybe segment/route/course/road related
int32 _f37 = 37; // low vals like 4 maybe segment/route/course/road related
bool canSteer = 38;
uint32 route = 39;
int64 _f41 = 41; // varint
}
message OutgoingPacket {
int32 connectedRealm = 1;
int32 athleteId = 2;
int64 _worldTime = 3;
int32 seqno = 4;
PlayerState state = 7;
int64 _f8 = 8;
int64 _f9 = 9;
int64 lastUpdate = 10;
int64 _f11 = 11;
int64 lastPlayerUpdate = 12;
int64 largestWorldAttributeTimestamp = 13;
repeated int64 subscribedSegments = 15;
repeated int64 unsubscribedSegments = 16;
}
message WorldUpdate {
int64 _worldTime = 1;
int32 realm = 2;
enum PayloadType {
_UNSET = 0;
PayloadLeftWorld = 2;
PayloadLeftWorld2 = 3;
PayloadRideOn = 4;
PayloadChatMessage = 5;
PayloadEvent = 6;
PayloadEventJoin = 7;
PayloadEventLeave = 8;
PayloadRequestProfile = 9;
PayloadReceiveInvitation = 10;
_kicked = 11;
_worldTime = 100;
_setRoadTime = 101;
_performAction = 102;
PayloadSegmentResult = 105;
_flag = 106;
_rideLeaderAction = 108;
_groupEventUserRegistered = 109;
_notableMoment = 110;
_fenceStats = 113;
_fenceConfig = 114;
}
PayloadType _payloadType = 3;
bytes _payload = 4;
int64 _worldTimeBorn = 5;
int64 x = 6;
int64 altitude = 7;
int64 z = 8;
int64 _worldTimeExpire = 9;
int64 relId = 10;
int32 importance = 11;
int64 _f12 = 12;
uint64 ts = 14;
int32 _f15 = 15;
}
message PayloadEventJoin {
int32 eventId = 1;
}
message PayloadEventLeave {
int32 eventId = 1;
}
message PayloadSegmentResult {
int64 id = 1;
int32 athleteId = 2;
int32 realm = 3;
int32 courseId = 4;
uint64 _unsignedSegmentId = 5;
uint32 eventSubgroupId = 6;
string firstName = 7;
string lastName = 8;
uint64 _worldTime = 9;
string finishTime = 10;
uint32 elapsed = 11; // ms
int32 powerType = 12;
int32 weight = 13; // grams
int32 _f14 = 14;
uint32 avgPower = 15;
bool male = 16;
string leaderboardBirth = 17;
uint32 playerType = 18;
int32 avgHR = 19;
int32 sport = 20;
int64 activityId = 21;
}
// for /api/segment-results
message SegmentResults {
uint32 realm = 1;
uint64 _unsignedSegmentId = 2;
uint64 eventSubgroupId = 3;
repeated PayloadSegmentResult results = 4;
}
message PayloadChatMessage {
int32 from = 1;
int32 to = 2; // 0 if public message
int32 _f3 = 3; // always value 1 ?
string firstName = 4;
string lastName = 5;
string message = 6;
string avatar = 7;
int32 countryCode = 8;
int32 eventSubgroup = 11;
}
message PayloadRideOn {
int32 from = 1;
int32 to = 2;
string firstName = 3;
string lastName = 4;
int32 countryCode = 5;
}
message Payload2 {
int32 _f1 = 1;
int64 _f2 = 2;
}
message PayloadLeftWorld {
int64 athleteId = 1;
int64 _worldTime = 2;
bool multipleLogins = 3;
bool _f4 = 4; // maybe bool
}
message PayloadLeftWorld2 {
int64 athleteId = 1;
int64 _worldTime = 2;
bool multipleLogins = 3;
bool _f4 = 4; // maybe bool
}
message PayloadEvent {
int32 id = 1;
int32 _f2 = 2; // varint maybe bool
string name = 3; // ldelim
string desc = 4; // ldelim
uint64 ts = 5; // varint
fixed32 distance = 7;
int32 _f8 = 8; // varint maybe bool
message Attrs {
int32 id = 1;
string name = 2;
string desc = 3;
string _f7 = 7;
int64 _f8 = 8; // varint
int64 _f9 = 9; // varint
int64 _f10 = 10; // varint
int64 _f11 = 11; // varint
int64 _f12 = 12; // varint
int64 _f13 = 13; // varint
int64 _f14 = 14; // varint
int64 _f15 = 15; // varint
int64 _f16 = 16; // varint
int64 _f17 = 17; // varint
int64 _f18 = 18; // varint
int64 _f22 = 22; // varint
fixed32 distance = 24;
int64 _f25 = 25; // varint
int64 _f29 = 29; // varint
int64 _f30 = 30; // varint
int64 _f31 = 31; // varint
fixed32 _f32_maybe_float_XXX= 32; // maybe float
fixed32 _f33_maybe_float_XXX = 33; // maybe float
int64 duration = 34; // varint
int64 _f42 = 42; // varint
int64 _f44 = 44; // varint
int64 _f46 = 46; // varint
int64 _f47 = 47; // varint
}
repeated Attrs attrs = 10;
string imageUrl = 12;
int32 duration = 13; // varint
int64 _f14 = 14; // varint
int32 _f15 = 15; // varint
int32 _f17 = 17; // varint
int32 _f18 = 18; // varint
int64 _f19 = 19; // varint
int32 _f22 = 22; // varint
int32 _f23 = 23; // varint
int32 meetupOnlyView = 24; // varint
int32 _f25 = 25; // varint
int32 _f27 = 27; // varint
int32 _f28 = 28; // varint
int32 _f29 = 29; // varint
int32 _f34 = 34; // varint
int32 _f35 = 35; // varint
int64 _f36 = 36; // varint
}
message EventPositions {
int32 position = 1;
message PlayerPlacement {
int32 athleteId = 1;
float distanceCovered = 2; // maybe fixed32?
int32 distanceToLeader = 3; // cm?, ms?
}
repeated PlayerPlacement player1 = 2;
repeated PlayerPlacement player2 = 3;
repeated PlayerPlacement player3 = 4; // leader? self?
repeated PlayerPlacement player4 = 5; // tail?
int32 activeAthleteCount = 6;
int32 leaderAthleteId = 7;
int32 distanceToLeader = 8; // cm?, ms?
int32 athleteCount = 116;
}
message IncomingPacket {
int32 realm = 1;
int32 athleteId = 2;
int64 _worldTime = 3;
int32 seqno = 4;
int32 _f5 = 5; // varint
repeated PlayerState playerStates = 8;
repeated WorldUpdate worldUpdates = 9;
int64 _f11 = 11;
string localIP = 12;
int32 athleteCount = 14;
int32 localPort = 15;
int32 protocol = 16; // 1 = UDP, 2 = TCP
int64 latency = 17;
int32 messageCount = 18;
int32 msgCount = 19;
EventPositions eventPositions = 23;
//Server1 servers1 = 24;
//Server2 servers2 = 25;
repeated PlayerState playerStates2XXX = 28; // not so sure about this..
}
/*
message ServerAddress {
int32 _f1 = 1;
int32 _f2 = 2;
string ip = 3;
int32 _f4 = 4;
fixed32 _f5 = 5;
fixed32 _f6 = 6;
}
message ServerPool {
int32 _f1 = 1;
int32 _f2 = 2;
repeated ServerAddress addresses = 3;
int32 _f4 = 4;
}
message Server2 {
repeated ServerPool pool = 1;
int32 _f2 = 2;
int64 _f4_NEW_XXX = 4; // varint
fixed32 _f5_NEW_XXX = 5;
fixed32 _f6_NEW_XXX = 6;
}
message Server1 {
repeated ServerAddress addresses = 1;
int32 _f2 = 2;
int32 _f3 = 3;
int32 _f4 = 4;
}
*/
message WorldAttributes {
int32 worldId = 1;
string name = 2;
int64 _f3 = 3;
int64 _f5 = 4;
int64 worldTime = 6;
int64 clockTime = 7;
}
message WorldAttribute {
int64 worldTime = 2;
}
message AthleteAttributes {
int32 _f2 = 2;
int32 _f3 = 3;
message AttributeMessage {
int32 myId = 1;
int32 theirId = 2;
string firstName = 3;
string lastName = 4;
int32 countryCode = 5;
}
AttributeMessage attributeMessage = 4;
int32 theirId = 10;
int32 _f13 = 13;
}