RoomsSample.cpp 22 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515
  1. /*
  2. * Copyright (c) 2014, Oculus VR, Inc.
  3. * All rights reserved.
  4. *
  5. * This source code is licensed under the BSD-style license found in the
  6. * LICENSE file in the root directory of this source tree. An additional grant
  7. * of patent rights can be found in the PATENTS file in the same directory.
  8. *
  9. */
  10. #include "RoomsPlugin.h"
  11. #include "RakPeerInterface.h"
  12. #include "ProfanityFilter.h"
  13. #include "MessageIdentifiers.h"
  14. #include "Kbhit.h"
  15. #include <ctype.h>
  16. #include "Gets.h"
  17. struct SampleCallbacks : public RakNet::RoomsCallback
  18. {
  19. // Results of calls
  20. virtual void CreateRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::CreateRoom_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  21. virtual void EnterRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::EnterRoom_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  22. virtual void JoinByFilter_Callback( const RakNet::SystemAddress &senderAddress, RakNet::JoinByFilter_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  23. virtual void LeaveRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::LeaveRoom_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  24. virtual void GetInvitesToParticipant_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GetInvitesToParticipant_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  25. virtual void SendInvite_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SendInvite_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  26. virtual void AcceptInvite_Callback( const RakNet::SystemAddress &senderAddress, RakNet::AcceptInvite_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  27. virtual void StartSpectating_Callback( const RakNet::SystemAddress &senderAddress, RakNet::StartSpectating_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  28. virtual void StopSpectating_Callback( const RakNet::SystemAddress &senderAddress, RakNet::StopSpectating_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  29. virtual void GrantModerator_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GrantModerator_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  30. virtual void ChangeSlotCounts_Callback( const RakNet::SystemAddress &senderAddress, RakNet::ChangeSlotCounts_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  31. virtual void SetCustomRoomProperties_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SetCustomRoomProperties_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  32. virtual void GetRoomProperties_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GetRoomProperties_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  33. virtual void ChangeRoomName_Callback( const RakNet::SystemAddress &senderAddress, RakNet::ChangeRoomName_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  34. virtual void SetHiddenFromSearches_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SetHiddenFromSearches_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  35. virtual void SetDestroyOnModeratorLeave_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SetDestroyOnModeratorLeave_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  36. virtual void SetReadyStatus_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SetReadyStatus_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  37. virtual void GetReadyStatus_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GetReadyStatus_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  38. virtual void SetRoomLockState_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SetRoomLockState_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  39. virtual void GetRoomLockState_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GetRoomLockState_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  40. virtual void AreAllMembersReady_Callback( const RakNet::SystemAddress &senderAddress, RakNet::AreAllMembersReady_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  41. virtual void KickMember_Callback( const RakNet::SystemAddress &senderAddress, RakNet::KickMember_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  42. virtual void UnbanMember_Callback( const RakNet::SystemAddress &senderAddress, RakNet::UnbanMember_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  43. virtual void GetBanReason_Callback( const RakNet::SystemAddress &senderAddress, RakNet::GetBanReason_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  44. virtual void AddUserToQuickJoin_Callback( const RakNet::SystemAddress &senderAddress, RakNet::AddUserToQuickJoin_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  45. virtual void RemoveUserFromQuickJoin_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RemoveUserFromQuickJoin_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  46. virtual void IsInQuickJoin_Callback( const RakNet::SystemAddress &senderAddress, RakNet::IsInQuickJoin_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  47. virtual void SearchByFilter_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SearchByFilter_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  48. virtual void ChangeHandle_Callback( const RakNet::SystemAddress &senderAddress, RakNet::ChangeHandle_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  49. virtual void Chat_Callback( const RakNet::SystemAddress &senderAddress, RakNet::Chat_Func *callResult) {(void) senderAddress; callResult->PrintResult();}
  50. // Notifications due to other room members
  51. virtual void QuickJoinExpired_Callback( const RakNet::SystemAddress &senderAddress, RakNet::QuickJoinExpired_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  52. virtual void QuickJoinEnteredRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::QuickJoinEnteredRoom_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  53. virtual void RoomMemberStartedSpectating_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberStartedSpectating_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  54. virtual void RoomMemberStoppedSpectating_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberStoppedSpectating_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  55. virtual void ModeratorChanged_Callback( const RakNet::SystemAddress &senderAddress, RakNet::ModeratorChanged_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  56. virtual void SlotCountsSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::SlotCountsSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  57. virtual void CustomRoomPropertiesSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::CustomRoomPropertiesSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  58. virtual void RoomNameSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomNameSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  59. virtual void HiddenFromSearchesSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::HiddenFromSearchesSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  60. virtual void RoomMemberReadyStatusSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberReadyStatusSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  61. virtual void RoomLockStateSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomLockStateSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  62. virtual void RoomMemberKicked_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberKicked_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  63. virtual void RoomMemberHandleSet_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberHandleSet_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  64. virtual void RoomMemberLeftRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberLeftRoom_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  65. virtual void RoomMemberJoinedRoom_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomMemberJoinedRoom_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  66. virtual void RoomInvitationSent_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomInvitationSent_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  67. virtual void RoomInvitationWithdrawn_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomInvitationWithdrawn_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  68. virtual void RoomDestroyedOnModeratorLeft_Callback( const RakNet::SystemAddress &senderAddress, RakNet::RoomDestroyedOnModeratorLeft_Notification *notification) {(void) senderAddress; notification->PrintResult();}
  69. virtual void Chat_Callback( const RakNet::SystemAddress &senderAddress, RakNet::Chat_Notification *notification) {(void) senderAddress; notification->PrintResult(); printf("Chat=%s\nFiltered=%s\n", notification->chatMessage.C_String(), notification->filteredChatMessage.C_String());}
  70. };
  71. static const char *GAME_IDENTIFIER="My Game";
  72. static const char *ROOM_NAME="My Room";
  73. void GetUserName(RakNet::RoomsPluginFunc *func)
  74. {
  75. printf("Which user? 1=User1, 2=User2, 3=User3, 4=User4: ");
  76. char ch = getche();
  77. if (ch=='1')
  78. func->userName="User1";
  79. else if (ch=='2')
  80. func->userName="User2";
  81. else if (ch=='3')
  82. func->userName="User3";
  83. else
  84. func->userName="User4";
  85. printf("\n");
  86. }
  87. void GetRoomName(RakNet::RakString &dest)
  88. {
  89. char buff[256];
  90. printf("Enter room name, or enter for default: ");
  91. Gets(buff,sizeof(buff));
  92. if (buff[0]==0)
  93. dest=ROOM_NAME;
  94. else
  95. dest=buff;
  96. }
  97. void GetTargetName(RakNet::RakString *target)
  98. {
  99. printf("Which target user? 1=User1, 2=User2, 3=User3, 4=User4: ");
  100. char ch = getche();
  101. if (ch=='1')
  102. *target="User1";
  103. else if (ch=='2')
  104. *target="User2";
  105. else if (ch=='3')
  106. *target="User3";
  107. else
  108. *target="User4";
  109. printf("\n");
  110. }
  111. void main(void)
  112. {
  113. printf("A system for creating rooms for players to meet in before starting games.\n");
  114. printf("Difficulty: Intermediate\n\n");
  115. // Do the unit test to make sure the core functionality is correct. The plugin just does networking
  116. //RakNet::AllGamesRoomsContainer::UnitTest();
  117. RakNet::RakPeerInterface *client, *server;
  118. RakNet::RoomsPlugin roomsPluginClient, roomsPluginServer;
  119. client = RakNet::RakPeerInterface::GetInstance();
  120. server = RakNet::RakPeerInterface::GetInstance();
  121. RakNet::SocketDescriptor sd1(0,0),sd2(1234,0);
  122. RakNet::StartupResult sr;
  123. sr = client->Startup(1,&sd1, 1);
  124. RakAssert(sr==RakNet::RAKNET_STARTED);
  125. sr=server->Startup(1,&sd2, 1);
  126. RakAssert(sr==RakNet::RAKNET_STARTED);
  127. server->SetMaximumIncomingConnections(1);
  128. client->AttachPlugin(&roomsPluginClient);
  129. server->AttachPlugin(&roomsPluginServer);
  130. RakNet::ProfanityFilter profanityFilter;
  131. profanityFilter.AddWord("Crapola");
  132. roomsPluginServer.SetProfanityFilter(&profanityFilter);
  133. roomsPluginServer.roomsContainer.AddTitle(GAME_IDENTIFIER);
  134. SampleCallbacks sampleCallbacks;
  135. RakNet::SystemAddress localAddress=server->GetMyBoundAddress();
  136. roomsPluginClient.SetServerAddress(localAddress);
  137. roomsPluginClient.SetRoomsCallback(&sampleCallbacks);
  138. RakNet::ConnectionAttemptResult car = client->Connect("127.0.0.1", 1234, 0, 0, 0);
  139. RakAssert(car==RakNet::CONNECTION_ATTEMPT_STARTED);
  140. printf("A. CreateRoom\n");
  141. printf("B. EnterRoom\n");
  142. printf("C. JoinByFilter\n");
  143. printf("D. LeaveRoom\n");
  144. printf("E. GetInvitesToParticipant\n");
  145. printf("F. SendInvite\n");
  146. printf("G. AcceptInvite\n");
  147. printf("H. StartSpectating\n");
  148. printf("I. StopSpectating\n");
  149. printf("J. GrantModerator\n");
  150. printf("K. ChangeSlotCounts\n");
  151. printf("L. SetCustomRoomProperties\n");
  152. printf("M. ChangeRoomName\n");
  153. printf("N. SetHiddenFromSearches\n");
  154. printf("O. SetDestroyOnModeratorLeave\n");
  155. printf("P. SetReadyStatus\n");
  156. printf("Q. GetReadyStatus\n");
  157. printf("R. SetRoomLockState\n");
  158. printf("S. GetRoomLockState\n");
  159. printf("T. AreAllMembersReady\n");
  160. printf("U. KickMember\n");
  161. printf("V. UnbanMember\n");
  162. printf("W. GetBanReason\n");
  163. printf("X. AddUserToQuickJoin\n");
  164. printf("Y. RemoveUserFromQuickJoin\n");
  165. printf("Z. IsInQuickJoin\n");
  166. printf("1. SearchByFilter\n");
  167. printf("2. ChangeHandle\n");
  168. printf("3. RoomChat\n");
  169. printf("4. GetRoomProperties\n");
  170. RakNet::Packet *p;
  171. char ch;
  172. while (1)
  173. {
  174. p=client->Receive();
  175. if (p)
  176. {
  177. if (p->data[0]==ID_CONNECTION_REQUEST_ACCEPTED)
  178. printf("ID_CONNECTION_REQUEST_ACCEPTED\n");
  179. else if (p->data[0]==ID_CONNECTION_ATTEMPT_FAILED)
  180. printf("ID_CONNECTION_ATTEMPT_FAILED\n");
  181. else if (p->data[0]==ID_NO_FREE_INCOMING_CONNECTIONS)
  182. printf("ID_NO_FREE_INCOMING_CONNECTIONS\n");
  183. client->DeallocatePacket(p);
  184. }
  185. p=server->Receive();
  186. if (p)
  187. {
  188. if (p->data[0]==ID_NEW_INCOMING_CONNECTION)
  189. {
  190. roomsPluginServer.LoginRoomsParticipant("User1", p->systemAddress, p->guid, RakNet::UNASSIGNED_SYSTEM_ADDRESS);
  191. roomsPluginServer.LoginRoomsParticipant("User2", p->systemAddress, p->guid, RakNet::UNASSIGNED_SYSTEM_ADDRESS);
  192. roomsPluginServer.LoginRoomsParticipant("User3", p->systemAddress, p->guid, RakNet::UNASSIGNED_SYSTEM_ADDRESS);
  193. roomsPluginServer.LoginRoomsParticipant("User4", p->systemAddress, p->guid, RakNet::UNASSIGNED_SYSTEM_ADDRESS);
  194. }
  195. server->DeallocatePacket(p);
  196. }
  197. if (kbhit())
  198. {
  199. ch = getch();
  200. switch (toupper(ch))
  201. {
  202. case 'A':
  203. {
  204. printf("CreateRoom\n");
  205. RakNet::CreateRoom_Func func;
  206. GetUserName(&func);
  207. GetRoomName(func.networkedRoomCreationParameters.roomName);
  208. func.networkedRoomCreationParameters.slots.publicSlots=1;
  209. func.gameIdentifier=GAME_IDENTIFIER;
  210. roomsPluginClient.ExecuteFunc(&func);
  211. }
  212. break;
  213. case 'B':
  214. {
  215. printf("EnterRoom\n");
  216. RakNet::EnterRoom_Func func;
  217. GetUserName(&func);
  218. // Create or join the specified room name
  219. GetRoomName(func.networkedRoomCreationParameters.roomName);
  220. func.query.AddQuery_STRING(
  221. DefaultRoomColumns::GetColumnName(DefaultRoomColumns::TC_ROOM_NAME),
  222. func.networkedRoomCreationParameters.roomName.C_String());
  223. func.networkedRoomCreationParameters.slots.publicSlots=2;
  224. func.roomMemberMode=RMM_PUBLIC;
  225. func.gameIdentifier=GAME_IDENTIFIER;
  226. roomsPluginClient.ExecuteFunc(&func);
  227. }
  228. break;
  229. case 'C':
  230. {
  231. printf("JoinByFilter\n");
  232. RakNet::JoinByFilter_Func func;
  233. GetUserName(&func);
  234. RakNet::RakString roomName;
  235. GetRoomName(roomName);
  236. func.query.AddQuery_STRING(
  237. DefaultRoomColumns::GetColumnName(DefaultRoomColumns::TC_ROOM_NAME),
  238. roomName.C_String());
  239. func.gameIdentifier=GAME_IDENTIFIER;
  240. func.roomMemberMode=RMM_PUBLIC;
  241. roomsPluginClient.ExecuteFunc(&func);
  242. }
  243. break;
  244. case 'D':
  245. {
  246. printf("LeaveRoom\n");
  247. RakNet::LeaveRoom_Func func;
  248. GetUserName(&func);
  249. roomsPluginClient.ExecuteFunc(&func);
  250. }
  251. break;
  252. case 'E':
  253. {
  254. printf("GetInvitesToParticipant\n");
  255. RakNet::GetInvitesToParticipant_Func func;
  256. GetUserName(&func);
  257. roomsPluginClient.ExecuteFunc(&func);
  258. }
  259. break;
  260. case 'F':
  261. {
  262. printf("SendInvite\n");
  263. RakNet::SendInvite_Func func;
  264. GetUserName(&func);
  265. GetTargetName(&func.inviteeName);
  266. func.inviteToSpectatorSlot=false;
  267. func.subject="SendInviteSubject";
  268. func.body="SendInviteSubject";
  269. roomsPluginClient.ExecuteFunc(&func);
  270. }
  271. break;
  272. case 'G':
  273. {
  274. printf("AcceptInvite\n");
  275. RakNet::AcceptInvite_Func func;
  276. GetUserName(&func);
  277. GetTargetName(&func.inviteSender);
  278. func.roomId=1;
  279. roomsPluginClient.ExecuteFunc(&func);
  280. }
  281. break;
  282. case 'H':
  283. {
  284. printf("StartSpectating\n");
  285. RakNet::StartSpectating_Func func;
  286. GetUserName(&func);
  287. roomsPluginClient.ExecuteFunc(&func);
  288. }
  289. break;
  290. case 'I':
  291. {
  292. printf("StopSpectating\n");
  293. RakNet::StopSpectating_Func func;
  294. GetUserName(&func);
  295. roomsPluginClient.ExecuteFunc(&func);
  296. }
  297. break;
  298. case 'J':
  299. {
  300. printf("GrantModerator\n");
  301. RakNet::GrantModerator_Func func;
  302. GetUserName(&func);
  303. GetTargetName(&func.newModerator);
  304. roomsPluginClient.ExecuteFunc(&func);
  305. }
  306. break;
  307. case 'K':
  308. {
  309. printf("ChangeSlotCounts\n");
  310. RakNet::ChangeSlotCounts_Func func;
  311. GetUserName(&func);
  312. func.slots.publicSlots=1;
  313. func.slots.reservedSlots=0;
  314. func.slots.spectatorSlots=1;
  315. roomsPluginClient.ExecuteFunc(&func);
  316. }
  317. break;
  318. case 'L':
  319. {
  320. printf("SetCustomRoomProperties\n");
  321. RakNet::SetCustomRoomProperties_Func func;
  322. GetUserName(&func);
  323. DataStructures::Table customRoomProperties;
  324. func.table.AddColumn("Custom Column 1", DataStructures::Table::STRING);
  325. func.table.AddColumn("Custom Column 2", DataStructures::Table::NUMERIC);
  326. DataStructures::Table::Row* row = func.table.AddRow(0);
  327. row->cells[0]->Set("Custom Column 1 value");
  328. row->cells[1]->Set(12345);
  329. roomsPluginClient.ExecuteFunc(&func);
  330. }
  331. break;
  332. case 'M':
  333. {
  334. printf("ChangeRoomName\n");
  335. RakNet::ChangeRoomName_Func func;
  336. GetUserName(&func);
  337. func.newRoomName="New room name";
  338. roomsPluginClient.ExecuteFunc(&func);
  339. }
  340. break;
  341. case 'N':
  342. {
  343. printf("SetHiddenFromSearches\n");
  344. RakNet::SetHiddenFromSearches_Func func;
  345. GetUserName(&func);
  346. func.hiddenFromSearches=true;
  347. roomsPluginClient.ExecuteFunc(&func);
  348. }
  349. break;
  350. case 'O':
  351. {
  352. printf("SetDestroyOnModeratorLeave\n");
  353. RakNet::SetDestroyOnModeratorLeave_Func func;
  354. GetUserName(&func);
  355. func.destroyOnModeratorLeave=true;
  356. roomsPluginClient.ExecuteFunc(&func);
  357. }
  358. break;
  359. case 'P':
  360. {
  361. printf("SetReadyStatus\n");
  362. RakNet::SetReadyStatus_Func func;
  363. GetUserName(&func);
  364. func.isReady=true;
  365. roomsPluginClient.ExecuteFunc(&func);
  366. }
  367. break;
  368. case 'Q':
  369. {
  370. printf("GetReadyStatus\n");
  371. RakNet::GetReadyStatus_Func func;
  372. GetUserName(&func);
  373. roomsPluginClient.ExecuteFunc(&func);
  374. }
  375. break;
  376. case 'R':
  377. {
  378. printf("SetRoomLockState\n");
  379. RakNet::SetRoomLockState_Func func;
  380. GetUserName(&func);
  381. func.roomLockState=RakNet::RLS_ALL_LOCKED;
  382. roomsPluginClient.ExecuteFunc(&func);
  383. }
  384. break;
  385. case 'S':
  386. {
  387. printf("GetRoomLockState\n");
  388. RakNet::GetRoomLockState_Func func;
  389. GetUserName(&func);
  390. roomsPluginClient.ExecuteFunc(&func);
  391. }
  392. break;
  393. case 'T':
  394. {
  395. printf("AreAllMembersReady\n");
  396. RakNet::AreAllMembersReady_Func func;
  397. GetUserName(&func);
  398. roomsPluginClient.ExecuteFunc(&func);
  399. }
  400. break;
  401. case 'U':
  402. {
  403. printf("KickMember\n");
  404. RakNet::KickMember_Func func;
  405. GetUserName(&func);
  406. GetTargetName(&func.kickedMember);
  407. func.reason="KickMemberReason";
  408. roomsPluginClient.ExecuteFunc(&func);
  409. }
  410. break;
  411. case 'V':
  412. {
  413. printf("UnbanMember\n");
  414. RakNet::UnbanMember_Func func;
  415. GetUserName(&func);
  416. GetTargetName(&func.bannedMemberName);
  417. roomsPluginClient.ExecuteFunc(&func);
  418. }
  419. break;
  420. case 'W':
  421. {
  422. printf("GetBanReason\n");
  423. RakNet::GetBanReason_Func func;
  424. GetUserName(&func);
  425. func.roomId=1;
  426. roomsPluginClient.ExecuteFunc(&func);
  427. }
  428. break;
  429. case 'X':
  430. {
  431. printf("AddUserToQuickJoin\n");
  432. RakNet::AddUserToQuickJoin_Func func;
  433. GetUserName(&func);
  434. func.networkedQuickJoinUser.timeout=30000;
  435. func.networkedQuickJoinUser.minimumPlayers=4;
  436. func.gameIdentifier=GAME_IDENTIFIER;
  437. roomsPluginClient.ExecuteFunc(&func);
  438. }
  439. break;
  440. case 'Y':
  441. {
  442. printf("RemoveUserFromQuickJoin\n");
  443. RakNet::RemoveUserFromQuickJoin_Func func;
  444. GetUserName(&func);
  445. roomsPluginClient.ExecuteFunc(&func);
  446. }
  447. break;
  448. case 'Z':
  449. {
  450. printf("IsInQuickJoin\n");
  451. RakNet::IsInQuickJoin_Func func;
  452. GetUserName(&func);
  453. roomsPluginClient.ExecuteFunc(&func);
  454. }
  455. break;
  456. case '1':
  457. {
  458. printf("SearchByFilter\n");
  459. RakNet::SearchByFilter_Func func;
  460. GetUserName(&func);
  461. func.gameIdentifier=GAME_IDENTIFIER;
  462. func.onlyJoinable=true;
  463. // Not specifying any search parameters returns all rooms
  464. // RakNet::RakString roomName;
  465. // GetRoomName(roomName);
  466. // func.roomQuery.AddQuery_STRING(
  467. // DefaultRoomColumns::GetColumnName(DefaultRoomColumns::TC_ROOM_NAME),
  468. // roomName.C_String());
  469. roomsPluginClient.ExecuteFunc(&func);
  470. }
  471. break;
  472. case '2':
  473. {
  474. printf("ChangeHandle\n");
  475. RakNet::ChangeHandle_Func func;
  476. GetUserName(&func);
  477. func.newHandle="Crapola";
  478. roomsPluginClient.ExecuteFunc(&func);
  479. }
  480. break;
  481. case '3':
  482. {
  483. printf("RoomChat\n");
  484. RakNet::Chat_Func func;
  485. GetUserName(&func);
  486. func.chatMessage="Hello world. This is Crapola";
  487. roomsPluginClient.ExecuteFunc(&func);
  488. }
  489. break;
  490. case '4':
  491. {
  492. printf("GetRoomProperties\n");
  493. RakNet::GetRoomProperties_Func func;
  494. GetUserName(&func);
  495. GetRoomName(func.roomName);
  496. roomsPluginClient.ExecuteFunc(&func);
  497. }
  498. break;
  499. }
  500. }
  501. }
  502. RakNet::RakPeerInterface::DestroyInstance(client);
  503. RakNet::RakPeerInterface::DestroyInstance(server);
  504. }
粤ICP备19079148号