1 #include "Lobby2Message.h"
2 #include "RakPeerInterface.h"
3 #include "RakNetworkFactory.h"
4 #include "MessageIdentifiers.h"
5 #include "Lobby2Client.h"
6 #include "Kbhit.h"
7 #include "RakSleep.h"
8 #include "RoomsErrorCodes.h"
9 #include "DS_Queue.h"
10 #include <ctype.h>
11 #include <stdlib.h>
12 #include "LinuxStrings.h"
13
14 static const int NUM_CONNECTIONS=2;
15 RakNet::Lobby2Client lobby2Client[NUM_CONNECTIONS];
16 RakNet::Lobby2MessageFactory messageFactory;
17 RakNet::RakString testUserName[NUM_CONNECTIONS];
18 RakPeerInterface *rakPeer[NUM_CONNECTIONS];
19 struct AutoExecutionPlanNode
20 {
AutoExecutionPlanNodeAutoExecutionPlanNode21 AutoExecutionPlanNode() {}
AutoExecutionPlanNodeAutoExecutionPlanNode22 AutoExecutionPlanNode(int i, RakNet::Lobby2MessageID o) {instanceNumber=i; operation=o;}
23 int instanceNumber;
24 RakNet::Lobby2MessageID operation;
25 };
26 DataStructures::Queue<AutoExecutionPlanNode> executionPlan;
27
PrintCommands(RakNet::Lobby2MessageFactory * messageFactory)28 void PrintCommands(RakNet::Lobby2MessageFactory *messageFactory)
29 {
30 unsigned int i;
31 for (i=0; i < RakNet::L2MID_COUNT; i++)
32 {
33 RakNet::Lobby2Message *m = messageFactory->Alloc((RakNet::Lobby2MessageID)i);
34 if (m)
35 {
36 printf("%i. %s", i+1, m->GetName());
37 if (m->RequiresAdmin())
38 printf(" (Admin command)");
39 if (m->RequiresRankingPermission())
40 printf(" (Ranking server command)");
41 printf("\n");
42 messageFactory->Dealloc(m);
43 }
44
45 }
46 }
47
48 void ExecuteCommand(RakNet::Lobby2MessageID command, RakNet::RakString userName, int instanceNumber);
49 struct Lobby2ClientSampleCB : public RakNet::Lobby2Printf
50 {
ExecuteDefaultResultLobby2ClientSampleCB51 virtual void ExecuteDefaultResult(RakNet::Lobby2Message *message) {
52 message->DebugPrintf();
53 if (message->resultCode==RakNet::REC_SUCCESS && executionPlan.Size())
54 {
55 AutoExecutionPlanNode aepn = executionPlan.Pop();
56 ExecuteCommand(aepn.operation, RakNet::RakString("user%i", aepn.instanceNumber), aepn.instanceNumber);
57 }
58 }
59 } callback[NUM_CONNECTIONS];
60
main()61 int main()
62 {
63 printf("This sample creates two Lobby2Clients.\n");
64 printf("They both connect to the server and performs queued operations on startup.");
65 printf("(RANKING AND CLANS NOT YET DONE).\n");
66 printf("Difficulty: Advanced\n\n");
67
68 RakNet::Lobby2ResultCodeDescription::Validate();
69
70 /// Do all these operations in this order once we are logged in.
71 /// This is for easier testing.
72 /// This plan will create the database, register two users, and log them both in
73 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_System_CreateDatabase), __FILE__, __LINE__ );
74 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_System_CreateTitle), __FILE__, __LINE__ );
75
76 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_CDKey_Add), __FILE__, __LINE__ );
77 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_System_RegisterProfanity), __FILE__, __LINE__ );
78 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_RegisterAccount), __FILE__, __LINE__ );
79 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Client_RegisterAccount), __FILE__, __LINE__ );
80 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_System_SetEmailAddressValidated), __FILE__, __LINE__ );
81 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_System_SetEmailAddressValidated), __FILE__, __LINE__ );
82 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_Login), __FILE__, __LINE__ );
83 // executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Client_Login), __FILE__, __LINE__ );
84 // /// Create 2 clans
85 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_Create), __FILE__, __LINE__ );
86 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_Create), __FILE__, __LINE__ );
87 // // Invite to both
88 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SendJoinInvitation), __FILE__, __LINE__ );
89 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SendJoinInvitation), __FILE__, __LINE__ );
90 // executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_RejectJoinInvitation), __FILE__, __LINE__ );
91 // // Download invitations this clan has sent
92 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_DownloadInvitationList), __FILE__, __LINE__ );
93
94 /*
95
96 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Client_SetPresence), __FILE__, __LINE__ );
97 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Client_GetAccountDetails), __FILE__, __LINE__ );
98 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_PerTitleIntegerStorage), __FILE__, __LINE__ );
99 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_PerTitleIntegerStorage), __FILE__, __LINE__ );
100
101 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_StartIgnore), __FILE__, __LINE__ );
102 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Client_GetIgnoreList), __FILE__, __LINE__ );
103
104 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Friends_SendInvite), __FILE__, __LINE__);
105 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Friends_AcceptInvite), __FILE__, __LINE__);
106
107 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Ranking_SubmitMatch));
108 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Ranking_SubmitMatch));
109 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Ranking_UpdateRating));
110 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Ranking_GetRating));
111 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Ranking_WipeRatings));
112 */
113 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_Create), __FILE__, __LINE__ );
114 // executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_Get), __FILE__, __LINE__ );
115 /*
116 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SetProperties));
117 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SetMyMemberProperties));
118 */
119 /*
120 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SendJoinInvitation));
121 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_WithdrawJoinInvitation));
122 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_DownloadInvitationList));
123 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SendJoinInvitation));
124 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_RejectJoinInvitation));
125 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SendJoinInvitation));
126 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_AcceptJoinInvitation));
127 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SetSubleaderStatus));
128 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_SetMemberRank));
129 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_GrantLeader));
130 */
131
132 /*
133 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_SendJoinRequest));
134 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_WithdrawJoinRequest));
135 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_AcceptJoinRequest));
136 */
137
138 // executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_SendJoinRequest));
139 // executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_DownloadRequestList));
140 // TODO - test from here
141 /*
142 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_RejectJoinRequest));
143 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_AcceptJoinRequest));
144 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_SendJoinRequest));
145 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_AcceptJoinRequest));
146 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_KickAndBlacklistUser));
147 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_SendJoinRequest));
148 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_GetBlacklist));
149 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_UnblacklistUser));
150 executionPlan.Push(AutoExecutionPlanNode(1, RakNet::L2MID_Clans_SendJoinRequest));
151 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_AcceptJoinRequest));
152 executionPlan.Push(AutoExecutionPlanNode(0, RakNet::L2MID_Clans_GetMembers));
153 */
154
155 /*
156 // TODO
157 L2MID_Clans_CreateBoard,
158 L2MID_Clans_DestroyBoard,
159 L2MID_Clans_CreateNewTopic,
160 L2MID_Clans_ReplyToTopic,
161 L2MID_Clans_RemovePost,
162 L2MID_Clans_GetBoards,
163 L2MID_Clans_GetTopics,
164 L2MID_Clans_GetPosts,
165 */
166
167
168 char ip[30], serverPort[30], clientPort[30];
169 int i;
170 for (i=0; i < NUM_CONNECTIONS; i++)
171 rakPeer[i]=RakNetworkFactory::GetRakPeerInterface();
172 // puts("Enter the rakPeer1 port to listen on");
173 clientPort[0]=0;
174 SocketDescriptor socketDescriptor(atoi(clientPort),0);
175 //gets(clientPort);
176 if (clientPort[0]==0)
177 strcpy(clientPort, "0");
178
179 // puts("Enter IP to connect to");;
180 ip[0]=0;
181 //gets(ip)
182 if (ip[0]==0)
183 strcpy(ip, "127.0.0.1");
184
185 // puts("Enter the port to connect to");
186 serverPort[0]=0;
187 //gets(serverPort);
188 if (serverPort[0]==0)
189 strcpy(serverPort, "61111");
190
191 for (i=0; i < NUM_CONNECTIONS; i++)
192 {
193 rakPeer[i]->Startup(1,30,&socketDescriptor, 1);
194 rakPeer[i]->Connect(ip, atoi(serverPort), 0,0);
195
196 rakPeer[i]->AttachPlugin(&lobby2Client[i]);
197 lobby2Client[i].SetMessageFactory(&messageFactory);
198 lobby2Client[i].SetCallbackInterface(&callback[i]);
199 testUserName[i]=RakNet::RakString("user%i", i);
200 }
201
202 Packet *packet;
203 // Loop for input
204 while (1)
205 {
206 for (i=0; i < NUM_CONNECTIONS; i++)
207 {
208 RakPeerInterface *peer = rakPeer[i];
209 for (packet=peer->Receive(); packet; peer->DeallocatePacket(packet), packet=peer->Receive())
210 {
211 switch (packet->data[0])
212 {
213 case ID_DISCONNECTION_NOTIFICATION:
214 // Connection lost normally
215 printf("ID_DISCONNECTION_NOTIFICATION\n");
216 break;
217 case ID_ALREADY_CONNECTED:
218 // Connection lost normally
219 printf("ID_ALREADY_CONNECTED\n");
220 break;
221 case ID_CONNECTION_BANNED: // Banned from this server
222 printf("We are banned from this server.\n");
223 break;
224 case ID_CONNECTION_ATTEMPT_FAILED:
225 printf("Connection attempt failed\n");
226 break;
227 case ID_NO_FREE_INCOMING_CONNECTIONS:
228 // Sorry, the server is full. I don't do anything here but
229 // A real app should tell the user
230 printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
231 break;
232 case ID_MODIFIED_PACKET:
233 // Cheater!
234 printf("ID_MODIFIED_PACKET\n");
235 break;
236 case ID_INVALID_PASSWORD:
237 printf("ID_INVALID_PASSWORD\n");
238 break;
239 case ID_CONNECTION_LOST:
240 // Couldn't deliver a reliable packet - i.e. the other system was abnormally
241 // terminated
242 printf("ID_CONNECTION_LOST\n");
243 break;
244 case ID_CONNECTION_REQUEST_ACCEPTED:
245 // This tells the rakPeer1 they have connected
246 printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
247 int j;
248 for (j=0; j < NUM_CONNECTIONS; j++)
249 lobby2Client[j].SetServerAddress(packet->systemAddress);
250 if (i==NUM_CONNECTIONS-1)
251 {
252 PrintCommands(&messageFactory);
253 printf("Enter instance number 1 to %i followed by command number.\n", NUM_CONNECTIONS);
254
255 if (executionPlan.Size())
256 {
257 /// Execute the first command now that both clients have connected.
258 AutoExecutionPlanNode aepn = executionPlan.Pop();
259 ExecuteCommand(aepn.operation, RakNet::RakString("user%i", aepn.instanceNumber), aepn.instanceNumber);
260 }
261 }
262 break;
263 case ID_LOBBY2_SERVER_ERROR:
264 {
265 RakNet::BitStream bs(packet->data,packet->length,false);
266 bs.IgnoreBytes(2); // ID_LOBBY2_SERVER_ERROR and error code
267 printf("ID_LOBBY2_SERVER_ERROR: ");
268 if (packet->data[1]==RakNet::L2SE_UNKNOWN_MESSAGE_ID)
269 {
270 unsigned int messageId;
271 bs.Read(messageId);
272 printf("L2SE_UNKNOWN_MESSAGE_ID %i", messageId);
273 }
274 else
275 printf("Unknown");
276 printf("\n");
277 }
278
279 break;
280 }
281 }
282 }
283
284
285 // This sleep keeps RakNet responsive
286 RakSleep(30);
287
288 if (kbhit())
289 {
290 char ch = getch();
291 if (ch <= '0' || ch > '9')
292 {
293 printf("Bad instance number\n");
294 continue;
295 }
296 int instanceNumber = ch - 1 - '0';
297 if (instanceNumber >= NUM_CONNECTIONS)
298 {
299 printf("Enter between 1 and %i to pick the instance of RakPeer to run\n", 1+NUM_CONNECTIONS);
300 continue;
301 }
302
303 printf("Enter message number or 'quit' to quit.\n");
304 char str[128];
305 gets(str);
306 if (_stricmp(str, "quit")==0)
307 {
308 printf("Quitting.\n");
309 break;
310 }
311 else
312 {
313 int command = atoi(str);
314 if (command <=0 || command > RakNet::L2MID_COUNT)
315 {
316 printf("Invalid message index %i. Commands:\n", command);
317 PrintCommands(&messageFactory);
318 }
319 else
320 {
321 ExecuteCommand((RakNet::Lobby2MessageID)(command-1), RakNet::RakString("user%i", instanceNumber), instanceNumber);
322 }
323 }
324 }
325 }
326
327 for (i=0; i < NUM_CONNECTIONS; i++)
328 RakNetworkFactory::DestroyRakPeerInterface(rakPeer[i]);
329 return 0;
330 }
331 /// In a real application these parameters would be filled out from application data
332 /// Here I've just hardcoded everything for fast testing
ExecuteCommand(RakNet::Lobby2MessageID command,RakNet::RakString userName,int instanceNumber)333 void ExecuteCommand(RakNet::Lobby2MessageID command, RakNet::RakString userName, int instanceNumber)
334 {
335 RakNet::Lobby2Message *m = messageFactory.Alloc(command);
336 RakAssert(m);
337 printf("Executing %s (message %i)\n", m->GetName(), command+1);
338 // If additional requires are needed to test the command, stick them here
339 switch (m->GetID())
340 {
341 case RakNet::L2MID_System_CreateTitle:
342 {
343 RakNet::System_CreateTitle *arg = (RakNet::System_CreateTitle *) m;
344 arg->requiredAge=22;
345 arg->titleName="Test Title Name";
346 arg->titleSecretKey="Test secret key";
347 }
348 break;
349 case RakNet::L2MID_System_DestroyTitle:
350 {
351 RakNet::System_DestroyTitle *arg = (RakNet::System_DestroyTitle *) m;
352 arg->titleName="Test Title Name";
353 }
354 break;
355 case RakNet::L2MID_System_GetTitleRequiredAge:
356 {
357 RakNet::System_GetTitleRequiredAge *arg = (RakNet::System_GetTitleRequiredAge *) m;
358 arg->titleName="Test Title Name";
359 }
360 break;
361 case RakNet::L2MID_System_GetTitleBinaryData:
362 {
363 RakNet::System_GetTitleBinaryData *arg = (RakNet::System_GetTitleBinaryData *) m;
364 arg->titleName="Test Title Name";
365 }
366 break;
367 case RakNet::L2MID_System_RegisterProfanity:
368 {
369 RakNet::System_RegisterProfanity *arg = (RakNet::System_RegisterProfanity *) m;
370 arg->profanityWords.Insert("Bodily Functions", __FILE__, __LINE__ );
371 arg->profanityWords.Insert("Racial Epithet", __FILE__, __LINE__ );
372 arg->profanityWords.Insert("Euphemism treadmill", __FILE__, __LINE__ );
373 }
374 break;
375 case RakNet::L2MID_System_BanUser:
376 {
377 RakNet::System_BanUser *arg = (RakNet::System_BanUser *) m;
378 arg->durationHours=12;
379 arg->banReason="Ban Reason";
380 arg->userName=userName;
381 }
382 break;
383 case RakNet::L2MID_System_UnbanUser:
384 {
385 RakNet::System_UnbanUser *arg = (RakNet::System_UnbanUser *) m;
386 arg->reason="Unban Reason";
387 arg->userName=userName;
388 }
389 break;
390 case RakNet::L2MID_CDKey_Add:
391 {
392 RakNet::CDKey_Add *arg = (RakNet::CDKey_Add *) m;
393 arg->cdKeys.Insert("Test CD Key", __FILE__, __LINE__ );
394 arg->cdKeys.Insert("Test CD Key 2", __FILE__, __LINE__ );
395 arg->titleName="Test Title Name";
396 }
397 break;
398 case RakNet::L2MID_CDKey_GetStatus:
399 {
400 RakNet::CDKey_GetStatus *arg = (RakNet::CDKey_GetStatus *) m;
401 arg->cdKey="Test CD Key";
402 arg->titleName="Test Title Name";
403 }
404 break;
405 case RakNet::L2MID_CDKey_Use:
406 {
407 RakNet::CDKey_Use *arg = (RakNet::CDKey_Use *) m;
408 arg->cdKey="Test CD Key";
409 arg->titleName="Test Title Name";
410 arg->userName=userName;
411 }
412 break;
413 case RakNet::L2MID_CDKey_FlagStolen:
414 {
415 RakNet::CDKey_FlagStolen *arg = (RakNet::CDKey_FlagStolen *) m;
416 arg->cdKey="Test CD Key";
417 arg->titleName="Test Title Name";
418 arg->wasStolen=true;
419 }
420 break;
421 case RakNet::L2MID_Client_Login:
422 {
423 RakNet::Client_Login *arg = (RakNet::Client_Login *) m;
424 arg->titleName="Test Title Name";
425 arg->titleSecretKey="Test secret key";
426 arg->userPassword="asdf";
427 arg->userName=userName;
428 }
429 break;
430 case RakNet::L2MID_Client_SetPresence:
431 {
432 RakNet::Client_SetPresence *arg = (RakNet::Client_SetPresence *) m;
433 arg->presence.isVisible=true;
434 arg->presence.status=RakNet::Lobby2Presence::IN_LOBBY;
435 arg->presence.titleName="Test Title Name";
436 }
437 break;
438 case RakNet::L2MID_Client_RegisterAccount:
439 {
440 RakNet::Client_RegisterAccount *arg = (RakNet::Client_RegisterAccount *) m;
441 arg->createAccountParameters.ageInDays=9999;
442 arg->createAccountParameters.firstName="Firstname";
443 arg->createAccountParameters.lastName="Lastname";
444 arg->createAccountParameters.password="asdf";
445 arg->createAccountParameters.passwordRecoveryQuestion="1+2=?";
446 arg->createAccountParameters.passwordRecoveryAnswer="3";
447 arg->createAccountParameters.emailAddress="username@provider.com";
448 arg->createAccountParameters.homeCountry="United States";
449 arg->createAccountParameters.homeState="california";
450 arg->createAccountParameters.sex_male=true;
451 arg->userName=userName;
452 arg->cdKey="Test CD Key";
453 arg->titleName="Test Title Name";
454 }
455 break;
456 case RakNet::L2MID_System_SetEmailAddressValidated:
457 {
458 RakNet::System_SetEmailAddressValidated *arg = (RakNet::System_SetEmailAddressValidated *) m;
459 arg->validated=true;
460 arg->userName=userName;
461 }
462 break;
463 case RakNet::L2MID_Client_ValidateHandle:
464 {
465 RakNet::Client_ValidateHandle *arg = (RakNet::Client_ValidateHandle *) m;
466 arg->userName=userName;
467 }
468 break;
469
470 case RakNet::L2MID_System_DeleteAccount:
471 {
472 RakNet::System_DeleteAccount *arg = (RakNet::System_DeleteAccount *) m;
473 arg->userName=userName;
474 arg->password="asdf";
475 }
476 break;
477
478 case RakNet::L2MID_System_PruneAccounts:
479 {
480 RakNet::System_PruneAccounts *arg = (RakNet::System_PruneAccounts *) m;
481 arg->deleteAccountsNotLoggedInDays=1;
482 }
483 break;
484
485 case RakNet::L2MID_Client_GetEmailAddress:
486 {
487 RakNet::Client_GetEmailAddress *arg = (RakNet::Client_GetEmailAddress *) m;
488 arg->userName=userName;
489 }
490 break;
491
492 case RakNet::L2MID_Client_GetPasswordRecoveryQuestionByHandle:
493 {
494 RakNet::Client_GetPasswordRecoveryQuestionByHandle *arg = (RakNet::Client_GetPasswordRecoveryQuestionByHandle *) m;
495 arg->userName=userName;
496 }
497 break;
498
499 case RakNet::L2MID_Client_GetPasswordByPasswordRecoveryAnswer:
500 {
501 RakNet::Client_GetPasswordByPasswordRecoveryAnswer *arg = (RakNet::Client_GetPasswordByPasswordRecoveryAnswer *) m;
502 arg->userName=userName;
503 arg->passwordRecoveryAnswer="3";
504 }
505 break;
506
507 case RakNet::L2MID_Client_ChangeHandle:
508 {
509 RakNet::Client_ChangeHandle *arg = (RakNet::Client_ChangeHandle *) m;
510 arg->userName=userName;
511 arg->newHandle="New user handle";
512 }
513 break;
514
515 case RakNet::L2MID_Client_UpdateAccount:
516 {
517 RakNet::Client_UpdateAccount *arg = (RakNet::Client_UpdateAccount *) m;
518 }
519 break;
520
521 case RakNet::L2MID_Client_GetAccountDetails:
522 {
523 RakNet::Client_GetAccountDetails *arg = (RakNet::Client_GetAccountDetails *) m;
524 }
525 break;
526
527 case RakNet::L2MID_Client_StartIgnore:
528 {
529 RakNet::Client_StartIgnore *arg = (RakNet::Client_StartIgnore *) m;
530 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
531 }
532 break;
533
534 case RakNet::L2MID_Client_StopIgnore:
535 {
536 RakNet::Client_StopIgnore *arg = (RakNet::Client_StopIgnore *) m;
537 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
538 }
539 break;
540
541 case RakNet::L2MID_Client_GetIgnoreList:
542 {
543 RakNet::Client_GetIgnoreList *arg = (RakNet::Client_GetIgnoreList *) m;
544 }
545 break;
546
547 case RakNet::L2MID_Client_PerTitleIntegerStorage:
548 {
549 RakNet::Client_PerTitleIntegerStorage *arg = (RakNet::Client_PerTitleIntegerStorage *) m;
550 arg->titleName="Test Title Name";
551 arg->slotIndex=0;
552 arg->conditionValue=1.0;
553 arg->addConditionForOperation=RakNet::Client_PerTitleIntegerStorage::PTISC_GREATER_THAN;
554 arg->inputValue=0.0;
555 static int runCount=0;
556 if (runCount++%2==0)
557 arg->operationToPerform=RakNet::Client_PerTitleIntegerStorage::PTISO_WRITE;
558 else
559 arg->operationToPerform=RakNet::Client_PerTitleIntegerStorage::PTISO_READ;
560 }
561 break;
562
563 case RakNet::L2MID_Friends_SendInvite:
564 {
565 RakNet::Friends_SendInvite *arg = (RakNet::Friends_SendInvite *) m;
566 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
567 arg->subject="Friends_SendInvite subject";
568 arg->body="Friends_SendInvite body";
569 }
570 break;
571
572 case RakNet::L2MID_Friends_AcceptInvite:
573 {
574 RakNet::Friends_AcceptInvite *arg = (RakNet::Friends_AcceptInvite *) m;
575 arg->targetHandle=RakNet::RakString("user%i", 0);
576 arg->subject="Friends_AcceptInvite subject";
577 arg->body="Friends_AcceptInvite body";
578 arg->emailStatus=0;
579 }
580 break;
581
582 case RakNet::L2MID_Friends_RejectInvite:
583 {
584 RakNet::Friends_RejectInvite *arg = (RakNet::Friends_RejectInvite *) m;
585 arg->targetHandle=RakNet::RakString("user%i", 0);
586 arg->subject="L2MID_Friends_RejectInvite subject";
587 arg->body="L2MID_Friends_RejectInvite body";
588 arg->emailStatus=0;
589 }
590 break;
591
592 case RakNet::L2MID_Friends_GetInvites:
593 {
594 RakNet::Friends_GetInvites *arg = (RakNet::Friends_GetInvites *) m;
595 }
596 break;
597
598 case RakNet::L2MID_Friends_GetFriends:
599 {
600 RakNet::Friends_GetFriends *arg = (RakNet::Friends_GetFriends *) m;
601 }
602 break;
603
604 case RakNet::L2MID_Friends_Remove:
605 {
606 RakNet::Friends_Remove *arg = (RakNet::Friends_Remove *) m;
607 arg->targetHandle=RakNet::RakString("user%i", 0);
608 arg->subject="L2MID_Friends_Remove subject";
609 arg->body="L2MID_Friends_Remove body";
610 arg->emailStatus=0;
611 }
612 break;
613
614 case RakNet::L2MID_BookmarkedUsers_Add:
615 {
616 RakNet::BookmarkedUsers_Add *arg = (RakNet::BookmarkedUsers_Add *) m;
617 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
618 arg->type=0;
619 arg->description="L2MID_BookmarkedUsers_Add description";
620 }
621 break;
622 case RakNet::L2MID_BookmarkedUsers_Remove:
623 {
624 RakNet::BookmarkedUsers_Remove *arg = (RakNet::BookmarkedUsers_Remove *) m;
625 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
626 arg->type=0;
627 }
628 break;
629 case RakNet::L2MID_BookmarkedUsers_Get:
630 {
631 RakNet::BookmarkedUsers_Get *arg = (RakNet::BookmarkedUsers_Get *) m;
632 }
633 break;
634
635 case RakNet::L2MID_Emails_Send:
636 {
637 RakNet::Emails_Send *arg = (RakNet::Emails_Send *) m;
638 arg->recipients.Insert(RakNet::RakString("user%i", instanceNumber+1), __FILE__, __LINE__ );
639 arg->recipients.Insert(RakNet::RakString("user%i", instanceNumber+2), __FILE__, __LINE__ );
640 arg->subject="L2MID_Emails_Send subject";
641 arg->body="L2MID_Emails_Send body";
642 arg->status=0;
643 }
644 break;
645
646 case RakNet::L2MID_Emails_Get:
647 {
648 RakNet::Emails_Get *arg = (RakNet::Emails_Get *) m;
649 }
650 break;
651
652 case RakNet::L2MID_Emails_Delete:
653 {
654 RakNet::Emails_Delete *arg = (RakNet::Emails_Delete *) m;
655 arg->emailId=1;
656 }
657 break;
658
659 case RakNet::L2MID_Emails_SetStatus:
660 {
661 RakNet::Emails_SetStatus *arg = (RakNet::Emails_SetStatus *) m;
662 arg->emailId=2;
663 arg->updateStatusFlag=true;
664 arg->updateMarkedRead=true;
665 arg->newStatusFlag=1234;
666 arg->isNowMarkedRead=true;
667 }
668 break;
669
670 case RakNet::L2MID_Ranking_SubmitMatch:
671 {
672 RakNet::Ranking_SubmitMatch *arg = (RakNet::Ranking_SubmitMatch *) m;
673 arg->gameType="Match game type";
674 arg->titleName="Test Title Name";
675 arg->submittedMatch.matchNote="Ranking match note";
676 arg->submittedMatch.matchParticipants.Insert(RakNet::MatchParticipant("user0", 5.0f), __FILE__, __LINE__ );
677 arg->submittedMatch.matchParticipants.Insert(RakNet::MatchParticipant("user1", 10.0f), __FILE__, __LINE__ );
678 }
679 break;
680
681 case RakNet::L2MID_Ranking_GetMatches:
682 {
683 RakNet::Ranking_GetMatches *arg = (RakNet::Ranking_GetMatches *) m;
684 arg->gameType="Match game type";
685 arg->titleName="Test Title Name";
686 }
687 break;
688
689 case RakNet::L2MID_Ranking_GetMatchBinaryData:
690 {
691 RakNet::Ranking_GetMatchBinaryData *arg = (RakNet::Ranking_GetMatchBinaryData *) m;
692 arg->matchID=1;
693 }
694 break;
695
696 case RakNet::L2MID_Ranking_GetTotalScore:
697 {
698 RakNet::Ranking_GetTotalScore *arg = (RakNet::Ranking_GetTotalScore *) m;
699 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
700 arg->gameType="Match game type";
701 arg->titleName="Test Title Name";
702 }
703 break;
704
705 case RakNet::L2MID_Ranking_WipeScoresForPlayer:
706 {
707 RakNet::Ranking_WipeScoresForPlayer *arg = (RakNet::Ranking_WipeScoresForPlayer *) m;
708 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
709 arg->gameType="Match game type";
710 arg->titleName="Test Title Name";
711 }
712 break;
713
714 case RakNet::L2MID_Ranking_WipeMatches:
715 {
716 RakNet::Ranking_WipeMatches *arg = (RakNet::Ranking_WipeMatches *) m;
717 arg->gameType="Match game type";
718 arg->titleName="Test Title Name";
719 }
720 break;
721
722 case RakNet::L2MID_Ranking_PruneMatches:
723 {
724 RakNet::Ranking_PruneMatches *arg = (RakNet::Ranking_PruneMatches *) m;
725 arg->pruneTimeDays=1;
726 }
727 break;
728
729 case RakNet::L2MID_Ranking_UpdateRating:
730 {
731 RakNet::Ranking_UpdateRating *arg = (RakNet::Ranking_UpdateRating *) m;
732 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
733 arg->gameType="Match game type";
734 arg->titleName="Test Title Name";
735 arg->targetRating=1234.0f;
736 }
737 break;
738
739 case RakNet::L2MID_Ranking_WipeRatings:
740 {
741 RakNet::Ranking_WipeRatings *arg = (RakNet::Ranking_WipeRatings *) m;
742 arg->gameType="Match game type";
743 arg->titleName="Test Title Name";
744 }
745 break;
746
747 case RakNet::L2MID_Ranking_GetRating:
748 {
749 RakNet::Ranking_GetRating *arg = (RakNet::Ranking_GetRating *) m;
750 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
751 arg->gameType="Match game type";
752 arg->titleName="Test Title Name";
753 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
754 }
755 break;
756
757 case RakNet::L2MID_Clans_Create:
758 {
759 RakNet::Clans_Create *arg = (RakNet::Clans_Create *) m;
760 static int idx=0;
761 arg->clanHandle=RakNet::RakString("Clan handle %i", idx++);
762 arg->failIfAlreadyInClan=false;
763 arg->requiresInvitationsToJoin=true;
764 arg->description="Clan Description";
765 arg->binaryData->binaryData=new char[10];
766 strcpy(arg->binaryData->binaryData,"Hello");
767 arg->binaryData->binaryDataLength=10;
768 }
769 break;
770
771 case RakNet::L2MID_Clans_SetProperties:
772 {
773 RakNet::Clans_SetProperties *arg = (RakNet::Clans_SetProperties *) m;
774 arg->clanHandle="Clan handle";
775 arg->description="Updated description";
776 }
777 break;
778
779 case RakNet::L2MID_Clans_GetProperties:
780 {
781 RakNet::Clans_GetProperties *arg = (RakNet::Clans_GetProperties *) m;
782 arg->clanHandle="Clan handle";
783 }
784 break;
785
786 case RakNet::L2MID_Clans_SetMyMemberProperties:
787 {
788 RakNet::Clans_SetMyMemberProperties *arg = (RakNet::Clans_SetMyMemberProperties *) m;
789 arg->clanHandle="Clan handle";
790 arg->description="Updated description";
791 }
792 break;
793
794 case RakNet::L2MID_Clans_GrantLeader:
795 {
796 RakNet::Clans_GrantLeader *arg = (RakNet::Clans_GrantLeader *) m;
797 arg->clanHandle="Clan handle";
798 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
799 }
800 break;
801
802 case RakNet::L2MID_Clans_SetSubleaderStatus:
803 {
804 RakNet::Clans_SetSubleaderStatus *arg = (RakNet::Clans_SetSubleaderStatus *) m;
805 arg->clanHandle="Clan handle";
806 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
807 arg->setToSubleader=true;
808 }
809 break;
810
811 case RakNet::L2MID_Clans_SetMemberRank:
812 {
813 RakNet::Clans_SetMemberRank *arg = (RakNet::Clans_SetMemberRank *) m;
814 arg->clanHandle="Clan handle";
815 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
816 arg->newRank=666;
817 }
818 break;
819
820 case RakNet::L2MID_Clans_GetMemberProperties:
821 {
822 RakNet::Clans_GetMemberProperties *arg = (RakNet::Clans_GetMemberProperties *) m;
823 arg->clanHandle="Clan handle";
824 arg->targetHandle=RakNet::RakString("user%i", instanceNumber);
825 }
826 break;
827
828 case RakNet::L2MID_Clans_ChangeHandle:
829 {
830 RakNet::Clans_ChangeHandle *arg = (RakNet::Clans_ChangeHandle *) m;
831 arg->oldClanHandle="Clan handle";
832 arg->newClanHandle="New Clan handle";
833 }
834 break;
835
836 case RakNet::L2MID_Clans_Leave:
837 {
838 RakNet::Clans_Leave *arg = (RakNet::Clans_Leave *) m;
839 arg->clanHandle="Clan handle";
840 arg->dissolveIfClanLeader=false;
841 arg->subject="L2MID_Clans_Leave";
842 arg->emailStatus=0;
843 }
844 break;
845
846 case RakNet::L2MID_Clans_Get:
847 {
848 RakNet::Clans_Get *arg = (RakNet::Clans_Get *) m;
849 }
850 break;
851
852 case RakNet::L2MID_Clans_SendJoinInvitation:
853 {
854 RakNet::Clans_SendJoinInvitation *arg = (RakNet::Clans_SendJoinInvitation *) m;
855 static int idx=0;
856 arg->clanHandle=RakNet::RakString("Clan handle %i", idx++);
857 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
858 arg->subject="L2MID_Clans_SendJoinInvitation";
859 }
860 break;
861
862 case RakNet::L2MID_Clans_WithdrawJoinInvitation:
863 {
864 RakNet::Clans_WithdrawJoinInvitation *arg = (RakNet::Clans_WithdrawJoinInvitation *) m;
865 arg->clanHandle="Clan handle";
866 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
867 arg->subject="L2MID_Clans_WithdrawJoinInvitation";
868 }
869 break;
870
871 case RakNet::L2MID_Clans_AcceptJoinInvitation:
872 {
873 RakNet::Clans_AcceptJoinInvitation *arg = (RakNet::Clans_AcceptJoinInvitation *) m;
874 static int idx=0;
875 arg->clanHandle=RakNet::RakString("Clan handle %i", idx++);
876 arg->subject="L2MID_Clans_AcceptJoinInvitation";
877 arg->failIfAlreadyInClan=false;
878 }
879 break;
880
881 case RakNet::L2MID_Clans_RejectJoinInvitation:
882 {
883 RakNet::Clans_RejectJoinInvitation *arg = (RakNet::Clans_RejectJoinInvitation *) m;
884 static int idx=0;
885 arg->clanHandle=RakNet::RakString("Clan handle %i", idx++);
886 arg->subject="L2MID_Clans_WithdrawJoinInvitation";
887 }
888 break;
889
890 case RakNet::L2MID_Clans_DownloadInvitationList:
891 {
892 RakNet::Clans_DownloadInvitationList *arg = (RakNet::Clans_DownloadInvitationList *) m;
893 }
894 break;
895
896 case RakNet::L2MID_Clans_SendJoinRequest:
897 {
898 RakNet::Clans_SendJoinRequest *arg = (RakNet::Clans_SendJoinRequest *) m;
899 arg->clanHandle="Clan handle";
900 arg->subject="L2MID_Clans_SendJoinRequest";
901 }
902 break;
903
904 case RakNet::L2MID_Clans_WithdrawJoinRequest:
905 {
906 RakNet::Clans_WithdrawJoinRequest *arg = (RakNet::Clans_WithdrawJoinRequest *) m;
907 arg->clanHandle="Clan handle";
908 arg->subject="L2MID_Clans_WithdrawJoinRequest";
909 }
910 break;
911
912 case RakNet::L2MID_Clans_AcceptJoinRequest:
913 {
914 RakNet::Clans_AcceptJoinRequest *arg = (RakNet::Clans_AcceptJoinRequest *) m;
915 arg->clanHandle="Clan handle";
916 arg->requestingUserHandle=RakNet::RakString("user%i", instanceNumber+1);
917 arg->subject="L2MID_Clans_AcceptJoinRequest";
918 }
919 break;
920
921 case RakNet::L2MID_Clans_RejectJoinRequest:
922 {
923 RakNet::Clans_RejectJoinRequest *arg = (RakNet::Clans_RejectJoinRequest *) m;
924 arg->clanHandle="Clan handle";
925 arg->requestingUserHandle=RakNet::RakString("user%i", instanceNumber+1);
926 }
927 break;
928
929 case RakNet::L2MID_Clans_DownloadRequestList:
930 {
931 RakNet::Clans_DownloadRequestList *arg = (RakNet::Clans_DownloadRequestList *) m;
932 }
933 break;
934
935 case RakNet::L2MID_Clans_KickAndBlacklistUser:
936 {
937 RakNet::Clans_KickAndBlacklistUser *arg = (RakNet::Clans_KickAndBlacklistUser *) m;
938 arg->clanHandle="Clan handle";
939 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
940 arg->kick=true;
941 arg->blacklist=true;
942 }
943 break;
944
945 case RakNet::L2MID_Clans_UnblacklistUser:
946 {
947 RakNet::Clans_UnblacklistUser *arg = (RakNet::Clans_UnblacklistUser *) m;
948 arg->clanHandle="Clan handle";
949 arg->targetHandle=RakNet::RakString("user%i", instanceNumber+1);
950 }
951 break;
952
953 case RakNet::L2MID_Clans_GetBlacklist:
954 {
955 RakNet::Clans_GetBlacklist *arg = (RakNet::Clans_GetBlacklist *) m;
956 arg->clanHandle="Clan handle";
957 }
958 break;
959
960 case RakNet::L2MID_Clans_GetMembers:
961 {
962 RakNet::Clans_GetMembers *arg = (RakNet::Clans_GetMembers *) m;
963 arg->clanHandle="Clan handle";
964 }
965 break;
966
967 case RakNet::L2MID_Clans_CreateBoard:
968 {
969 RakNet::Clans_CreateBoard *arg = (RakNet::Clans_CreateBoard *) m;
970 }
971 break;
972
973 case RakNet::L2MID_Clans_DestroyBoard:
974 {
975 RakNet::Clans_DestroyBoard *arg = (RakNet::Clans_DestroyBoard *) m;
976 }
977 break;
978
979 case RakNet::L2MID_Clans_CreateNewTopic:
980 {
981 RakNet::Clans_CreateNewTopic *arg = (RakNet::Clans_CreateNewTopic *) m;
982 }
983 break;
984
985 case RakNet::L2MID_Clans_ReplyToTopic:
986 {
987 RakNet::Clans_ReplyToTopic *arg = (RakNet::Clans_ReplyToTopic *) m;
988 }
989 break;
990
991 case RakNet::L2MID_Clans_RemovePost:
992 {
993 RakNet::Clans_RemovePost *arg = (RakNet::Clans_RemovePost *) m;
994 }
995 break;
996
997 case RakNet::L2MID_Clans_GetBoards:
998 {
999 RakNet::Clans_GetBoards *arg = (RakNet::Clans_GetBoards *) m;
1000 }
1001 break;
1002
1003 case RakNet::L2MID_Clans_GetTopics:
1004 {
1005 RakNet::Clans_GetTopics *arg = (RakNet::Clans_GetTopics *) m;
1006 }
1007 break;
1008
1009 case RakNet::L2MID_Clans_GetPosts:
1010 {
1011 RakNet::Clans_GetPosts *arg = (RakNet::Clans_GetPosts *) m;
1012 }
1013 break;
1014 }
1015 lobby2Client[instanceNumber].SendMsg(m);
1016 messageFactory.Dealloc(m);
1017 }
1018