steamd 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +5 -0
  3. data/.rspec +2 -0
  4. data/.rubocop.yml +4 -0
  5. data/.ruby-version +1 -0
  6. data/.travis.yml +6 -0
  7. data/Gemfile +3 -0
  8. data/LICENSE +21 -0
  9. data/README.md +51 -0
  10. data/Rakefile +22 -0
  11. data/bin/console +6 -0
  12. data/bin/setup +6 -0
  13. data/bin/steamd +6 -0
  14. data/grammar/class.treetop +63 -0
  15. data/grammar/enums.treetop +44 -0
  16. data/grammar/import.treetop +11 -0
  17. data/grammar/shared.treetop +62 -0
  18. data/grammar/steamd.treetop +15 -0
  19. data/language/emsg.steamd +1802 -0
  20. data/language/enums.steamd +989 -0
  21. data/language/eresult.steamd +119 -0
  22. data/language/gamecoordinator.steamd +17 -0
  23. data/language/header.steamd +37 -0
  24. data/language/netheader.steamd +62 -0
  25. data/language/steammsg.steamd +357 -0
  26. data/lib/ext/string.rb +33 -0
  27. data/lib/steamd.rb +40 -0
  28. data/lib/steamd/cli.rb +24 -0
  29. data/lib/steamd/cli_options.rb +58 -0
  30. data/lib/steamd/code_generator.rb +41 -0
  31. data/lib/steamd/generated/emsg.rb +3464 -0
  32. data/lib/steamd/generated/enums.rb +1750 -0
  33. data/lib/steamd/generated/eresult.rb +236 -0
  34. data/lib/steamd/generated/gamecoordinator.rb +119 -0
  35. data/lib/steamd/generated/header.rb +261 -0
  36. data/lib/steamd/generated/netheader.rb +315 -0
  37. data/lib/steamd/generated/steammsg.rb +2527 -0
  38. data/lib/steamd/generator.rb +6 -0
  39. data/lib/steamd/generator/generated_class.rb +128 -0
  40. data/lib/steamd/generator/generated_enum.rb +60 -0
  41. data/lib/steamd/generator/generated_import.rb +21 -0
  42. data/lib/steamd/generator/implementation.rb +83 -0
  43. data/lib/steamd/generator/ruby/class.erb +39 -0
  44. data/lib/steamd/generator/ruby/enum.erb +14 -0
  45. data/lib/steamd/generator/ruby/import.erb +1 -0
  46. data/lib/steamd/generator/ruby/ruby.rb +54 -0
  47. data/lib/steamd/generator/ruby/serializable_constant.rb +20 -0
  48. data/lib/steamd/generator/ruby/serializable_type.rb +93 -0
  49. data/lib/steamd/generator/ruby/serializable_variable.rb +85 -0
  50. data/lib/steamd/generator/ruby/steam_serializable.rb +89 -0
  51. data/lib/steamd/nodes/block_node.rb +14 -0
  52. data/lib/steamd/nodes/class_statement_node.rb +46 -0
  53. data/lib/steamd/nodes/class_type_node.rb +12 -0
  54. data/lib/steamd/nodes/enum_statement_node.rb +50 -0
  55. data/lib/steamd/nodes/enum_variable_node.rb +24 -0
  56. data/lib/steamd/nodes/import_statement_node.rb +26 -0
  57. data/lib/steamd/nodes/node.rb +3 -0
  58. data/lib/steamd/nodes/nodes.rb +10 -0
  59. data/lib/steamd/nodes/variable_node.rb +106 -0
  60. data/lib/steamd/parser.rb +157 -0
  61. data/lib/steamd/version.rb +14 -0
  62. data/steamd.gemspec +38 -0
  63. data/tasks/language.rake +11 -0
  64. metadata +220 -0
@@ -0,0 +1,119 @@
1
+ enum EResult
2
+ {
3
+ Invalid = 0;
4
+
5
+ OK = 1;
6
+ Fail = 2;
7
+ NoConnection = 3;
8
+ InvalidPassword = 5;
9
+ LoggedInElsewhere = 6;
10
+ InvalidProtocolVer = 7;
11
+ InvalidParam = 8;
12
+ FileNotFound = 9;
13
+ Busy = 10;
14
+ InvalidState = 11;
15
+ InvalidName = 12;
16
+ InvalidEmail = 13;
17
+ DuplicateName = 14;
18
+ AccessDenied = 15;
19
+ Timeout = 16;
20
+ Banned = 17;
21
+ AccountNotFound = 18;
22
+ InvalidSteamID = 19;
23
+ ServiceUnavailable = 20;
24
+ NotLoggedOn = 21;
25
+ Pending = 22;
26
+ EncryptionFailure = 23;
27
+ InsufficientPrivilege = 24;
28
+ LimitExceeded = 25;
29
+ Revoked = 26;
30
+ Expired = 27;
31
+ AlreadyRedeemed = 28;
32
+ DuplicateRequest = 29;
33
+ AlreadyOwned = 30;
34
+ IPNotFound = 31;
35
+ PersistFailed = 32;
36
+ LockingFailed = 33;
37
+ LogonSessionReplaced = 34;
38
+ ConnectFailed = 35;
39
+ HandshakeFailed = 36;
40
+ IOFailure = 37;
41
+ RemoteDisconnect = 38;
42
+ ShoppingCartNotFound = 39;
43
+ Blocked = 40;
44
+ Ignored = 41;
45
+ NoMatch = 42;
46
+ AccountDisabled = 43;
47
+ ServiceReadOnly = 44;
48
+ AccountNotFeatured = 45;
49
+ AdministratorOK = 46;
50
+ ContentVersion = 47;
51
+ TryAnotherCM = 48;
52
+ PasswordRequiredToKickSession = 49;
53
+ AlreadyLoggedInElsewhere = 50;
54
+ Suspended = 51;
55
+ Cancelled = 52;
56
+ DataCorruption = 53;
57
+ DiskFull = 54;
58
+ RemoteCallFailed = 55;
59
+ PasswordNotSet = 56; obsolete "renamed to PasswordUnset"
60
+ PasswordUnset = 56;
61
+ ExternalAccountUnlinked = 57;
62
+ PSNTicketInvalid = 58;
63
+ ExternalAccountAlreadyLinked = 59;
64
+ RemoteFileConflict = 60;
65
+ IllegalPassword = 61;
66
+ SameAsPreviousValue = 62;
67
+ AccountLogonDenied = 63;
68
+ CannotUseOldPassword = 64;
69
+ InvalidLoginAuthCode = 65;
70
+ AccountLogonDeniedNoMailSent = 66; obsolete "renamed to AccountLogonDeniedNoMail"
71
+ AccountLogonDeniedNoMail = 66;
72
+ HardwareNotCapableOfIPT = 67;
73
+ IPTInitError = 68;
74
+ ParentalControlRestricted = 69;
75
+ FacebookQueryError = 70;
76
+ ExpiredLoginAuthCode = 71;
77
+ IPLoginRestrictionFailed = 72;
78
+ AccountLocked = 73; obsolete "renamed to AccountLockedDown"
79
+ AccountLockedDown = 73;
80
+ AccountLogonDeniedVerifiedEmailRequired = 74;
81
+ NoMatchingURL = 75;
82
+ BadResponse = 76;
83
+ RequirePasswordReEntry = 77;
84
+ ValueOutOfRange = 78;
85
+ UnexpectedError = 79;
86
+ Disabled = 80;
87
+ InvalidCEGSubmission = 81;
88
+ RestrictedDevice = 82;
89
+ RegionLocked = 83;
90
+ RateLimitExceeded = 84;
91
+ AccountLogonDeniedNeedTwoFactorCode = 85; obsolete "renamed to AccountLoginDeniedNeedTwoFactor"
92
+ AccountLoginDeniedNeedTwoFactor = 85;
93
+ ItemOrEntryHasBeenDeleted = 86; obsolete "renamed to ItemDeleted"
94
+ ItemDeleted = 86;
95
+ AccountLoginDeniedThrottle = 87;
96
+ TwoFactorCodeMismatch = 88;
97
+ TwoFactorActivationCodeMismatch = 89;
98
+ AccountAssociatedToMultiplePlayers = 90; obsolete "renamed to AccountAssociatedToMultiplePartners"
99
+ AccountAssociatedToMultiplePartners = 90;
100
+ NotModified = 91;
101
+ NoMobileDeviceAvailable = 92; obsolete "renamed to NoMobileDevice"
102
+ NoMobileDevice = 92;
103
+ TimeIsOutOfSync = 93; obsolete "renamed to TimeNotSynced"
104
+ TimeNotSynced = 93;
105
+ SMSCodeFailed = 94;
106
+ TooManyAccountsAccessThisResource = 95; obsolete "renamed to AccountLimitExceeded"
107
+ AccountLimitExceeded = 95;
108
+ AccountActivityLimitExceeded = 96;
109
+ PhoneActivityLimitExceeded = 97;
110
+ RefundToWallet = 98;
111
+ EmailSendFailure = 99;
112
+ NotSettled = 100;
113
+ NeedCaptcha = 101;
114
+ GSLTDenied = 102;
115
+ GSOwnerDenied = 103;
116
+ InvalidItemType = 104;
117
+ IPBanned = 105;
118
+ GSLTExpired = 106;
119
+ };
@@ -0,0 +1,17 @@
1
+
2
+
3
+ class MsgGCHdrProtoBuf
4
+ {
5
+ protomaskgc uint msg = 0;
6
+ int headerLength;
7
+
8
+ proto<headerLength> SteamKit2.GC.Internal.CMsgProtoBufHeader proto;
9
+ };
10
+
11
+ class MsgGCHdr
12
+ {
13
+ ushort headerVersion = 1;
14
+
15
+ ulong targetJobID = ulong.MaxValue;
16
+ ulong sourceJobID = ulong.MaxValue;
17
+ };
@@ -0,0 +1,37 @@
1
+ #import "emsg.steamd"
2
+ #import "eresult.steamd"
3
+ #import "enums.steamd"
4
+ #import "netheader.steamd"
5
+
6
+ class MsgHdr
7
+ {
8
+ EMsg msg = EMsg::Invalid;
9
+
10
+ ulong targetJobID = ulong.MaxValue;
11
+ ulong sourceJobID = ulong.MaxValue;
12
+ };
13
+
14
+ class ExtendedClientMsgHdr
15
+ {
16
+ EMsg msg = EMsg::Invalid;
17
+
18
+ byte headerSize = 36;
19
+
20
+ ushort headerVersion = 2;
21
+
22
+ ulong targetJobID = ulong.MaxValue;
23
+ ulong sourceJobID = ulong.MaxValue;
24
+
25
+ byte headerCanary = 239;
26
+
27
+ steamidmarshal ulong steamID;
28
+ int sessionID;
29
+ };
30
+
31
+ class MsgHdrProtoBuf
32
+ {
33
+ protomask EMsg msg = EMsg::Invalid;
34
+ int headerLength;
35
+
36
+ proto<headerLength> SteamKit2.Internal.CMsgProtoBufHeader proto;
37
+ };
@@ -0,0 +1,62 @@
1
+ enum EUdpPacketType<byte>
2
+ {
3
+ Invalid = 0;
4
+
5
+ ChallengeReq = 1;
6
+ Challenge = 2;
7
+ Connect = 3;
8
+ Accept = 4;
9
+ Disconnect = 5;
10
+ Data = 6;
11
+ Datagram = 7;
12
+ Max = 8;
13
+ };
14
+
15
+ class UdpHeader
16
+ {
17
+ const uint MAGIC = 0x31305356;
18
+
19
+ uint magic = UdpHeader::MAGIC;
20
+
21
+ ushort payloadSize;
22
+ EUdpPacketType packetType = EUdpPacketType::Invalid;
23
+ byte flags;
24
+
25
+ uint sourceConnID = 512;
26
+ uint destConnID;
27
+
28
+ uint seqThis;
29
+ uint seqAck;
30
+
31
+ uint packetsInMsg;
32
+ uint msgStartSeq;
33
+
34
+ uint msgSize;
35
+ };
36
+
37
+ class ChallengeData
38
+ {
39
+ const uint CHALLENGE_MASK = 0xA426DF2B;
40
+
41
+ uint challengeValue;
42
+ uint serverLoad;
43
+ };
44
+
45
+ class ConnectData
46
+ {
47
+ const uint CHALLENGE_MASK = ChallengeData::CHALLENGE_MASK;
48
+
49
+ uint challengeValue;
50
+ };
51
+
52
+ class Accept
53
+ {
54
+ };
55
+
56
+ class Datagram
57
+ {
58
+ };
59
+
60
+ class Disconnect
61
+ {
62
+ };
@@ -0,0 +1,357 @@
1
+ #import "header.steamd"
2
+
3
+ #import "gamecoordinator.steamd"
4
+
5
+ class MsgClientJustStrings<EMsg::Invalid>
6
+ {
7
+ };
8
+
9
+ class MsgClientGenericResponse<EMsg::Invalid>
10
+ {
11
+ EResult result;
12
+ };
13
+
14
+ class MsgChannelEncryptRequest<EMsg::ChannelEncryptRequest>
15
+ {
16
+ const uint PROTOCOL_VERSION = 1;
17
+
18
+ uint protocolVersion = MsgChannelEncryptRequest::PROTOCOL_VERSION;
19
+ EUniverse universe = EUniverse::Invalid;
20
+ };
21
+
22
+ class MsgChannelEncryptResponse<EMsg::ChannelEncryptResponse>
23
+ {
24
+ uint protocolVersion = MsgChannelEncryptRequest::PROTOCOL_VERSION;
25
+ uint keySize = 128;
26
+ };
27
+
28
+ class MsgChannelEncryptResult<EMsg::ChannelEncryptResult>
29
+ {
30
+ EResult result = EResult::Invalid;
31
+ };
32
+
33
+ class MsgClientNewLoginKey<EMsg::ClientNewLoginKey>
34
+ {
35
+ uint uniqueID;
36
+ byte<20> loginKey;
37
+ };
38
+
39
+ class MsgClientNewLoginKeyAccepted<EMsg::ClientNewLoginKeyAccepted>
40
+ {
41
+ uint uniqueID;
42
+ };
43
+
44
+ class MsgClientLogon<EMsg::ClientLogon>
45
+ {
46
+ const uint ObfuscationMask = 0xBAADF00D;
47
+ const uint CurrentProtocol = 65579;
48
+
49
+ const uint ProtocolVerMajorMask = 0xFFFF0000;
50
+ const uint ProtocolVerMinorMask = 0xFFFF;
51
+
52
+ const ushort ProtocolVerMinorMinGameServers = 4;
53
+ const ushort ProtocolVerMinorMinForSupportingEMsgMulti = 12;
54
+ const ushort ProtocolVerMinorMinForSupportingEMsgClientEncryptPct = 14;
55
+ const ushort ProtocolVerMinorMinForExtendedMsgHdr = 17;
56
+ const ushort ProtocolVerMinorMinForCellId = 18;
57
+ const ushort ProtocolVerMinorMinForSessionIDLast = 19;
58
+ const ushort ProtocolVerMinorMinForServerAvailablityMsgs = 24;
59
+ const ushort ProtocolVerMinorMinClients = 25;
60
+ const ushort ProtocolVerMinorMinForOSType = 26;
61
+ const ushort ProtocolVerMinorMinForCegApplyPESig = 27;
62
+ const ushort ProtocolVerMinorMinForMarketingMessages2 = 27;
63
+ const ushort ProtocolVerMinorMinForAnyProtoBufMessages = 28;
64
+ const ushort ProtocolVerMinorMinForProtoBufLoggedOffMessage = 28;
65
+ const ushort ProtocolVerMinorMinForProtoBufMultiMessages = 28;
66
+ const ushort ProtocolVerMinorMinForSendingProtocolToUFS = 30;
67
+ const ushort ProtocolVerMinorMinForMachineAuth = 33;
68
+ const ushort ProtocolVerMinorMinForSessionIDLastAnon = 36;
69
+ const ushort ProtocolVerMinorMinForEnhancedAppList = 40;
70
+ const ushort ProtocolVerMinorMinForGzipMultiMessages = 43;
71
+ };
72
+
73
+ class MsgClientVACBanStatus<EMsg::ClientVACBanStatus>
74
+ {
75
+ uint numBans;
76
+ };
77
+
78
+ class MsgClientAppUsageEvent<EMsg::ClientAppUsageEvent>
79
+ {
80
+ EAppUsageEvent appUsageEvent;
81
+ gameidmarshal ulong gameID;
82
+ ushort offline;
83
+ };
84
+
85
+ class MsgClientEmailAddrInfo<EMsg::ClientEmailAddrInfo>
86
+ {
87
+ uint passwordStrength;
88
+ uint flagsAccountSecurityPolicy;
89
+ boolmarshal byte validated;
90
+ };
91
+
92
+ class MsgClientUpdateGuestPassesList<EMsg::ClientUpdateGuestPassesList>
93
+ {
94
+ EResult result;
95
+ int countGuestPassesToGive;
96
+ int countGuestPassesToRedeem;
97
+ };
98
+
99
+ class MsgClientRequestedClientStats<EMsg::ClientRequestedClientStats>
100
+ {
101
+ int countStats;
102
+ };
103
+
104
+
105
+ class MsgClientP2PIntroducerMessage<EMsg::ClientP2PIntroducerMessage>
106
+ {
107
+ steamidmarshal ulong steamID;
108
+ EIntroducerRouting routingType;
109
+ byte<1450> data;
110
+ uint dataLen;
111
+ };
112
+
113
+ class MsgClientOGSBeginSession<EMsg::ClientOGSBeginSession>
114
+ {
115
+ byte accountType;
116
+ steamidmarshal ulong accountId;
117
+ uint appId;
118
+ uint timeStarted;
119
+ };
120
+
121
+ class MsgClientOGSBeginSessionResponse<EMsg::ClientOGSBeginSessionResponse>
122
+ {
123
+ EResult result;
124
+ boolmarshal byte collectingAny;
125
+ boolmarshal byte collectingDetails;
126
+ ulong sessionId;
127
+ };
128
+
129
+ class MsgClientOGSEndSession<EMsg::ClientOGSEndSession>
130
+ {
131
+ ulong sessionId;
132
+ uint timeEnded;
133
+ int reasonCode;
134
+ int countAttributes;
135
+ };
136
+
137
+ class MsgClientOGSEndSessionResponse<EMsg::ClientOGSEndSessionResponse>
138
+ {
139
+ EResult result;
140
+ };
141
+
142
+
143
+ class MsgClientOGSWriteRow<EMsg::ClientOGSWriteRow>
144
+ {
145
+ ulong sessionId;
146
+ int countAttributes;
147
+ };
148
+
149
+ class MsgClientGetFriendsWhoPlayGame<EMsg::ClientGetFriendsWhoPlayGame>
150
+ {
151
+ gameidmarshal ulong gameId;
152
+ };
153
+
154
+ class MsgClientGetFriendsWhoPlayGameResponse<EMsg::ClientGetFriendsWhoPlayGameResponse>
155
+ {
156
+ EResult result;
157
+ gameidmarshal ulong gameId;
158
+ uint countFriends;
159
+ };
160
+
161
+ class MsgGSPerformHardwareSurvey<EMsg::GSPerformHardwareSurvey>
162
+ {
163
+ uint flags;
164
+ };
165
+
166
+ class MsgGSGetPlayStatsResponse<EMsg::GSGetPlayStatsResponse>
167
+ {
168
+ EResult result;
169
+ int rank;
170
+ uint lifetimeConnects;
171
+ uint lifetimeMinutesPlayed;
172
+ };
173
+
174
+ class MsgGSGetReputationResponse<EMsg::GSGetReputationResponse>
175
+ {
176
+ EResult result;
177
+ uint reputationScore;
178
+ boolmarshal byte banned;
179
+ uint bannedIp;
180
+ ushort bannedPort;
181
+ ulong bannedGameId;
182
+ uint timeBanExpires;
183
+ };
184
+
185
+ class MsgGSDeny<EMsg::GSDeny>
186
+ {
187
+ steamidmarshal ulong steamId;
188
+ EDenyReason denyReason;
189
+ };
190
+
191
+ class MsgGSApprove<EMsg::GSApprove>
192
+ {
193
+ steamidmarshal ulong steamId;
194
+ };
195
+
196
+ class MsgGSKick<EMsg::GSKick>
197
+ {
198
+ steamidmarshal ulong steamId;
199
+ EDenyReason denyReason;
200
+ int waitTilMapChange;
201
+ };
202
+
203
+ class MsgGSGetUserGroupStatus<EMsg::GSGetUserGroupStatus>
204
+ {
205
+ steamidmarshal ulong steamIdUser;
206
+ steamidmarshal ulong steamIdGroup;
207
+ };
208
+
209
+ class MsgGSGetUserGroupStatusResponse<EMsg::GSGetUserGroupStatusResponse>
210
+ {
211
+ steamidmarshal ulong steamIdUser;
212
+ steamidmarshal ulong steamIdGroup;
213
+ EClanRelationship clanRelationship;
214
+ EClanRank clanRank;
215
+ };
216
+
217
+ class MsgClientJoinChat<EMsg::ClientJoinChat>
218
+ {
219
+ steamidmarshal ulong steamIdChat;
220
+ boolmarshal byte isVoiceSpeaker;
221
+ };
222
+
223
+ class MsgClientChatEnter<EMsg::ClientChatEnter>
224
+ {
225
+ steamidmarshal ulong steamIdChat;
226
+ steamidmarshal ulong steamIdFriend;
227
+
228
+ EChatRoomType chatRoomType;
229
+
230
+ steamidmarshal ulong steamIdOwner;
231
+ steamidmarshal ulong steamIdClan;
232
+
233
+ byte chatFlags;
234
+
235
+ EChatRoomEnterResponse enterResponse;
236
+
237
+ int numMembers;
238
+ };
239
+
240
+ class MsgClientChatMsg<EMsg::ClientChatMsg>
241
+ {
242
+ steamidmarshal ulong steamIdChatter;
243
+ steamidmarshal ulong steamIdChatRoom;
244
+ EChatEntryType chatMsgType;
245
+ };
246
+
247
+ class MsgClientChatMemberInfo<EMsg::ClientChatMemberInfo>
248
+ {
249
+ steamidmarshal ulong steamIdChat;
250
+ EChatInfoType type;
251
+ };
252
+
253
+ class MsgClientChatAction<EMsg::ClientChatAction>
254
+ {
255
+ steamidmarshal ulong steamIdChat;
256
+ steamidmarshal ulong steamIdUserToActOn;
257
+ EChatAction chatAction;
258
+ };
259
+
260
+ class MsgClientChatActionResult<EMsg::ClientChatActionResult>
261
+ {
262
+ steamidmarshal ulong steamIdChat;
263
+ steamidmarshal ulong steamIdUserActedOn;
264
+ EChatAction chatAction;
265
+ EChatActionResult actionResult;
266
+ };
267
+
268
+ class MsgClientChatRoomInfo<EMsg::ClientChatRoomInfo>
269
+ {
270
+ steamidmarshal ulong steamIdChat;
271
+ EChatInfoType type;
272
+ };
273
+
274
+ class MsgClientSetIgnoreFriend<EMsg::ClientSetIgnoreFriend>
275
+ {
276
+ steamidmarshal ulong mySteamId;
277
+ steamidmarshal ulong steamIdFriend;
278
+
279
+ byte ignore;
280
+ };
281
+
282
+ class MsgClientSetIgnoreFriendResponse<EMsg::ClientSetIgnoreFriendResponse>
283
+ {
284
+ ulong unknown;
285
+
286
+ EResult result;
287
+ };
288
+
289
+ class MsgClientLoggedOff<EMsg::ClientLoggedOff>
290
+ {
291
+ EResult result;
292
+ int secMinReconnectHint;
293
+ int secMaxReconnectHint;
294
+ };
295
+
296
+ class MsgClientLogOnResponse<EMsg::ClientLogOnResponse>
297
+ {
298
+ EResult result;
299
+ int outOfGameHeartbeatRateSec;
300
+ int inGameHeartbeatRateSec;
301
+ steamidmarshal ulong clientSuppliedSteamId;
302
+ uint ipPublic;
303
+ uint serverRealTime;
304
+ };
305
+
306
+ class MsgClientSendGuestPass<EMsg::ClientSendGuestPass>
307
+ {
308
+ ulong giftId;
309
+ byte giftType;
310
+ uint accountId;
311
+ };
312
+
313
+ class MsgClientSendGuestPassResponse<EMsg::ClientSendGuestPassResponse>
314
+ {
315
+ EResult result;
316
+ };
317
+
318
+ class MsgClientServerUnavailable<EMsg::ClientServerUnavailable>
319
+ {
320
+ ulong jobidSent;
321
+ uint eMsgSent;
322
+ EServerType eServerTypeUnavailable;
323
+ };
324
+
325
+ class MsgClientCreateChat<EMsg::ClientCreateChat>
326
+ {
327
+ EChatRoomType chatRoomType;
328
+
329
+ gameidmarshal ulong gameId;
330
+
331
+ steamidmarshal ulong steamIdClan;
332
+
333
+ EChatPermission permissionOfficer;
334
+ EChatPermission permissionMember;
335
+ EChatPermission permissionAll;
336
+
337
+ uint membersMax;
338
+
339
+ byte chatFlags;
340
+
341
+ steamidmarshal ulong steamIdFriendChat;
342
+ steamidmarshal ulong steamIdInvited;
343
+ };
344
+
345
+ class MsgClientCreateChatResponse<EMsg::ClientCreateChatResponse>
346
+ {
347
+ EResult result;
348
+ steamidmarshal ulong steamIdChat;
349
+ EChatRoomType chatRoomType;
350
+ steamidmarshal ulong steamIdFriendChat;
351
+ };
352
+
353
+ class MsgClientMarketingMessageUpdate2<EMsg::ClientMarketingMessageUpdate2>
354
+ {
355
+ uint marketingMessageUpdateTime;
356
+ uint count;
357
+ };