Lobby2Message.h 171 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796379737983799380038013802380338043805380638073808380938103811381238133814381538163817381838193820382138223823382438253826382738283829383038313832383338343835383638373838383938403841384238433844384538463847384838493850385138523853385438553856385738583859386038613862386338643865386638673868386938703871387238733874387538763877387838793880388138823883388438853886388738883889389038913892389338943895389638973898389939003901390239033904390539063907390839093910391139123913391439153916391739183919392039213922392339243925392639273928392939303931393239333934393539363937393839393940394139423943394439453946394739483949395039513952395339543955395639573958395939603961
  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. #ifndef __LOBBY_2_MESSAGE_H
  11. #define __LOBBY_2_MESSAGE_H
  12. #include "BitStream.h"
  13. #include "Lobby2ResultCode.h"
  14. #include "RakString.h"
  15. #include "RakAssert.h"
  16. #include "RakNetSmartPtr.h"
  17. #include "SimpleMutex.h"
  18. #include "Lobby2Presence.h"
  19. #pragma once
  20. namespace RakNet
  21. {
  22. struct Lobby2Callbacks;
  23. class Lobby2Client;
  24. class Lobby2Server;
  25. struct BinaryDataBlock;
  26. struct Lobby2ServerCommand;
  27. class Lobby2Plugin;
  28. const unsigned int L2_MAX_BINARY_DATA_LENGTH=1000000;
  29. // --------------------------------------------- Enumeration list of all message IDs --------------------------------------------
  30. /// All enumerations for Lobby2Message. Each Lobby2Message has one enumeration
  31. /// \ingroup LOBBY_2_COMMANDS
  32. enum Lobby2MessageID
  33. {
  34. L2MID_Platform_Startup,
  35. L2MID_Platform_Shutdown,
  36. L2MID_System_CreateDatabase,
  37. L2MID_System_DestroyDatabase,
  38. L2MID_System_CreateTitle,
  39. L2MID_System_DestroyTitle,
  40. L2MID_System_GetTitleRequiredAge,
  41. L2MID_System_GetTitleBinaryData,
  42. L2MID_System_RegisterProfanity,
  43. L2MID_System_BanUser,
  44. L2MID_System_UnbanUser,
  45. L2MID_CDKey_Add,
  46. L2MID_CDKey_GetStatus,
  47. L2MID_CDKey_Use,
  48. L2MID_CDKey_FlagStolen,
  49. L2MID_Client_Login,
  50. L2MID_Client_Logoff,
  51. L2MID_Client_RegisterAccount,
  52. L2MID_System_SetEmailAddressValidated,
  53. L2MID_Client_ValidateHandle,
  54. L2MID_System_DeleteAccount,
  55. L2MID_System_PruneAccounts,
  56. L2MID_Client_GetEmailAddress,
  57. L2MID_Client_GetPasswordRecoveryQuestionByHandle,
  58. L2MID_Client_GetPasswordByPasswordRecoveryAnswer,
  59. L2MID_Client_ChangeHandle,
  60. L2MID_Client_UpdateAccount,
  61. L2MID_Client_GetAccountDetails,
  62. L2MID_Client_StartIgnore,
  63. L2MID_Client_StopIgnore,
  64. L2MID_Client_GetIgnoreList,
  65. L2MID_Client_PerTitleIntegerStorage,
  66. L2MID_Client_PerTitleBinaryStorage,
  67. L2MID_Client_SetPresence,
  68. L2MID_Client_GetPresence,
  69. L2MID_Friends_SendInvite,
  70. L2MID_Friends_AcceptInvite,
  71. L2MID_Friends_RejectInvite,
  72. L2MID_Friends_GetInvites,
  73. L2MID_Friends_GetFriends,
  74. L2MID_Friends_Remove,
  75. L2MID_BookmarkedUsers_Add,
  76. L2MID_BookmarkedUsers_Remove,
  77. L2MID_BookmarkedUsers_Get,
  78. L2MID_Emails_Send,
  79. L2MID_Emails_Get,
  80. L2MID_Emails_Delete,
  81. L2MID_Emails_SetStatus,
  82. L2MID_Ranking_SubmitMatch,
  83. L2MID_Ranking_GetMatches,
  84. L2MID_Ranking_GetMatchBinaryData,
  85. L2MID_Ranking_GetTotalScore,
  86. L2MID_Ranking_WipeScoresForPlayer,
  87. L2MID_Ranking_WipeMatches,
  88. L2MID_Ranking_PruneMatches,
  89. L2MID_Ranking_UpdateRating,
  90. L2MID_Ranking_WipeRatings,
  91. L2MID_Ranking_GetRating,
  92. L2MID_Clans_Create,
  93. L2MID_Clans_SetProperties,
  94. L2MID_Clans_GetProperties,
  95. L2MID_Clans_SetMyMemberProperties,
  96. L2MID_Clans_GrantLeader,
  97. L2MID_Clans_SetSubleaderStatus,
  98. L2MID_Clans_SetMemberRank,
  99. L2MID_Clans_GetMemberProperties,
  100. L2MID_Clans_ChangeHandle,
  101. L2MID_Clans_Leave,
  102. L2MID_Clans_Get,
  103. L2MID_Clans_SendJoinInvitation,
  104. L2MID_Clans_WithdrawJoinInvitation,
  105. L2MID_Clans_AcceptJoinInvitation,
  106. L2MID_Clans_RejectJoinInvitation,
  107. L2MID_Clans_DownloadInvitationList,
  108. L2MID_Clans_SendJoinRequest,
  109. L2MID_Clans_WithdrawJoinRequest,
  110. L2MID_Clans_AcceptJoinRequest,
  111. L2MID_Clans_RejectJoinRequest,
  112. L2MID_Clans_DownloadRequestList,
  113. L2MID_Clans_KickAndBlacklistUser,
  114. L2MID_Clans_UnblacklistUser,
  115. L2MID_Clans_GetBlacklist,
  116. L2MID_Clans_GetMembers,
  117. L2MID_Clans_GetList,
  118. L2MID_Clans_CreateBoard,
  119. L2MID_Clans_DestroyBoard,
  120. L2MID_Clans_CreateNewTopic,
  121. L2MID_Clans_ReplyToTopic,
  122. L2MID_Clans_RemovePost,
  123. L2MID_Clans_GetBoards,
  124. L2MID_Clans_GetTopics,
  125. L2MID_Clans_GetPosts,
  126. L2MID_Console_GameBootCheck,
  127. L2MID_Console_GetGameBootInviteDetails,
  128. L2MID_Console_GetServerStatus,
  129. L2MID_Console_GetWorldListFromServer,
  130. L2MID_Console_GetLobbyListFromWorld,
  131. L2MID_Console_JoinLobby,
  132. L2MID_Console_LeaveLobby,
  133. L2MID_Console_SendLobbyChatMessage,
  134. L2MID_Console_SearchRooms,
  135. L2MID_Console_GetRoomDetails,
  136. L2MID_Console_GetLobbyMemberData,
  137. L2MID_Console_CreateRoom,
  138. L2MID_Console_SignIntoRoom,
  139. L2MID_Console_SetRoomSearchProperties,
  140. L2MID_Console_UpdateRoomParameters,
  141. L2MID_Console_JoinRoom,
  142. L2MID_Console_LeaveRoom,
  143. L2MID_Console_SendLobbyInvitationToRoom,
  144. L2MID_Console_SendGUIInvitationToRoom,
  145. L2MID_Console_SendDataMessageToUser,
  146. L2MID_Console_SendRoomChatMessage,
  147. L2MID_Console_ShowFriendsUI,
  148. L2MID_Console_EndGame,
  149. L2MID_Console_StartGame,
  150. L2MID_Console_ShowPartyUI,
  151. L2MID_Console_ShowMessagesUI,
  152. L2MID_Console_ShowGUIInvitationsToRooms,
  153. L2MID_Console_EnableDisableRoomVoiceChat,
  154. L2MID_Notification_Client_RemoteLogin,
  155. L2MID_Notification_Client_IgnoreStatus,
  156. L2MID_Notification_Friends_StatusChange,
  157. L2MID_Notification_Friends_PresenceUpdate,
  158. L2MID_Notification_User_ChangedHandle,
  159. L2MID_Notification_Friends_CreatedClan,
  160. L2MID_Notification_Emails_Received,
  161. L2MID_Notification_Clans_GrantLeader,
  162. L2MID_Notification_Clans_SetSubleaderStatus,
  163. L2MID_Notification_Clans_SetMemberRank,
  164. L2MID_Notification_Clans_ChangeHandle,
  165. L2MID_Notification_Clans_Leave,
  166. L2MID_Notification_Clans_PendingJoinStatus,
  167. L2MID_Notification_Clans_NewClanMember,
  168. L2MID_Notification_Clans_KickAndBlacklistUser,
  169. L2MID_Notification_Clans_UnblacklistUser,
  170. L2MID_Notification_Clans_Destroyed,
  171. L2MID_Notification_Console_CableDisconnected,
  172. L2MID_Notification_Console_ContextError,
  173. L2MID_Notification_Console_MemberJoinedLobby,
  174. L2MID_Notification_Console_MemberLeftLobby,
  175. L2MID_Notification_Console_LobbyDestroyed,
  176. L2MID_Notification_Console_LobbyMemberDataUpdated,
  177. L2MID_Notification_Console_LobbyGotChatMessage,
  178. L2MID_Notification_Console_LobbyGotRoomInvitation,
  179. L2MID_Notification_Console_MemberJoinedRoom,
  180. L2MID_Notification_Console_MemberLeftRoom,
  181. L2MID_Notification_Console_KickedOutOfRoom,
  182. L2MID_Notification_Console_RoomWasDestroyed,
  183. L2MID_Notification_Console_UpdateRoomParameters,
  184. L2MID_Notification_Console_RoomOwnerChanged,
  185. L2MID_Notification_Console_RoomChatMessage,
  186. L2MID_Notification_Console_RoomMessage,
  187. L2MID_Notification_Console_ChatEvent,
  188. L2MID_Notification_Console_MuteListChanged,
  189. L2MID_Notification_Console_Local_Users_Changed,
  190. L2MID_Notification_ReceivedDataMessageFromUser,
  191. L2MID_Notification_Console_MemberJoinedParty,
  192. L2MID_Notification_Console_MemberLeftParty,
  193. L2MID_Notification_Console_Game_Started, // XBOX only
  194. L2MID_Notification_Console_Game_Ending, // XBOX only
  195. L2MID_Notification_Console_Game_Ended, // XBOX only
  196. L2MID_Notification_Console_Got_Room_Invite,
  197. L2MID_Notification_Console_Accepted_Room_Invite,
  198. L2MID_COUNT,
  199. };
  200. // Should match tab;e lobby2.clanMemberStates
  201. /// \ingroup LOBBY_2_COMMANDS
  202. enum ClanMemberState
  203. {
  204. CMD_UNDEFINED=0,
  205. CMD_ACTIVE,
  206. CMD_BANNED,
  207. CMD_JOIN_INVITED,
  208. CMD_JOIN_REQUESTED,
  209. };
  210. // --------------------------------------------- Base class for all messages (functions and notifications --------------------------------------------
  211. /// \brief A Lobby2Message encapsulates a networked function call from the client.
  212. /// \details The client should fill in the input parameters, call Lobby2Client::SendMsg(), and wait for the reply in the callback passed to Lobby2Client::SetCallbackInterface()
  213. /// The input parameters are always serialized back from the server.
  214. /// See resultCode for the result of the operation. L2RC_SUCCESS means success. Anything else means failure.
  215. /// Any message may return between L2RC_NOT_LOGGED_IN and L2RC_EMAIL_ADDRESS_IS_INVALID, which indices formatting errors in the input.
  216. /// All other return codes have the name of the message in the enumeration.
  217. /// The system can be extended by deriving from Lobby2Message, adding your own input and output parameters, and deriving from Lobby2MessageFactory register your own class factory with RakNet::Lobby2Plugin::SetMessageFactory()
  218. /// \ingroup LOBBY_2_COMMANDS
  219. struct Lobby2Message
  220. {
  221. Lobby2Message();
  222. virtual ~Lobby2Message() {}
  223. /// Every message has an ID identifying it across the network
  224. virtual Lobby2MessageID GetID(void) const=0;
  225. /// Is this message something that should only be run by a system with admin privileges?
  226. /// Set admin privileges with Lobby2Server::AddAdminAddress()
  227. virtual bool RequiresAdmin(void) const=0;
  228. /// Is this message something that should only be run by a system with ranking upload priviledges?
  229. /// Set ranking privileges with Lobby2Server::AddRankingAddress()
  230. virtual bool RequiresRankingPermission(void) const=0;
  231. /// Should this message not be processed on the server if the requesting user disconnects before it completes?
  232. /// This should be true for functions that only return data. False for functions that affect other users, or change the database
  233. virtual bool CancelOnDisconnect(void) const=0;
  234. /// Does this function require logging into the server before it can be executed?
  235. /// If true, the user id and user handle will be automatically inferred by the last login by looking up the sender's system address.
  236. /// If false, the message should include the username so the database query can lookup which user is performing this operation.
  237. virtual bool RequiresLogin(void) const=0;
  238. // Serialize data in this class. Currently just the resultCode
  239. void SerializeBase(bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream);
  240. /// Overridable serialization of the contents of this message. Defaults to SerializeBase()
  241. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  242. /// If data members can be validated for correctness in the server's main thread, override this function and do those checks here.
  243. /// \return True for input OK. False if the input is bad and does not need to be further processed in the database threads.
  244. virtual bool PrevalidateInput(void);
  245. /// Override to do any Lobby2Client functionality when the message is returned from the server (usually nothing).
  246. /// \return True to call CallCallback immediately. False to defer for some reason (always true on the PC)
  247. virtual bool ClientImpl( RakNet::Lobby2Plugin *client);
  248. /// This message has been processed by the server and has arrived back on the client.
  249. /// Call the client informing the user of this event.
  250. virtual void CallCallback(Lobby2Callbacks *cb)=0;
  251. /// Do any Lobby2Server functionality when the message first arrives on the server, and after it has returned true from PrevalidateInput()
  252. /// If it returns true, the message has been handled, and the result is sent to the client
  253. /// If it returns false, the message continues to ServerDBImpl
  254. virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  255. /// Do any Lobby2Server functionality after the message has been processed by the database, in the server thread.
  256. virtual void ServerPostDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  257. /// Do any Lobby2Server functionality when the message is processed in a database thread on the server.
  258. /// It is safe to do slow database calls in this function.
  259. /// If it returns true, the message has been handled, and the result is sent to the client
  260. /// If it returns false, that means ignore the message
  261. virtual bool ServerDBImpl( Lobby2ServerCommand *command, void *databaseInterface );
  262. /// The only non-printable character is space
  263. /// Cannot start with space
  264. /// Cannot end with space
  265. /// Cannot have two spaces in a row
  266. bool ValidateHandle( RakNet::RakString *handle );
  267. /// Binary data cannot be longer than L2_MAX_BINARY_DATA_LENGTH
  268. bool ValidateBinary( RakNetSmartPtr<BinaryDataBlock>binaryDataBlock);
  269. /// Required text cannot be empty.
  270. bool ValidateRequiredText( RakNet::RakString *text );
  271. /// Passwords must contain at least 5 characters
  272. bool ValidatePassword( RakNet::RakString *text );
  273. /// Check email address format
  274. bool ValidateEmailAddress( RakNet::RakString *text );
  275. /// Convert the enumeration representing this message to a string, and return it. Done automatically by macros.
  276. virtual const char *GetName(void) const=0;
  277. /// Write the result of this message to out(). Done automatically by macros.
  278. virtual void DebugMsg(RakNet::RakString &out) const=0;
  279. /// Print the result of DebugMsg
  280. virtual void DebugPrintf(void) const
  281. {
  282. RakNet::RakString out; DebugMsg(out); printf(out.C_String());
  283. }
  284. /// Result of the operation. L2RC_SUCCESS means the result completed. Anything else means an error
  285. RakNet::Lobby2ResultCode resultCode;
  286. // For polling, when necessary
  287. virtual bool WasCompleted( RakNet::Lobby2Plugin *client ) {(void) client; return false;}
  288. // Is this message a notification / callback?
  289. virtual bool IsNotification(void) const {return false;}
  290. /// Just a number, representing which instance of Lobby2Callbacks should process the result of this operation
  291. /// -1 means all
  292. uint32_t callbackId;
  293. /// Used for consoles
  294. int extendedResultCode;
  295. void AddRef(void) {refCountMutex.Lock(); refCount++; refCountMutex.Unlock(); }
  296. void Deref(void) {refCountMutex.Lock(); refCount--; refCountMutex.Unlock();}
  297. int GetRefCount(void) {int r; refCountMutex.Lock(); r = refCount; refCountMutex.Unlock(); return r;}
  298. /// Just a number, uniquely identifying each allocation of Lobby2Message.
  299. /// Use it if you need to lookup queries on the callback reply
  300. uint64_t requestId;
  301. private:
  302. SimpleMutex refCountMutex;
  303. /// Reference count
  304. int refCount;
  305. };
  306. // --------------------------------------------- Prototypes --------------------------------------------
  307. struct Platform_Startup;
  308. struct Platform_Shutdown;
  309. struct System_CreateDatabase;
  310. struct System_DestroyDatabase;
  311. struct System_CreateTitle;
  312. struct System_DestroyTitle;
  313. struct System_GetTitleRequiredAge;
  314. struct System_GetTitleBinaryData;
  315. struct System_RegisterProfanity;
  316. struct System_BanUser;
  317. struct System_UnbanUser;
  318. struct CDKey_Add;
  319. struct CDKey_GetStatus;
  320. struct CDKey_Use;
  321. struct CDKey_FlagStolen;
  322. struct Client_Login;
  323. struct Client_Logoff;
  324. struct Client_RegisterAccount;
  325. struct System_SetEmailAddressValidated;
  326. struct Client_ValidateHandle;
  327. struct System_DeleteAccount;
  328. struct System_PruneAccounts;
  329. struct Client_GetEmailAddress;
  330. struct Client_GetPasswordRecoveryQuestionByHandle;
  331. struct Client_GetPasswordByPasswordRecoveryAnswer;
  332. struct Client_ChangeHandle;
  333. struct Client_UpdateAccount;
  334. struct Client_GetAccountDetails;
  335. struct Client_StartIgnore;
  336. struct Client_StopIgnore;
  337. struct Client_GetIgnoreList;
  338. struct Client_PerTitleIntegerStorage;
  339. struct Client_PerTitleBinaryStorage;
  340. struct Client_SetPresence;
  341. struct Client_GetPresence;
  342. struct Friends_SendInvite;
  343. struct Friends_AcceptInvite;
  344. struct Friends_RejectInvite;
  345. struct Friends_GetInvites;
  346. struct Friends_GetFriends;
  347. struct Friends_Remove;
  348. struct BookmarkedUsers_Add;
  349. struct BookmarkedUsers_Remove;
  350. struct BookmarkedUsers_Get;
  351. struct Emails_Send;
  352. struct Emails_Get;
  353. struct Emails_Delete;
  354. struct Emails_SetStatus;
  355. struct Ranking_SubmitMatch;
  356. struct Ranking_GetMatches;
  357. struct Ranking_GetMatchBinaryData;
  358. struct Ranking_GetTotalScore;
  359. struct Ranking_WipeScoresForPlayer;
  360. struct Ranking_WipeMatches;
  361. struct Ranking_PruneMatches;
  362. struct Ranking_UpdateRating;
  363. struct Ranking_WipeRatings;
  364. struct Ranking_GetRating;
  365. struct Clans_Create;
  366. struct Clans_SetProperties;
  367. struct Clans_GetProperties;
  368. struct Clans_SetMyMemberProperties;
  369. struct Clans_GrantLeader;
  370. struct Clans_SetSubleaderStatus;
  371. struct Clans_SetMemberRank;
  372. struct Clans_GetMemberProperties;
  373. struct Clans_ChangeHandle;
  374. struct Clans_Leave;
  375. struct Clans_Get;
  376. struct Clans_SendJoinInvitation;
  377. struct Clans_WithdrawJoinInvitation;
  378. struct Clans_AcceptJoinInvitation;
  379. struct Clans_RejectJoinInvitation;
  380. struct Clans_DownloadInvitationList;
  381. struct Clans_SendJoinRequest;
  382. struct Clans_WithdrawJoinRequest;
  383. struct Clans_AcceptJoinRequest;
  384. struct Clans_RejectJoinRequest;
  385. struct Clans_DownloadRequestList;
  386. struct Clans_KickAndBlacklistUser;
  387. struct Clans_UnblacklistUser;
  388. struct Clans_GetBlacklist;
  389. struct Clans_GetMembers;
  390. struct Clans_GetList;
  391. struct Clans_CreateBoard;
  392. struct Clans_DestroyBoard;
  393. struct Clans_CreateNewTopic;
  394. struct Clans_ReplyToTopic;
  395. struct Clans_RemovePost;
  396. struct Clans_GetBoards;
  397. struct Clans_GetTopics;
  398. struct Clans_GetPosts;
  399. struct Console_GameBootCheck;
  400. struct Console_GetGameBootInviteDetails;
  401. struct Console_GetServerStatus;
  402. struct Console_GetWorldListFromServer;
  403. struct Console_GetLobbyListFromWorld;
  404. struct Console_JoinLobby;
  405. struct Console_LeaveLobby;
  406. struct Console_SendLobbyChatMessage;
  407. struct Console_SearchRooms;
  408. struct Console_GetRoomDetails;
  409. struct Console_GetLobbyMemberData;
  410. struct Console_CreateRoom;
  411. struct Console_SignIntoRoom;
  412. struct Console_SetRoomSearchProperties;
  413. struct Console_UpdateRoomParameters;
  414. struct Console_JoinRoom;
  415. struct Console_LeaveRoom;
  416. struct Console_SendLobbyInvitationToRoom;
  417. struct Console_SendGUIInvitationToRoom;
  418. struct Console_SendDataMessageToUser;
  419. struct Console_SendRoomChatMessage;
  420. struct Console_ShowFriendsUI;
  421. struct Console_EndGame;
  422. struct Console_StartGame;
  423. struct Console_ShowPartyUI;
  424. struct Console_ShowMessagesUI;
  425. struct Console_ShowGUIInvitationsToRooms;
  426. struct Console_EnableDisableRoomVoiceChat;
  427. struct Notification_Client_RemoteLogin;
  428. struct Notification_Client_IgnoreStatus;
  429. struct Notification_Friends_StatusChange;
  430. struct Notification_Friends_PresenceUpdate;
  431. struct Notification_User_ChangedHandle;
  432. struct Notification_Friends_CreatedClan;
  433. struct Notification_Emails_Received;
  434. struct Notification_Clans_GrantLeader;
  435. struct Notification_Clans_SetSubleaderStatus;
  436. struct Notification_Clans_SetMemberRank;
  437. struct Notification_Clans_ChangeHandle;
  438. struct Notification_Clans_Leave;
  439. struct Notification_Clans_PendingJoinStatus;
  440. struct Notification_Clans_NewClanMember;
  441. struct Notification_Clans_KickAndBlacklistUser;
  442. struct Notification_Clans_UnblacklistUser;
  443. struct Notification_Clans_Destroyed;
  444. struct Notification_Console_CableDisconnected;
  445. struct Notification_Console_ContextError;
  446. struct Notification_Console_MemberJoinedLobby;
  447. struct Notification_Console_MemberLeftLobby;
  448. struct Notification_Console_LobbyDestroyed;
  449. struct Notification_Console_LobbyMemberDataUpdated;
  450. struct Notification_Console_LobbyGotChatMessage;
  451. struct Notification_Console_LobbyGotRoomInvitation;
  452. struct Notification_Console_MemberJoinedRoom;
  453. struct Notification_Console_MemberLeftRoom;
  454. struct Notification_Console_KickedOutOfRoom;
  455. struct Notification_Console_RoomWasDestroyed;
  456. struct Notification_Console_UpdateRoomParameters;
  457. struct Notification_Console_RoomOwnerChanged;
  458. struct Notification_Console_RoomChatMessage;
  459. struct Notification_Console_RoomMessage;
  460. //struct Notification_Console_RoomMemberConnectivityUpdate;
  461. struct Notification_Console_ChatEvent;
  462. struct Notification_Console_MuteListChanged;
  463. struct Notification_Console_Local_Users_Changed;
  464. struct Notification_ReceivedDataMessageFromUser;
  465. struct Notification_Console_MemberJoinedParty;
  466. struct Notification_Console_MemberLeftParty;
  467. struct Notification_Console_Game_Started;
  468. struct Notification_Console_Game_Ending;
  469. struct Notification_Console_Game_Ended;
  470. struct Notification_Console_Got_Room_Invite;
  471. struct Notification_Console_Accepted_Room_Invite;
  472. // --------------------------------------------- Callback interface for all messages, notifies the user --------------------------------------------
  473. /// Every Lobby2Message processed with Lobby2Client::SendMsg() while connected will call the callback registered with Lobby2Client::SetCallbackInterface().
  474. /// \ingroup LOBBY_2_GROUP
  475. struct Lobby2Callbacks
  476. {
  477. Lobby2Callbacks() {callbackId=nextCallbackId++;}
  478. virtual ~Lobby2Callbacks() {}
  479. virtual void MessageResult(Platform_Startup *message);
  480. virtual void MessageResult(Platform_Shutdown *message);
  481. virtual void MessageResult(System_CreateDatabase *message);
  482. virtual void MessageResult(System_DestroyDatabase *message);
  483. virtual void MessageResult(System_CreateTitle *message);
  484. virtual void MessageResult(System_DestroyTitle *message);
  485. virtual void MessageResult(System_GetTitleRequiredAge *message);
  486. virtual void MessageResult(System_GetTitleBinaryData *message);
  487. virtual void MessageResult(System_RegisterProfanity *message);
  488. virtual void MessageResult(System_BanUser *message);
  489. virtual void MessageResult(System_UnbanUser *message);
  490. virtual void MessageResult(CDKey_Add *message);
  491. virtual void MessageResult(CDKey_GetStatus *message);
  492. virtual void MessageResult(CDKey_Use *message);
  493. virtual void MessageResult(CDKey_FlagStolen *message);
  494. virtual void MessageResult(Client_Login *message);
  495. virtual void MessageResult(Client_Logoff *message);
  496. virtual void MessageResult(Client_RegisterAccount *message);
  497. virtual void MessageResult(System_SetEmailAddressValidated *message);
  498. virtual void MessageResult(Client_ValidateHandle *message);
  499. virtual void MessageResult(System_DeleteAccount *message);
  500. virtual void MessageResult(System_PruneAccounts *message);
  501. virtual void MessageResult(Client_GetEmailAddress *message);
  502. virtual void MessageResult(Client_GetPasswordRecoveryQuestionByHandle *message);
  503. virtual void MessageResult(Client_GetPasswordByPasswordRecoveryAnswer *message);
  504. virtual void MessageResult(Client_ChangeHandle *message);
  505. virtual void MessageResult(Client_UpdateAccount *message);
  506. virtual void MessageResult(Client_GetAccountDetails *message);
  507. virtual void MessageResult(Client_StartIgnore *message);
  508. virtual void MessageResult(Client_StopIgnore *message);
  509. virtual void MessageResult(Client_GetIgnoreList *message);
  510. virtual void MessageResult(Client_PerTitleIntegerStorage *message);
  511. virtual void MessageResult(Client_PerTitleBinaryStorage *message);
  512. virtual void MessageResult(Client_SetPresence *message);
  513. virtual void MessageResult(Client_GetPresence *message);
  514. virtual void MessageResult(Friends_SendInvite *message);
  515. virtual void MessageResult(Friends_AcceptInvite *message);
  516. virtual void MessageResult(Friends_RejectInvite *message);
  517. virtual void MessageResult(Friends_GetInvites *message);
  518. virtual void MessageResult(Friends_GetFriends *message);
  519. virtual void MessageResult(Friends_Remove *message);
  520. virtual void MessageResult(BookmarkedUsers_Add *message);
  521. virtual void MessageResult(BookmarkedUsers_Remove *message);
  522. virtual void MessageResult(BookmarkedUsers_Get *message);
  523. virtual void MessageResult(Emails_Send *message);
  524. virtual void MessageResult(Emails_Get *message);
  525. virtual void MessageResult(Emails_Delete *message);
  526. virtual void MessageResult(Emails_SetStatus *message);
  527. virtual void MessageResult(Ranking_SubmitMatch *message);
  528. virtual void MessageResult(Ranking_GetMatches *message);
  529. virtual void MessageResult(Ranking_GetMatchBinaryData *message);
  530. virtual void MessageResult(Ranking_GetTotalScore *message);
  531. virtual void MessageResult(Ranking_WipeScoresForPlayer *message);
  532. virtual void MessageResult(Ranking_WipeMatches *message);
  533. virtual void MessageResult(Ranking_PruneMatches *message);
  534. virtual void MessageResult(Ranking_UpdateRating *message);
  535. virtual void MessageResult(Ranking_WipeRatings *message);
  536. virtual void MessageResult(Ranking_GetRating *message);
  537. virtual void MessageResult(Clans_Create *message);
  538. virtual void MessageResult(Clans_SetProperties *message);
  539. virtual void MessageResult(Clans_GetProperties *message);
  540. virtual void MessageResult(Clans_SetMyMemberProperties *message);
  541. virtual void MessageResult(Clans_GrantLeader *message);
  542. virtual void MessageResult(Clans_SetSubleaderStatus *message);
  543. virtual void MessageResult(Clans_SetMemberRank *message);
  544. virtual void MessageResult(Clans_GetMemberProperties *message);
  545. virtual void MessageResult(Clans_ChangeHandle *message);
  546. virtual void MessageResult(Clans_Leave *message);
  547. virtual void MessageResult(Clans_Get *message);
  548. virtual void MessageResult(Clans_SendJoinInvitation *message);
  549. virtual void MessageResult(Clans_WithdrawJoinInvitation *message);
  550. virtual void MessageResult(Clans_AcceptJoinInvitation *message);
  551. virtual void MessageResult(Clans_RejectJoinInvitation *message);
  552. virtual void MessageResult(Clans_DownloadInvitationList *message);
  553. virtual void MessageResult(Clans_SendJoinRequest *message);
  554. virtual void MessageResult(Clans_WithdrawJoinRequest *message);
  555. virtual void MessageResult(Clans_AcceptJoinRequest *message);
  556. virtual void MessageResult(Clans_RejectJoinRequest *message);
  557. virtual void MessageResult(Clans_DownloadRequestList *message);
  558. virtual void MessageResult(Clans_KickAndBlacklistUser *message);
  559. virtual void MessageResult(Clans_UnblacklistUser *message);
  560. virtual void MessageResult(Clans_GetBlacklist *message);
  561. virtual void MessageResult(Clans_GetMembers *message);
  562. virtual void MessageResult(Clans_GetList *message);
  563. virtual void MessageResult(Clans_CreateBoard *message);
  564. virtual void MessageResult(Clans_DestroyBoard *message);
  565. virtual void MessageResult(Clans_CreateNewTopic *message);
  566. virtual void MessageResult(Clans_ReplyToTopic *message);
  567. virtual void MessageResult(Clans_RemovePost *message);
  568. virtual void MessageResult(Clans_GetBoards *message);
  569. virtual void MessageResult(Clans_GetTopics *message);
  570. virtual void MessageResult(Clans_GetPosts *message);
  571. virtual void MessageResult(Console_GameBootCheck *message);
  572. virtual void MessageResult(Console_GetGameBootInviteDetails *message);
  573. virtual void MessageResult(Console_GetServerStatus *message);
  574. virtual void MessageResult(Console_GetWorldListFromServer *message);
  575. virtual void MessageResult(Console_GetLobbyListFromWorld *message);
  576. virtual void MessageResult(Console_JoinLobby *message);
  577. virtual void MessageResult(Console_LeaveLobby *message);
  578. virtual void MessageResult(Console_SendLobbyChatMessage *message);
  579. virtual void MessageResult(Console_SearchRooms *message);
  580. virtual void MessageResult(Console_GetRoomDetails *message);
  581. virtual void MessageResult(Console_GetLobbyMemberData *message);
  582. virtual void MessageResult(Console_CreateRoom *message);
  583. virtual void MessageResult(Console_SignIntoRoom *message);
  584. virtual void MessageResult(Console_SetRoomSearchProperties *message);
  585. virtual void MessageResult(Console_UpdateRoomParameters *message);
  586. virtual void MessageResult(Console_JoinRoom *message);
  587. virtual void MessageResult(Console_LeaveRoom *message);
  588. virtual void MessageResult(Console_SendLobbyInvitationToRoom *message);
  589. virtual void MessageResult(Console_SendGUIInvitationToRoom *message);
  590. virtual void MessageResult(Console_SendDataMessageToUser *message);
  591. virtual void MessageResult(Console_SendRoomChatMessage *message);
  592. virtual void MessageResult(Console_ShowFriendsUI *message);
  593. virtual void MessageResult(Console_EndGame *message);
  594. virtual void MessageResult(Console_StartGame *message);
  595. virtual void MessageResult(Console_ShowPartyUI *message);
  596. virtual void MessageResult(Console_ShowMessagesUI *message);
  597. virtual void MessageResult(Console_ShowGUIInvitationsToRooms *message);
  598. virtual void MessageResult(Console_EnableDisableRoomVoiceChat *message);
  599. virtual void MessageResult(Notification_Client_RemoteLogin *message);
  600. virtual void MessageResult(Notification_Client_IgnoreStatus *message);
  601. virtual void MessageResult(Notification_Friends_StatusChange *message);
  602. virtual void MessageResult(Notification_Friends_PresenceUpdate *message);
  603. virtual void MessageResult(Notification_User_ChangedHandle *message);
  604. virtual void MessageResult(Notification_Friends_CreatedClan *message);
  605. virtual void MessageResult(Notification_Emails_Received *message);
  606. virtual void MessageResult(Notification_Clans_GrantLeader *message);
  607. virtual void MessageResult(Notification_Clans_SetSubleaderStatus *message);
  608. virtual void MessageResult(Notification_Clans_SetMemberRank *message);
  609. virtual void MessageResult(Notification_Clans_ChangeHandle *message);
  610. virtual void MessageResult(Notification_Clans_Leave *message);
  611. virtual void MessageResult(Notification_Clans_PendingJoinStatus *message);
  612. virtual void MessageResult(Notification_Clans_NewClanMember *message);
  613. virtual void MessageResult(Notification_Clans_KickAndBlacklistUser *message);
  614. virtual void MessageResult(Notification_Clans_UnblacklistUser *message);
  615. virtual void MessageResult(Notification_Clans_Destroyed *message);
  616. virtual void MessageResult(Notification_Console_CableDisconnected *message);
  617. virtual void MessageResult(Notification_Console_ContextError *message);
  618. virtual void MessageResult(Notification_Console_MemberJoinedLobby *message);
  619. virtual void MessageResult(Notification_Console_MemberLeftLobby *message);
  620. virtual void MessageResult(Notification_Console_LobbyDestroyed *message);
  621. virtual void MessageResult(Notification_Console_LobbyMemberDataUpdated *message);
  622. virtual void MessageResult(Notification_Console_LobbyGotChatMessage *message);
  623. virtual void MessageResult(Notification_Console_LobbyGotRoomInvitation *message);
  624. virtual void MessageResult(Notification_Console_MemberJoinedRoom *message);
  625. virtual void MessageResult(Notification_Console_MemberLeftRoom *message);
  626. virtual void MessageResult(Notification_Console_KickedOutOfRoom *message);
  627. virtual void MessageResult(Notification_Console_RoomWasDestroyed *message);
  628. virtual void MessageResult(Notification_Console_UpdateRoomParameters *message);
  629. virtual void MessageResult(Notification_Console_RoomOwnerChanged *message);
  630. virtual void MessageResult(Notification_Console_RoomChatMessage *message);
  631. virtual void MessageResult(Notification_Console_RoomMessage *message);
  632. // virtual void MessageResult(Notification_Console_RoomMemberConnectivityUpdate *message);
  633. virtual void MessageResult(Notification_Console_ChatEvent *message);
  634. virtual void MessageResult(Notification_Console_MuteListChanged *message);
  635. virtual void MessageResult(Notification_Console_Local_Users_Changed *message);
  636. virtual void MessageResult(Notification_ReceivedDataMessageFromUser *message);
  637. virtual void MessageResult(Notification_Console_MemberJoinedParty *message);
  638. virtual void MessageResult(Notification_Console_MemberLeftParty *message);
  639. virtual void MessageResult(Notification_Console_Game_Started *message);
  640. virtual void MessageResult(Notification_Console_Game_Ending *message);
  641. virtual void MessageResult(Notification_Console_Game_Ended *message);
  642. virtual void MessageResult(Notification_Console_Got_Room_Invite *message);
  643. virtual void MessageResult(Notification_Console_Accepted_Room_Invite *message);
  644. virtual void ExecuteDefaultResult(Lobby2Message *message) { (void)message; }
  645. uint32_t callbackId;
  646. static uint32_t nextCallbackId;
  647. };
  648. /// Just print out the name of the message by default. This class is used in the sample.
  649. /// \ingroup LOBBY_2_GROUP
  650. struct Lobby2Printf : public Lobby2Callbacks
  651. {
  652. virtual void ExecuteDefaultResult(Lobby2Message *message) {message->DebugPrintf();}
  653. };
  654. // --------------------------------------------- Types --------------------------------------------
  655. struct BinaryDataBlock
  656. {
  657. char *binaryData;
  658. unsigned int binaryDataLength;
  659. BinaryDataBlock() {binaryData=0; binaryDataLength=0;}
  660. ~BinaryDataBlock() {
  661. if (binaryData)
  662. rakFree_Ex(binaryData, _FILE_AND_LINE_ );
  663. }
  664. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  665. };
  666. /// Used to unify different platforms for room search and search properties. Only applies if specifically used
  667. struct IndexedIntegerValue
  668. {
  669. IndexedIntegerValue() {index=0; value=0; searchOperator=-1;}
  670. IndexedIntegerValue(unsigned int idx, unsigned int val) : index(idx), value(val) {searchOperator=-1;}
  671. /// Index of the value to set, required.
  672. unsigned int index;
  673. /// Value to set
  674. unsigned int value;
  675. /// Used for room searches only, -1 means use default equals
  676. int searchOperator;
  677. };
  678. /// Used to unify different platforms for room search and search properties. Only applies if specifically used
  679. struct IndexedBinaryValue
  680. {
  681. IndexedBinaryValue() {index=0; value=0; valueByteLength=0; searchOperator=-1; type=(unsigned char)-1;}
  682. IndexedBinaryValue(unsigned int idx, char* val, unsigned short valLength) : index(idx), value(val), valueByteLength(valLength) {searchOperator=-1; type=(unsigned char)-1;}
  683. ~IndexedBinaryValue() {if (value) rakFree_Ex(value,_FILE_AND_LINE_);};
  684. /// Index of the value to set, required.
  685. unsigned int index;
  686. /// Value is deallocated in the destructor, use rakMalloc_Ex to allocate!
  687. char *value;
  688. /// Length of value
  689. unsigned short valueByteLength;
  690. /// Used for room searches only, -1 means use default equals
  691. int searchOperator;
  692. /// Used on 360 only. -1 means use default BINARY
  693. unsigned char type;
  694. };
  695. struct CreateAccountParameters
  696. {
  697. CreateAccountParameters() {ageInDays=0; binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  698. ~CreateAccountParameters() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  699. /// [in] Self-apparent
  700. RakNet::RakString firstName;
  701. /// [in] Self-apparent
  702. RakNet::RakString middleName;
  703. /// [in] Self-apparent
  704. RakNet::RakString lastName;
  705. /// [in] Self-apparent
  706. RakNet::RakString race;
  707. /// [in] Self-apparent
  708. bool sex_male;
  709. /// [in] Self-apparent
  710. RakNet::RakString homeAddress1;
  711. /// [in] Self-apparent
  712. RakNet::RakString homeAddress2;
  713. /// [in] Self-apparent
  714. RakNet::RakString homeCity;
  715. /// [in] Self-apparent
  716. RakNet::RakString homeState;
  717. /// [in] Self-apparent
  718. RakNet::RakString homeCountry;
  719. /// [in] Self-apparent
  720. RakNet::RakString homeZipCode;
  721. /// [in] Self-apparent
  722. RakNet::RakString billingAddress1;
  723. /// [in] Self-apparent
  724. RakNet::RakString billingAddress2;
  725. /// [in] Self-apparent
  726. RakNet::RakString billingCity;
  727. /// [in] Self-apparent
  728. RakNet::RakString billingState;
  729. /// [in] Self-apparent
  730. RakNet::RakString billingCountry;
  731. /// [in] Self-apparent
  732. RakNet::RakString billingZipCode;
  733. /// [in] Self-apparent
  734. RakNet::RakString emailAddress;
  735. /// [in] Self-apparent
  736. RakNet::RakString password;
  737. /// [in] If the user needs to retrieve their password; you could ask them this question.
  738. RakNet::RakString passwordRecoveryQuestion;
  739. /// [in] If the user needs to retrieve their password; you could use this for the answer.
  740. RakNet::RakString passwordRecoveryAnswer;
  741. /// [in] Lobbies often allow users to set a text description of their user in some fashion.
  742. RakNet::RakString caption1;
  743. /// [in] Lobbies often allow users to set a text description of their user in some fashion.
  744. RakNet::RakString caption2;
  745. /// [in] Self-apparent
  746. unsigned int ageInDays;
  747. /// [in] binary data
  748. RakNetSmartPtr<BinaryDataBlock> binaryData;
  749. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  750. };
  751. struct PendingInvite
  752. {
  753. PendingInvite() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  754. ~PendingInvite() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  755. RakNet::RakString sender;
  756. RakNet::RakString subject;
  757. RakNet::RakString body;
  758. RakNetSmartPtr<BinaryDataBlock> binaryData;
  759. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  760. };
  761. struct UsernameAndOnlineStatus
  762. {
  763. UsernameAndOnlineStatus();
  764. UsernameAndOnlineStatus(const UsernameAndOnlineStatus& input);
  765. ~UsernameAndOnlineStatus() {}
  766. UsernameAndOnlineStatus& operator = ( const UsernameAndOnlineStatus& input );
  767. RakNet::RakString handle;
  768. bool isOnline;
  769. uint64_t uid; // For XBOX
  770. RakNet::Lobby2Presence presence;
  771. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  772. };
  773. struct FriendInfo
  774. {
  775. FriendInfo();
  776. FriendInfo(const FriendInfo& input);
  777. FriendInfo& operator = ( const FriendInfo& input );
  778. UsernameAndOnlineStatus usernameAndStatus;
  779. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream) {usernameAndStatus.Serialize(writeToBitstream,bitStream);}
  780. };
  781. struct EmailResult
  782. {
  783. EmailResult() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  784. ~EmailResult() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  785. RakNet::RakString sender;
  786. RakNet::RakString recipient;
  787. RakNet::RakString subject;
  788. RakNet::RakString body;
  789. unsigned int status;
  790. bool wasSendByMe;
  791. bool wasReadByMe;
  792. unsigned int emailID; // Unique ID for this email, used in Emails_Delete, etc.
  793. RakNetSmartPtr<BinaryDataBlock> binaryData;
  794. RakNet::RakString creationDate;
  795. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  796. };
  797. struct MatchParticipant
  798. {
  799. MatchParticipant() {}
  800. MatchParticipant(RakNet::RakString _handle, float _score) : handle(_handle), score(_score) {}
  801. RakNet::RakString handle;
  802. float score;
  803. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  804. };
  805. struct SubmittedMatch
  806. {
  807. SubmittedMatch() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  808. ~SubmittedMatch() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  809. DataStructures::List<MatchParticipant> matchParticipants;
  810. RakNet::RakString matchNote;
  811. RakNetSmartPtr<BinaryDataBlock> binaryData;
  812. // Use EpochTimeToString to convert to a date
  813. double whenSubmittedDate;
  814. unsigned int matchID; // Unique key, Output parameter to Ranking_GetMatches
  815. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  816. };
  817. struct ClanInfo
  818. {
  819. ClanInfo() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  820. ~ClanInfo() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  821. RakNet::RakString clanName;
  822. RakNet::RakString description;
  823. RakNet::RakString clanLeader;
  824. RakNetSmartPtr<BinaryDataBlock> binaryData;
  825. DataStructures::List<RakNet::RakString> clanMembersOtherThanLeader;
  826. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  827. };
  828. struct OpenInvite
  829. {
  830. RakNet::RakString clanHandle;
  831. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  832. };
  833. struct ClanJoinRequest
  834. {
  835. RakNet::RakString targetClan;
  836. RakNet::RakString dateSent;
  837. RakNet::RakString joinRequestSender;
  838. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  839. };
  840. struct ClanJoinInvite
  841. {
  842. RakNet::RakString sourceClan;
  843. RakNet::RakString dateSent;
  844. RakNet::RakString joinRequestTarget;
  845. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  846. };
  847. struct BookmarkedUser
  848. {
  849. RakNet::RakString targetHandle;
  850. int type;
  851. RakNet::RakString description;
  852. RakNet::RakString dateWhenAdded;
  853. void Serialize(bool writeToBitstream, RakNet::BitStream *bitStream);
  854. };
  855. // --------------------------------------------- Actual body of all messages, including DB specific implementation --------------------------------------------
  856. #define __L2_MSG_BASE_IMPL(__NAME__) \
  857. virtual void CallCallback(Lobby2Callbacks *cb) {cb->MessageResult(this);}; \
  858. virtual Lobby2MessageID GetID(void) const {return (Lobby2MessageID) L2MID_##__NAME__;} \
  859. virtual const char* GetName(void) const {return #__NAME__;} \
  860. virtual void DebugMsg(RakNet::RakString &out) const {out.Set(#__NAME__ " result=%s\n", Lobby2ResultCodeDescription::ToEnglish(resultCode));};
  861. /// \brief Platform specific startup. Unused on the PC
  862. /// \ingroup LOBBY_2_COMMANDS
  863. struct Platform_Startup : public Lobby2Message
  864. {
  865. __L2_MSG_BASE_IMPL(Platform_Startup)
  866. virtual bool RequiresAdmin(void) const {return false;}
  867. virtual bool RequiresRankingPermission(void) const {return false;}
  868. virtual bool CancelOnDisconnect(void) const {return false;}
  869. virtual bool RequiresLogin(void) const {return false;}
  870. virtual bool PrevalidateInput(void) {return true;}
  871. virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle ) { (void)server; (void)userHandle; return true; }
  872. };
  873. /// \brief Platform specific startup. Unused on the PC
  874. /// \ingroup LOBBY_2_COMMANDS
  875. struct Platform_Shutdown : public Lobby2Message
  876. {
  877. __L2_MSG_BASE_IMPL(Platform_Shutdown)
  878. virtual bool RequiresAdmin(void) const {return false;}
  879. virtual bool RequiresRankingPermission(void) const {return false;}
  880. virtual bool CancelOnDisconnect(void) const {return false;}
  881. virtual bool RequiresLogin(void) const {return false;}
  882. virtual bool PrevalidateInput(void) {return true;}
  883. virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle ) { (void)server; (void)userHandle; return true; }
  884. };
  885. /// \brief Create all tables and stored procedures on a system that does not already have them
  886. /// \ingroup LOBBY_2_COMMANDS
  887. struct System_CreateDatabase : public Lobby2Message
  888. {
  889. __L2_MSG_BASE_IMPL(System_CreateDatabase)
  890. virtual bool RequiresAdmin(void) const {return true;}
  891. virtual bool RequiresRankingPermission(void) const {return false;}
  892. virtual bool CancelOnDisconnect(void) const {return false;}
  893. virtual bool RequiresLogin(void) const {return false;}
  894. virtual bool PrevalidateInput(void) {return true;}
  895. };
  896. /// \brief Destroy all tables and stored procedures created with System_CreateDatabase
  897. /// \ingroup LOBBY_2_COMMANDS
  898. struct System_DestroyDatabase : public Lobby2Message
  899. {
  900. __L2_MSG_BASE_IMPL(System_DestroyDatabase)
  901. virtual bool RequiresAdmin(void) const {return true;}
  902. virtual bool RequiresRankingPermission(void) const {return false;}
  903. virtual bool CancelOnDisconnect(void) const {return false;}
  904. virtual bool RequiresLogin(void) const {return false;}
  905. virtual bool PrevalidateInput(void) {return true;}
  906. };
  907. /// \brief Each title essentially corresponds to a game. For example, the same lobby system may be used for both asteroids and Pac-man. When logging in, and for some functions, it is necessary to specify which title you are logging in under. This way users playing asteroids do not interact with users playing pac-man, where such interations are game specific (such as ranking).
  908. /// \ingroup LOBBY_2_COMMANDS
  909. struct System_CreateTitle : public Lobby2Message
  910. {
  911. System_CreateTitle() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  912. ~System_CreateTitle() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  913. __L2_MSG_BASE_IMPL(System_CreateTitle)
  914. virtual bool RequiresAdmin(void) const {return true;}
  915. virtual bool RequiresRankingPermission(void) const {return false;}
  916. virtual bool CancelOnDisconnect(void) const {return false;}
  917. virtual bool RequiresLogin(void) const {return false;}
  918. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  919. virtual bool PrevalidateInput(void);
  920. // Input parameters
  921. RakNet::RakString titleName;
  922. RakNet::RakString titleSecretKey;
  923. int requiredAge;
  924. RakNetSmartPtr<BinaryDataBlock> binaryData;
  925. };
  926. /// \brief Destroy a previously added title
  927. /// \ingroup LOBBY_2_COMMANDS
  928. struct System_DestroyTitle : public Lobby2Message
  929. {
  930. __L2_MSG_BASE_IMPL(System_DestroyTitle)
  931. virtual bool RequiresAdmin(void) const {return true;}
  932. virtual bool RequiresRankingPermission(void) const {return false;}
  933. virtual bool CancelOnDisconnect(void) const {return false;}
  934. virtual bool RequiresLogin(void) const {return false;}
  935. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  936. virtual bool PrevalidateInput(void) {return true;}
  937. // Input parameters
  938. RakNet::RakString titleName;
  939. };
  940. /// \brief Get the required age set with System_CreateTitle
  941. /// \ingroup LOBBY_2_COMMANDS
  942. struct System_GetTitleRequiredAge : public Lobby2Message
  943. {
  944. __L2_MSG_BASE_IMPL(System_GetTitleRequiredAge)
  945. virtual bool RequiresAdmin(void) const {return false;}
  946. virtual bool RequiresRankingPermission(void) const {return false;}
  947. virtual bool CancelOnDisconnect(void) const {return true;}
  948. virtual bool RequiresLogin(void) const {return false;}
  949. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  950. virtual bool PrevalidateInput(void) {return true;}
  951. // Input parameters
  952. RakNet::RakString titleName;
  953. // Output parameters
  954. int requiredAge;
  955. };
  956. /// \brief Get the binary data set with System_CreateTitle
  957. /// \ingroup LOBBY_2_COMMANDS
  958. struct System_GetTitleBinaryData : public Lobby2Message
  959. {
  960. System_GetTitleBinaryData() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  961. ~System_GetTitleBinaryData() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  962. __L2_MSG_BASE_IMPL(System_GetTitleBinaryData)
  963. virtual bool RequiresAdmin(void) const {return false;}
  964. virtual bool RequiresRankingPermission(void) const {return false;}
  965. virtual bool CancelOnDisconnect(void) const {return true;}
  966. virtual bool RequiresLogin(void) const {return false;}
  967. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  968. virtual bool PrevalidateInput(void) {return true;}
  969. // Input parameters
  970. RakNet::RakString titleName;
  971. // Output parameters
  972. RakNetSmartPtr<BinaryDataBlock> binaryData;
  973. };
  974. /// \brief Adds the input strings to a table of profanity. non-unique or empty strings can be ignored. This table will be used internally to ensure that handles and clan names do not contain profanity. Multiple calls add to the table. This table will be used for functions that take a user-defined string that is highly visible, such as clan and user names. It does not need to be checked for emails or message boards.
  975. /// \ingroup LOBBY_2_COMMANDS
  976. struct System_RegisterProfanity : public Lobby2Message
  977. {
  978. __L2_MSG_BASE_IMPL(System_RegisterProfanity)
  979. virtual bool RequiresAdmin(void) const {return true;}
  980. virtual bool RequiresRankingPermission(void) const {return false;}
  981. virtual bool CancelOnDisconnect(void) const {return false;}
  982. virtual bool RequiresLogin(void) const {return false;}
  983. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  984. virtual bool PrevalidateInput(void)
  985. {
  986. for (unsigned int i=0; i < profanityWords.Size(); i++)
  987. {
  988. if (profanityWords[i].IsEmpty())
  989. {
  990. resultCode=L2RC_System_RegisterProfanity_CANNOT_REGISTER_EMPTY_STRINGS;
  991. return false;
  992. }
  993. }
  994. return true;
  995. }
  996. // Input parameters
  997. DataStructures::List<RakNet::RakString> profanityWords;
  998. // Output parameters
  999. };
  1000. /// \brief Bans a specific user (will be most likely called by a moderator). Adds the user's primary key to a ban table, along with the name of the moderator, the reason for the ban. Banning is used to prevent the banned user from logging on for some specified duration. A date column should be present and automatically filled in. When bans are expired, the ban can be deleted from the database. However, a separate table should log bans, so that even expired bans can be looked up in case.
  1001. /// \ingroup LOBBY_2_COMMANDS
  1002. struct System_BanUser : public Lobby2Message
  1003. {
  1004. __L2_MSG_BASE_IMPL(System_BanUser)
  1005. virtual bool RequiresAdmin(void) const {return true;}
  1006. virtual bool RequiresRankingPermission(void) const {return false;}
  1007. virtual bool CancelOnDisconnect(void) const {return false;}
  1008. virtual bool RequiresLogin(void) const {return false;}
  1009. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1010. virtual bool PrevalidateInput(void);
  1011. // Input parameters
  1012. RakNet::RakString banReason;
  1013. unsigned int durationHours;
  1014. RakNet::RakString userName;
  1015. // Output parameters
  1016. };
  1017. /// \brief Unban a user banned with System_BanUser
  1018. /// \ingroup LOBBY_2_COMMANDS
  1019. struct System_UnbanUser : public Lobby2Message
  1020. {
  1021. __L2_MSG_BASE_IMPL(System_UnbanUser)
  1022. virtual bool RequiresAdmin(void) const {return true;}
  1023. virtual bool RequiresRankingPermission(void) const {return false;}
  1024. virtual bool CancelOnDisconnect(void) const {return false;}
  1025. virtual bool RequiresLogin(void) const {return false;}
  1026. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1027. virtual bool PrevalidateInput(void);
  1028. // Input parameters
  1029. RakNet::RakString reason;
  1030. RakNet::RakString userName;
  1031. };
  1032. /// \brief Adds CDKeys to the database. Duplicate CDKeys for a particular title are ignored. CDKeys can be identical for different titles.
  1033. /// \ingroup LOBBY_2_COMMANDS
  1034. struct CDKey_Add : public Lobby2Message
  1035. {
  1036. __L2_MSG_BASE_IMPL(CDKey_Add)
  1037. virtual bool RequiresAdmin(void) const {return true;}
  1038. virtual bool RequiresRankingPermission(void) const {return false;}
  1039. virtual bool CancelOnDisconnect(void) const {return false;}
  1040. virtual bool RequiresLogin(void) const {return false;}
  1041. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1042. virtual bool PrevalidateInput(void);
  1043. // Input parameters
  1044. DataStructures::List<RakNet::RakString> cdKeys;
  1045. RakNet::RakString titleName;
  1046. // Output parameters
  1047. };
  1048. /// \brief Returns if a CD key was previously added with AddCDKey.
  1049. /// \ingroup LOBBY_2_COMMANDS
  1050. struct CDKey_GetStatus : public Lobby2Message
  1051. {
  1052. __L2_MSG_BASE_IMPL(CDKey_GetStatus)
  1053. virtual bool RequiresAdmin(void) const {return true;}
  1054. virtual bool RequiresRankingPermission(void) const {return false;}
  1055. virtual bool CancelOnDisconnect(void) const {return true;}
  1056. virtual bool RequiresLogin(void) const {return false;}
  1057. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1058. virtual bool PrevalidateInput(void);
  1059. // Input parameters
  1060. RakNet::RakString cdKey;
  1061. RakNet::RakString titleName;
  1062. // Output parameters
  1063. bool usable;
  1064. RakNet::RakString usedBy;
  1065. RakNet::RakString activationDate;
  1066. bool wasStolen;
  1067. };
  1068. /// \brief Associates a cd key with a user, such that the cd key cannot be used again. If Client_Login() is called with check cd key as true, then this table will be checked to make sure UserCDKey() was previously called with this user and a valid key. If this user is already associated with a CD Key, add the new key, and use the most recent key. All CD Key usage should be logged in a separate table, including the date used and result.
  1069. /// \ingroup LOBBY_2_COMMANDS
  1070. struct CDKey_Use : public Lobby2Message
  1071. {
  1072. __L2_MSG_BASE_IMPL(CDKey_Use)
  1073. virtual bool RequiresAdmin(void) const {return true;}
  1074. virtual bool RequiresRankingPermission(void) const {return false;}
  1075. virtual bool CancelOnDisconnect(void) const {return false;}
  1076. virtual bool RequiresLogin(void) const {return false;}
  1077. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1078. virtual bool PrevalidateInput(void);
  1079. // Input parameters
  1080. RakNet::RakString cdKey;
  1081. RakNet::RakString titleName;
  1082. RakNet::RakString userName;
  1083. // Output parameters
  1084. };
  1085. /// \brief Flags one or more CD keys as stolen. Stolen CD keys will prevent Client_Login() if check cd key is true. They will also prevent these cd keys from being used with CDKey_Use. If this key is already in use by certain users for this particular title, then log this similarly to how CDKey_Use does so.
  1086. /// \ingroup LOBBY_2_COMMANDS
  1087. struct CDKey_FlagStolen : public Lobby2Message
  1088. {
  1089. __L2_MSG_BASE_IMPL(CDKey_FlagStolen)
  1090. virtual bool RequiresAdmin(void) const {return true;}
  1091. virtual bool RequiresRankingPermission(void) const {return false;}
  1092. virtual bool CancelOnDisconnect(void) const {return false;}
  1093. virtual bool RequiresLogin(void) const {return false;}
  1094. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1095. virtual bool PrevalidateInput(void);
  1096. // Input parameters
  1097. RakNet::RakString cdKey;
  1098. RakNet::RakString titleName;
  1099. bool wasStolen;
  1100. // Output parameters
  1101. RakNet::RakString userUsingThisKey;
  1102. };
  1103. /// \brief Logon with a previously registered account
  1104. /// \details Once a client creates an account with Client_RegisterAccount, the client is able to logon. The login process will check
  1105. /// <OL>
  1106. /// <LI>The CDKey associated with this user (See CDKey_Use) if checkCDKey is true
  1107. /// <LI>The userPassword passed to this function
  1108. /// <LI>The titleName and titleSecretKey, to ensure this title was previously created with System_CreateTitle
  1109. /// <LI>If allowLoginWithoutEmailAddressValidation==false for this user (See Client_RegisterAccount) and System_SetEmailAddressValidated was not called for that email address, fail.
  1110. /// <LI>If this user was banned with a ban still in effect via System_BanUser
  1111. /// </OL>
  1112. /// If all checks pass, store in a logging table that the user has logged in at this time. No status flag needs be set, this will be done in C++.
  1113. /// \ingroup LOBBY_2_COMMANDS
  1114. struct Client_Login : public Lobby2Message
  1115. {
  1116. __L2_MSG_BASE_IMPL(Client_Login)
  1117. Client_Login() {allowMultipleLogins=false;}
  1118. virtual ~Client_Login() {}
  1119. virtual bool RequiresAdmin(void) const {return false;}
  1120. virtual bool RequiresRankingPermission(void) const {return false;}
  1121. virtual bool CancelOnDisconnect(void) const {return true;}
  1122. virtual bool RequiresLogin(void) const {return false;}
  1123. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1124. virtual bool PrevalidateInput(void);
  1125. // Input parameters
  1126. RakNet::RakString userPassword;
  1127. bool allowMultipleLogins; // PC only, allow login with the same username from multiple computers at once
  1128. // Used if check
  1129. RakNet::RakString titleName;
  1130. RakNet::RakString titleSecretKey;
  1131. RakNet::RakString userName;
  1132. // Output parameters
  1133. RakNet::RakString bannedReason;
  1134. RakNet::RakString whenBanned;
  1135. RakNet::RakString bannedExpiration;
  1136. };
  1137. /// \brief Logoff, after logging in
  1138. /// \ingroup LOBBY_2_COMMANDS
  1139. struct Client_Logoff : public Lobby2Message
  1140. {
  1141. __L2_MSG_BASE_IMPL(Client_Logoff)
  1142. virtual bool RequiresAdmin(void) const {return false;}
  1143. virtual bool RequiresRankingPermission(void) const {return false;}
  1144. virtual bool CancelOnDisconnect(void) const {return false;}
  1145. virtual bool RequiresLogin(void) const {return true;}
  1146. };
  1147. /// \brief This creates a new account in the database, which can be used in a subsequent call to Login. Most parameters are optional. handle is not optional, and must be unique using case-insensitive compare. emailAddress should be validated to have a sensible format, including an @ sign and a period with a 3 letter extension. allowLoginWithoutEmailAddressValidation is used in Client_Login to potentially disallow logon attempts with unverified email addresses.
  1148. /// \ingroup LOBBY_2_COMMANDS
  1149. struct Client_RegisterAccount : public Lobby2Message
  1150. {
  1151. __L2_MSG_BASE_IMPL(Client_RegisterAccount)
  1152. virtual bool RequiresAdmin(void) const {return false;}
  1153. virtual bool RequiresRankingPermission(void) const {return false;}
  1154. virtual bool CancelOnDisconnect(void) const {return false;}
  1155. virtual bool RequiresLogin(void) const {return false;}
  1156. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1157. virtual bool PrevalidateInput(void);
  1158. // Input parameters
  1159. CreateAccountParameters createAccountParameters;
  1160. // Only used if registration requires a CD key
  1161. RakNet::RakString cdKey;
  1162. RakNet::RakString titleName;
  1163. RakNet::RakString userName;
  1164. // Output parameters
  1165. };
  1166. /// \brief For the client with the given handle, mark a column emailAddressValidated as true or false as appropriate. This is potentially used in Client_Login
  1167. /// \ingroup LOBBY_2_COMMANDS
  1168. struct System_SetEmailAddressValidated : public Lobby2Message
  1169. {
  1170. __L2_MSG_BASE_IMPL(System_SetEmailAddressValidated)
  1171. virtual bool RequiresAdmin(void) const {return true;}
  1172. virtual bool RequiresRankingPermission(void) const {return false;}
  1173. virtual bool CancelOnDisconnect(void) const {return false;}
  1174. virtual bool RequiresLogin(void) const {return false;}
  1175. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1176. virtual bool PrevalidateInput(void);
  1177. // Input parameters
  1178. bool validated;
  1179. RakNet::RakString userName;
  1180. // Output parameters
  1181. };
  1182. /// \brief Looks up in the database if this handle is already in use, subject to the usual constraints of handles. This will be used by the user to quickly check for available handles.
  1183. /// \ingroup LOBBY_2_COMMANDS
  1184. struct Client_ValidateHandle : public Lobby2Message
  1185. {
  1186. __L2_MSG_BASE_IMPL(Client_ValidateHandle)
  1187. virtual bool RequiresAdmin(void) const {return false;}
  1188. virtual bool RequiresRankingPermission(void) const {return false;}
  1189. virtual bool CancelOnDisconnect(void) const {return true;}
  1190. virtual bool RequiresLogin(void) const {return false;}
  1191. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1192. virtual bool PrevalidateInput(void);
  1193. RakNet::RakString userName;
  1194. };
  1195. /// \brief Flags as deleted an account registered with RegisterAccount. Accounts are not actually deleted, only tagged as deleted.
  1196. /// \ingroup LOBBY_2_COMMANDS
  1197. struct System_DeleteAccount : public Lobby2Message
  1198. {
  1199. __L2_MSG_BASE_IMPL(System_DeleteAccount)
  1200. virtual bool RequiresAdmin(void) const {return true;}
  1201. virtual bool RequiresRankingPermission(void) const {return false;}
  1202. virtual bool CancelOnDisconnect(void) const {return false;}
  1203. virtual bool RequiresLogin(void) const {return false;}
  1204. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1205. virtual bool PrevalidateInput(void);
  1206. // Input parameters
  1207. RakNet::RakString userName;
  1208. RakNet::RakString password;
  1209. };
  1210. /// \brief Unused accounts are deleted. This is cascading, such that emails and other tables that reference this key are also deleted. unused accounts are defined as:
  1211. /// \details
  1212. /// <OL>
  1213. /// <LI>Deleted accounts over deletedPruneTime seconds old
  1214. /// <LI>Accounts which have not been logged into for over loggedInPruneTime seconds
  1215. /// <\OL>
  1216. /// \ingroup LOBBY_2_COMMANDS
  1217. struct System_PruneAccounts : public Lobby2Message
  1218. {
  1219. __L2_MSG_BASE_IMPL(System_PruneAccounts)
  1220. virtual bool RequiresAdmin(void) const {return true;}
  1221. virtual bool RequiresRankingPermission(void) const {return false;}
  1222. virtual bool CancelOnDisconnect(void) const {return false;}
  1223. virtual bool RequiresLogin(void) const {return false;}
  1224. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1225. virtual bool PrevalidateInput(void);
  1226. // Input parameters
  1227. unsigned int deleteAccountsNotLoggedInDays;
  1228. // Output parameters
  1229. };
  1230. /// \brief Returns the email address associated with a specific handle, invalid handle. This is used for password recovery.
  1231. /// \ingroup LOBBY_2_COMMANDS
  1232. struct Client_GetEmailAddress : public Lobby2Message
  1233. {
  1234. __L2_MSG_BASE_IMPL(Client_GetEmailAddress)
  1235. virtual bool RequiresAdmin(void) const {return false;}
  1236. virtual bool RequiresRankingPermission(void) const {return false;}
  1237. virtual bool CancelOnDisconnect(void) const {return true;}
  1238. virtual bool RequiresLogin(void) const {return false;}
  1239. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1240. virtual bool PrevalidateInput(void);
  1241. // Input parameters
  1242. RakNet::RakString userName;
  1243. // Output parameters
  1244. RakNet::RakString emailAddress;
  1245. bool emailAddressValidated;
  1246. };
  1247. /// \brief Returns the passwordRecoveryQuestion associated with handle, invalid handle
  1248. /// \ingroup LOBBY_2_COMMANDS
  1249. struct Client_GetPasswordRecoveryQuestionByHandle : public Lobby2Message
  1250. {
  1251. __L2_MSG_BASE_IMPL(Client_GetPasswordRecoveryQuestionByHandle)
  1252. virtual bool RequiresAdmin(void) const {return false;}virtual bool RequiresRankingPermission(void) const {return false;}
  1253. virtual bool CancelOnDisconnect(void) const {return true;}
  1254. virtual bool RequiresLogin(void) const {return false;}
  1255. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1256. virtual bool PrevalidateInput(void);
  1257. // Input/output parameters
  1258. RakNet::RakString userName;
  1259. // Output parameters
  1260. RakNet::RakString emailAddress;
  1261. RakNet::RakString passwordRecoveryQuestion;
  1262. };
  1263. /// \brief Returns the password associated with a handle, if the passwordRecoveryAnswer is correct
  1264. /// \ingroup LOBBY_2_COMMANDS
  1265. struct Client_GetPasswordByPasswordRecoveryAnswer : public Lobby2Message
  1266. {
  1267. __L2_MSG_BASE_IMPL(Client_GetPasswordByPasswordRecoveryAnswer)
  1268. virtual bool RequiresAdmin(void) const {return false;}
  1269. virtual bool RequiresRankingPermission(void) const {return false;}
  1270. virtual bool CancelOnDisconnect(void) const {return true;}
  1271. virtual bool RequiresLogin(void) const {return false;}
  1272. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1273. virtual bool PrevalidateInput(void);
  1274. // Input parameters
  1275. RakNet::RakString userName;
  1276. RakNet::RakString passwordRecoveryAnswer;
  1277. // Output parameters
  1278. RakNet::RakString password;
  1279. };
  1280. /// \brief Changes the handle for a user.
  1281. /// \ingroup LOBBY_2_COMMANDS
  1282. struct Client_ChangeHandle : public Lobby2Message
  1283. {
  1284. __L2_MSG_BASE_IMPL(Client_ChangeHandle)
  1285. Client_ChangeHandle() {requiresPasswordToChangeHandle=false;}
  1286. virtual bool RequiresAdmin(void) const {return false;}
  1287. virtual bool RequiresRankingPermission(void) const {return false;}
  1288. virtual bool CancelOnDisconnect(void) const {return false;}
  1289. virtual bool RequiresLogin(void) const {return false;}
  1290. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1291. virtual bool PrevalidateInput(void);
  1292. // Input parameters
  1293. RakNet::RakString userName;
  1294. bool requiresPasswordToChangeHandle;
  1295. RakNet::RakString password;
  1296. RakNet::RakString newHandle;
  1297. // Output parameters
  1298. };
  1299. /// \brief Will update any or all of the inputs that were previously passed to Client_RegisterAccount, except handle.
  1300. /// \details For input parameters, see Client_RegisterAccount() createAccountParameters
  1301. /// \ingroup LOBBY_2_COMMANDS
  1302. struct Client_UpdateAccount : public Lobby2Message
  1303. {
  1304. __L2_MSG_BASE_IMPL(Client_UpdateAccount)
  1305. virtual bool RequiresAdmin(void) const {return false;}
  1306. virtual bool RequiresRankingPermission(void) const {return false;}
  1307. virtual bool CancelOnDisconnect(void) const {return false;}
  1308. virtual bool RequiresLogin(void) const {return true;}
  1309. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1310. virtual bool PrevalidateInput(void);
  1311. // Input parameters
  1312. CreateAccountParameters createAccountParameters;
  1313. // Output parameters
  1314. };
  1315. /// \brief Get the parameters set with Client_RegisterAccount
  1316. /// \ingroup LOBBY_2_COMMANDS
  1317. struct Client_GetAccountDetails : public Lobby2Message
  1318. {
  1319. __L2_MSG_BASE_IMPL(Client_GetAccountDetails)
  1320. virtual bool RequiresAdmin(void) const {return false;}
  1321. virtual bool RequiresRankingPermission(void) const {return false;}
  1322. virtual bool CancelOnDisconnect(void) const {return false;}
  1323. virtual bool RequiresLogin(void) const {return true;}
  1324. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1325. // Input parameters
  1326. // Output parameters
  1327. CreateAccountParameters createAccountParameters;
  1328. };
  1329. /// \brief Adds the specified user to an ignore list for my user. Recommended to store the primary key of the remote user, both for speed and so if the other use changes their handle it still works. The ignore list is checked for friend invites, emails, and elsewhere where indicated. Ignoring is uni-directional, so if A ignores B, A will block messages from B where appropriate, but B will not immediately block messages from A.
  1330. /// \ingroup LOBBY_2_COMMANDS
  1331. struct Client_StartIgnore : public Lobby2Message
  1332. {
  1333. __L2_MSG_BASE_IMPL(Client_StartIgnore)
  1334. virtual bool RequiresAdmin(void) const {return false;}
  1335. virtual bool RequiresRankingPermission(void) const {return false;}
  1336. virtual bool CancelOnDisconnect(void) const {return false;}
  1337. virtual bool RequiresLogin(void) const {return true;}
  1338. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1339. virtual bool PrevalidateInput(void);
  1340. virtual bool ClientImpl( RakNet::Lobby2Plugin *client);
  1341. // Input parameters
  1342. RakNet::RakString targetHandle;
  1343. // Output parameters
  1344. };
  1345. /// \brief Removes an entry in the database such that myHandle will no longer ignore theirHandle.
  1346. /// \ingroup LOBBY_2_COMMANDS
  1347. struct Client_StopIgnore : public Lobby2Message
  1348. {
  1349. __L2_MSG_BASE_IMPL(Client_StopIgnore)
  1350. virtual bool RequiresAdmin(void) const {return false;}
  1351. virtual bool RequiresRankingPermission(void) const {return false;}
  1352. virtual bool CancelOnDisconnect(void) const {return false;}
  1353. virtual bool RequiresLogin(void) const {return true;}
  1354. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1355. virtual bool PrevalidateInput(void);
  1356. virtual bool ClientImpl( RakNet::Lobby2Plugin *client);
  1357. // Input parameters
  1358. RakNet::RakString targetHandle;
  1359. // Output parameters
  1360. };
  1361. /// \brief Returns all users I have ignored
  1362. /// \ingroup LOBBY_2_COMMANDS
  1363. struct Client_GetIgnoreList : public Lobby2Message
  1364. {
  1365. __L2_MSG_BASE_IMPL(Client_GetIgnoreList)
  1366. virtual bool RequiresAdmin(void) const {return false;}
  1367. virtual bool RequiresRankingPermission(void) const {return false;}
  1368. virtual bool CancelOnDisconnect(void) const {return true;}
  1369. virtual bool RequiresLogin(void) const {return true;}
  1370. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1371. virtual bool ClientImpl( RakNet::Lobby2Plugin *client);
  1372. // Input parameters
  1373. // Output parameters
  1374. DataStructures::List<RakNet::RakString> ignoredHandles;
  1375. };
  1376. struct Client_PerTitleIntegerStorage : public Lobby2Message
  1377. {
  1378. __L2_MSG_BASE_IMPL(Client_PerTitleIntegerStorage)
  1379. virtual bool RequiresAdmin(void) const {return false;}
  1380. virtual bool RequiresRankingPermission(void) const {return false;}
  1381. virtual bool CancelOnDisconnect(void) const {return false;}
  1382. virtual bool RequiresLogin(void) const {return true;}
  1383. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1384. virtual bool PrevalidateInput(void);
  1385. /// [in] Name of a created title
  1386. RakNet::RakString titleName;
  1387. /// [in] Slot index can be any value, and just lets you store more than one 64 bit integer
  1388. unsigned int slotIndex;
  1389. /// [in] Compared against the current value
  1390. double conditionValue;
  1391. /// [in] How conditionValue is compared against the conditional value
  1392. /// Used for PTISO_ADD only
  1393. enum PTIS_Condition
  1394. {
  1395. PTISC_EQUAL,
  1396. PTISC_NOT_EQUAL,
  1397. PTISC_GREATER_THAN,
  1398. PTISC_GREATER_OR_EQUAL,
  1399. PTISC_LESS_THAN,
  1400. PTISC_LESS_OR_EQUAL,
  1401. } addConditionForOperation;
  1402. /// [in] What value is written (used for PTISO_WRITE and PTISO_ADD only)
  1403. double inputValue;
  1404. /// [in] What to do. Write will overwrite the existing value with inputValue
  1405. /// Read will return the existing value in outputValue
  1406. /// Delete will delete the entry, if it exists
  1407. /// Add will add inputValue to the current value.
  1408. enum PTIS_Operation
  1409. {
  1410. PTISO_WRITE,
  1411. PTISO_READ,
  1412. PTISO_DELETE,
  1413. PTISO_ADD,
  1414. } operationToPerform;
  1415. /// [out] On return, new value is returned in outputValue
  1416. /// For write, it will be the same as inputValue
  1417. /// For read, it will be the current value (or 0, if the row does not exist)
  1418. /// For delete, it is undefined
  1419. /// For add, it is inputValue plus the existing value. If no existing value, 0 is used as the existing value.
  1420. double outputValue;
  1421. };
  1422. /// \brief For each combination of user and title, structures can be stored
  1423. /// \ingroup LOBBY_2_COMMANDS
  1424. struct Client_PerTitleBinaryStorage : public Lobby2Message
  1425. {
  1426. __L2_MSG_BASE_IMPL(Client_PerTitleBinaryStorage)
  1427. Client_PerTitleBinaryStorage() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1428. ~Client_PerTitleBinaryStorage() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1429. virtual bool RequiresAdmin(void) const {return false;}
  1430. virtual bool RequiresRankingPermission(void) const {return false;}
  1431. virtual bool CancelOnDisconnect(void) const {return false;}
  1432. virtual bool RequiresLogin(void) const {return true;}
  1433. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1434. virtual bool PrevalidateInput(void);
  1435. /// [in] Name of a created title
  1436. RakNet::RakString titleName;
  1437. /// [in] Slot index can be any value, and just lets you store more than one 64 bit integer
  1438. unsigned int slotIndex;
  1439. /// [in/out] Binary data. On Write, will be written to the row. On Read, will be filled in with the value of the row. Unused for delete
  1440. /// Max length of binaryData is 256K
  1441. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1442. /// [in] What to do. Write will overwrite the existing value with binaryData
  1443. /// Read will return the existing value in binaryData
  1444. enum PTIS_Operation
  1445. {
  1446. PTISO_WRITE,
  1447. PTISO_READ,
  1448. PTISO_DELETE,
  1449. } operationToPerform;
  1450. };
  1451. /// \brief Sets in-memory information about your login state, such as which game you are playing, or if you are playing a game
  1452. /// Online friends will be notified when you presence changes
  1453. /// For the XBOX, just use XUserSetProperty and XUserSetContext directly, as there is no analogue to this function
  1454. struct Client_SetPresence : public Lobby2Message
  1455. {
  1456. __L2_MSG_BASE_IMPL(Client_SetPresence)
  1457. virtual bool RequiresAdmin(void) const {return false;}
  1458. virtual bool RequiresRankingPermission(void) const {return false;}
  1459. virtual bool CancelOnDisconnect(void) const {return true;}
  1460. virtual bool RequiresLogin(void) const {return true;}
  1461. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1462. // virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  1463. /// \param[in] Presence info to set.
  1464. RakNet::Lobby2Presence presence;
  1465. };
  1466. /// \brief Gets in-memory information about a user's login state, such as which game they are playing, or if they are playing a game
  1467. /// This can also be a quick way to query if a user is logged in or not. If they are not logged in, \a presence will be set to Lobby2Presence::NOT_ONLINE
  1468. struct Client_GetPresence : public Lobby2Message
  1469. {
  1470. __L2_MSG_BASE_IMPL(Client_GetPresence)
  1471. virtual bool RequiresAdmin(void) const {return false;}
  1472. virtual bool RequiresRankingPermission(void) const {return false;}
  1473. virtual bool CancelOnDisconnect(void) const {return true;}
  1474. virtual bool RequiresLogin(void) const {return false;}
  1475. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1476. // virtual bool ServerPreDBMemoryImpl( Lobby2Server *server, RakString userHandle );
  1477. /// \param[in] Which user we are looking up ( can be ourselves )
  1478. RakNet::RakString userHandle;
  1479. /// \param[out] Presence info to set.
  1480. RakNet::Lobby2Presence presence;
  1481. };
  1482. /// \brief Stores in the database an add friend invite from my handle to their handle. The combination of my handle and their handle must be unique, so you cannot send more than one add friend invite to a single user. Sends an email to their handle the subject, body, and binary data. Note: if myHandle is ignored by theirHandle, then the function fails. See Client_StartIgnore.
  1483. /// \ingroup LOBBY_2_COMMANDS
  1484. struct Friends_SendInvite : public Lobby2Message
  1485. {
  1486. Friends_SendInvite() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1487. ~Friends_SendInvite() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1488. __L2_MSG_BASE_IMPL(Friends_SendInvite)
  1489. virtual bool RequiresAdmin(void) const {return false;}
  1490. virtual bool RequiresRankingPermission(void) const {return false;}
  1491. virtual bool CancelOnDisconnect(void) const {return false;}
  1492. virtual bool RequiresLogin(void) const {return true;}
  1493. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1494. virtual bool PrevalidateInput(void);
  1495. // Input parameters
  1496. RakNet::RakString targetHandle;
  1497. RakNet::RakString subject;
  1498. RakNet::RakString body;
  1499. int emailStatus;
  1500. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1501. // Output parameters
  1502. };
  1503. /// \brief Stores in the database that this user is now my friend. This is bidirectional, which is to say if someone accepts an add friend invite, they are my friend, and I am their friend. Recommended to store by primary key for speed and in case the friend's handle changes. Store in the emails table from my handle to their handle the subject, body, and binary data. Note: if myHandle is ignored by theirHandle, then the function fails. See AddToIgnoreList.
  1504. /// \ingroup LOBBY_2_COMMANDS
  1505. struct Friends_AcceptInvite : public Lobby2Message
  1506. {
  1507. Friends_AcceptInvite() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1508. ~Friends_AcceptInvite() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1509. __L2_MSG_BASE_IMPL(Friends_AcceptInvite)
  1510. virtual bool RequiresAdmin(void) const {return false;}
  1511. virtual bool RequiresRankingPermission(void) const {return false;}
  1512. virtual bool CancelOnDisconnect(void) const {return false;}
  1513. virtual bool RequiresLogin(void) const {return true;}
  1514. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1515. virtual bool PrevalidateInput(void);
  1516. // Input parameters
  1517. RakNet::RakString targetHandle;
  1518. RakNet::RakString subject;
  1519. RakNet::RakString body;
  1520. int emailStatus;
  1521. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1522. // Output parameters
  1523. // Your new buddy's presence status
  1524. RakNet::Lobby2Presence presence;
  1525. };
  1526. /// \brief Removes from the database the pending add friend invite. Operation completes even if ignored. Unless ignored, store in the emails table from my handle to their handle the subject, body, binary data, and procedure type flag.
  1527. /// \ingroup LOBBY_2_COMMANDS
  1528. struct Friends_RejectInvite : public Lobby2Message
  1529. {
  1530. __L2_MSG_BASE_IMPL(Friends_RejectInvite)
  1531. Friends_RejectInvite() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1532. ~Friends_RejectInvite() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1533. virtual bool RequiresAdmin(void) const {return false;}
  1534. virtual bool RequiresRankingPermission(void) const {return false;}
  1535. virtual bool CancelOnDisconnect(void) const {return false;}
  1536. virtual bool RequiresLogin(void) const {return true;}
  1537. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1538. virtual bool PrevalidateInput(void);
  1539. // Input parameters
  1540. RakNet::RakString targetHandle;
  1541. RakNet::RakString subject;
  1542. RakNet::RakString body;
  1543. int emailStatus;
  1544. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1545. // Output parameters
  1546. };
  1547. /// \brief Returns all invites for this user
  1548. /// \ingroup LOBBY_2_COMMANDS
  1549. struct Friends_GetInvites : public Lobby2Message
  1550. {
  1551. __L2_MSG_BASE_IMPL(Friends_GetInvites)
  1552. virtual bool RequiresAdmin(void) const {return false;}
  1553. virtual bool RequiresRankingPermission(void) const {return false;}
  1554. virtual bool CancelOnDisconnect(void) const {return true;}
  1555. virtual bool RequiresLogin(void) const {return true;}
  1556. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1557. // Input parameters
  1558. // Output parameters
  1559. /// Up to caller to deallocate binaryData if needed
  1560. DataStructures::List<FriendInfo> invitesSent;
  1561. DataStructures::List<FriendInfo> invitesReceived;
  1562. };
  1563. /// \brief Gets all friends to this user
  1564. /// \ingroup LOBBY_2_COMMANDS
  1565. struct Friends_GetFriends : public Lobby2Message
  1566. {
  1567. __L2_MSG_BASE_IMPL(Friends_GetFriends)
  1568. virtual bool RequiresAdmin(void) const {return false;}
  1569. virtual bool RequiresRankingPermission(void) const {return false;}
  1570. virtual bool CancelOnDisconnect(void) const {return true;}
  1571. virtual bool RequiresLogin(void) const {return true;}
  1572. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1573. // Input parameters
  1574. // Output parameters
  1575. DataStructures::List<FriendInfo> myFriends;
  1576. };
  1577. /// \brief Ends a friendship between two users. Remove from the database the friend entry between my handle and their handle. As with accept add friend invite, this is bidirectional. Either user can terminate the friendship. Store in the emails table from my handle to their handle the subject, body, and binary data, and procedure type flag.
  1578. /// \ingroup LOBBY_2_COMMANDS
  1579. struct Friends_Remove : public Lobby2Message
  1580. {
  1581. Friends_Remove() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1582. ~Friends_Remove() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1583. __L2_MSG_BASE_IMPL(Friends_Remove)
  1584. virtual bool RequiresAdmin(void) const {return false;}
  1585. virtual bool RequiresRankingPermission(void) const {return false;}
  1586. virtual bool CancelOnDisconnect(void) const {return false;}
  1587. virtual bool RequiresLogin(void) const {return true;}
  1588. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1589. virtual bool PrevalidateInput(void);
  1590. // Input parameters
  1591. RakNet::RakString targetHandle;
  1592. RakNet::RakString subject;
  1593. RakNet::RakString body;
  1594. int emailStatus;
  1595. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1596. // Output parameters
  1597. };
  1598. /// \brief Remembers a user, with a type integer and description for you to use, if desired.
  1599. /// \details Can be used for recent users or other types of lists
  1600. /// The combination of targetHandle and type uniquely identifies a bookmarked user.
  1601. /// If you want more than one list of bookmarked usrs, use a different value for type
  1602. /// \ingroup LOBBY_2_COMMANDS
  1603. struct BookmarkedUsers_Add : public Lobby2Message
  1604. {
  1605. __L2_MSG_BASE_IMPL(BookmarkedUsers_Add)
  1606. virtual bool RequiresAdmin(void) const {return false;}
  1607. virtual bool RequiresRankingPermission(void) const {return false;}
  1608. virtual bool CancelOnDisconnect(void) const {return false;}
  1609. virtual bool RequiresLogin(void) const {return true;}
  1610. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1611. virtual bool PrevalidateInput(void);
  1612. // Input parameters
  1613. RakNet::RakString targetHandle;
  1614. int type;
  1615. RakNet::RakString description;
  1616. };
  1617. /// \brief Remove a user added with BookmarkedUsers_Add
  1618. /// \ingroup LOBBY_2_COMMANDS
  1619. struct BookmarkedUsers_Remove : public Lobby2Message
  1620. {
  1621. __L2_MSG_BASE_IMPL(BookmarkedUsers_Remove)
  1622. virtual bool RequiresAdmin(void) const {return false;}
  1623. virtual bool RequiresRankingPermission(void) const {return false;}
  1624. virtual bool CancelOnDisconnect(void) const {return false;}
  1625. virtual bool RequiresLogin(void) const {return true;}
  1626. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1627. virtual bool PrevalidateInput(void);
  1628. // Input parameters
  1629. RakNet::RakString targetHandle;
  1630. int type;
  1631. };
  1632. /// \brief Returns all users added to BookmarkedUsers_Add
  1633. /// \ingroup LOBBY_2_COMMANDS
  1634. struct BookmarkedUsers_Get : public Lobby2Message
  1635. {
  1636. __L2_MSG_BASE_IMPL(BookmarkedUsers_Get)
  1637. virtual bool RequiresAdmin(void) const {return false;}
  1638. virtual bool RequiresRankingPermission(void) const {return false;}
  1639. virtual bool CancelOnDisconnect(void) const {return true;}
  1640. virtual bool RequiresLogin(void) const {return true;}
  1641. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1642. // Input parameters
  1643. // Output parameters
  1644. /// \param[out] recentlyMetUsers Handles of recently met users, by BookmarkedUsers_Add, subject to expirationTimeSeconds
  1645. DataStructures::List<BookmarkedUser> bookmarkedUsers;
  1646. };
  1647. /// \brief Adds to an emails table from myHandle (store primary key) to recipient handles (store primary key) the specified subject, body, and binary data. Emails are persistent, therefore emails should be stored in a separate table and referenced by the user. Deleting the user does not delete previously send email. Emails should have an automatic timestamp to store when they were created. Email should be flagged as sent=true (boolean), markedRead=true (boolean), deletedBySender=false (boolean), deletedByReciever=false (boolean).
  1648. /// \ingroup LOBBY_2_COMMANDS
  1649. struct Emails_Send : public Lobby2Message
  1650. {
  1651. Emails_Send() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1652. virtual ~Emails_Send() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1653. __L2_MSG_BASE_IMPL(Emails_Send)
  1654. virtual bool RequiresAdmin(void) const {return false;}
  1655. virtual bool RequiresRankingPermission(void) const {return false;}
  1656. virtual bool CancelOnDisconnect(void) const {return false;}
  1657. virtual bool RequiresLogin(void) const {return true;}
  1658. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1659. virtual bool PrevalidateInput(void);
  1660. // Input parameters
  1661. DataStructures::List<RakNet::RakString> recipients;
  1662. RakNet::RakString subject;
  1663. RakNet::RakString body;
  1664. int status;
  1665. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1666. // Output parameters
  1667. };
  1668. /// \brief Returns emails as noted. Emails which were marked deleted are not returned.
  1669. /// \ingroup LOBBY_2_COMMANDS
  1670. struct Emails_Get : public Lobby2Message
  1671. {
  1672. Emails_Get() {unreadEmailsOnly=false; emailIdsOnly=false;}
  1673. virtual ~Emails_Get() {}
  1674. __L2_MSG_BASE_IMPL(Emails_Get)
  1675. virtual bool RequiresAdmin(void) const {return false;}
  1676. virtual bool RequiresRankingPermission(void) const {return false;}
  1677. virtual bool CancelOnDisconnect(void) const {return true;}
  1678. virtual bool RequiresLogin(void) const {return true;}
  1679. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1680. // Input parameters
  1681. bool unreadEmailsOnly; //If this is true then it will only return emails that have not been read by the user.
  1682. bool emailIdsOnly; //When this is set only the emailIds are filled out and no data is returned.
  1683. DataStructures::List<unsigned int> emailsToRetrieve; //If this has entries then it will only get the emails in the list, otherwise it will get all emails.
  1684. // Output parameters
  1685. /// \param[out] emailResults Up to caller to deallocate binary data
  1686. DataStructures::List<EmailResult> emailResults;
  1687. };
  1688. /// \brief Deletes an email with a specified ID. This ID is returned in GetEmail and should uniquely identify an email (it's fine to use the primary key). Note: Emails are not actually deleted from the database in this function. This just sets the deletedBySender or deletedByReciever flags. Emails are actually stored in a log recording past emails and sender and receiver primary key. They are not truly destroyed until done so with System_PruneAccounts.
  1689. /// \ingroup LOBBY_2_COMMANDS
  1690. struct Emails_Delete : public Lobby2Message
  1691. {
  1692. __L2_MSG_BASE_IMPL(Emails_Delete)
  1693. virtual bool RequiresAdmin(void) const {return false;}
  1694. virtual bool RequiresRankingPermission(void) const {return false;}
  1695. virtual bool CancelOnDisconnect(void) const {return false;}
  1696. virtual bool RequiresLogin(void) const {return true;}
  1697. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1698. // Input parameters
  1699. unsigned int emailId;
  1700. // Output parameters
  1701. };
  1702. /// \brief Sets the status flag for an email. This is a property defined by and used by the user
  1703. /// \ingroup LOBBY_2_COMMANDS
  1704. struct Emails_SetStatus : public Lobby2Message
  1705. {
  1706. __L2_MSG_BASE_IMPL(Emails_SetStatus)
  1707. virtual bool RequiresAdmin(void) const {return false;}
  1708. virtual bool RequiresRankingPermission(void) const {return false;}
  1709. virtual bool CancelOnDisconnect(void) const {return false;}
  1710. virtual bool RequiresLogin(void) const {return true;}
  1711. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1712. virtual bool PrevalidateInput(void);
  1713. // Input parameters
  1714. unsigned int emailId;
  1715. bool updateStatusFlag;
  1716. bool updateMarkedRead;
  1717. int newStatusFlag;
  1718. bool isNowMarkedRead;
  1719. // Output parameters
  1720. };
  1721. /// \brief Will record in the database the results of a match. This will store in the database the the match which is defined by the the match notes, match id, winner and loser participant primary keys, winner and loser participant scores, and binary data.
  1722. /// \ingroup LOBBY_2_COMMANDS
  1723. struct Ranking_SubmitMatch : public Lobby2Message
  1724. {
  1725. __L2_MSG_BASE_IMPL(Ranking_SubmitMatch)
  1726. virtual bool RequiresAdmin(void) const {return false;}
  1727. virtual bool RequiresRankingPermission(void) const {return true;}
  1728. virtual bool CancelOnDisconnect(void) const {return false;}
  1729. virtual bool RequiresLogin(void) const {return true;}
  1730. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1731. virtual bool PrevalidateInput(void);
  1732. // Input parameters
  1733. RakNet::RakString titleName;
  1734. RakNet::RakString gameType;
  1735. SubmittedMatch submittedMatch;
  1736. // Output parameters
  1737. };
  1738. /// \brief Gets matches recorded with Ranking_SubmitMatch ordered from most recent to least recent. Each returned match has all columns submitted to Ranking_SubmitMatch, except binary data, which can be retrieved with Ranking_GetMatchBinaryData. Additionally, each returned match returns the primary key of each match, to be passed to Ranking_GetMatchBinaryData
  1739. /// \ingroup LOBBY_2_COMMANDS
  1740. struct Ranking_GetMatches : public Lobby2Message
  1741. {
  1742. __L2_MSG_BASE_IMPL(Ranking_GetMatches)
  1743. virtual bool RequiresAdmin(void) const {return false;}
  1744. virtual bool RequiresRankingPermission(void) const {return false;}
  1745. virtual bool CancelOnDisconnect(void) const {return true;}
  1746. virtual bool RequiresLogin(void) const {return true;}
  1747. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1748. virtual bool PrevalidateInput(void);
  1749. // Input parameters
  1750. RakNet::RakString titleName;
  1751. RakNet::RakString gameType;
  1752. // Output parameters
  1753. /// \param[out] submittedMatches (excluding binary data, up to caller to deallocate)
  1754. DataStructures::List<SubmittedMatch> submittedMatches;
  1755. };
  1756. /// \brief Because of the large amount of binary data potentially returned, this function is used to retrieve binary data for a particular match.
  1757. /// \ingroup LOBBY_2_COMMANDS
  1758. struct Ranking_GetMatchBinaryData : public Lobby2Message
  1759. {
  1760. Ranking_GetMatchBinaryData() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1761. ~Ranking_GetMatchBinaryData() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1762. __L2_MSG_BASE_IMPL(Ranking_GetMatchBinaryData)
  1763. virtual bool RequiresAdmin(void) const {return false;}
  1764. virtual bool RequiresRankingPermission(void) const {return false;}
  1765. virtual bool CancelOnDisconnect(void) const {return true;}
  1766. virtual bool RequiresLogin(void) const {return true;}
  1767. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1768. // Input parameters
  1769. unsigned int matchID;
  1770. // Output parameters
  1771. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1772. };
  1773. /// \brief When a match is submitted with Ranking_SubmitMatch, the total running score and number of matches played for each player for each game title and game mode combination should be recorded. Because matches can be pruned wth PruneMatches(), the total score sum and number of scores submitted should be stored, rather than summed up from prior submitted matches.
  1774. /// \ingroup LOBBY_2_COMMANDS
  1775. struct Ranking_GetTotalScore : public Lobby2Message
  1776. {
  1777. __L2_MSG_BASE_IMPL(Ranking_GetTotalScore)
  1778. virtual bool RequiresAdmin(void) const {return false;}
  1779. virtual bool RequiresRankingPermission(void) const {return false;}
  1780. virtual bool CancelOnDisconnect(void) const {return true;}
  1781. virtual bool RequiresLogin(void) const {return true;}
  1782. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1783. virtual bool PrevalidateInput(void);
  1784. // Input parameters
  1785. RakNet::RakString titleName;
  1786. RakNet::RakString gameType;
  1787. RakNet::RakString targetHandle;
  1788. // Output parameters
  1789. float scoreSum;
  1790. unsigned int numScoresSubmitted;
  1791. };
  1792. /// \brief Resets the sum of all submitted scores to 0, the number of scores submitted to 0
  1793. /// \ingroup LOBBY_2_COMMANDS
  1794. struct Ranking_WipeScoresForPlayer : public Lobby2Message
  1795. {
  1796. __L2_MSG_BASE_IMPL(Ranking_WipeScoresForPlayer)
  1797. virtual bool RequiresAdmin(void) const {return false;}
  1798. virtual bool RequiresRankingPermission(void) const {return true;}
  1799. virtual bool CancelOnDisconnect(void) const {return false;}
  1800. virtual bool RequiresLogin(void) const {return true;}
  1801. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1802. virtual bool PrevalidateInput(void);
  1803. // Input parameters
  1804. RakNet::RakString titleName;
  1805. RakNet::RakString gameType;
  1806. RakNet::RakString targetHandle;
  1807. // Output parameters
  1808. };
  1809. /// \brief Deletes all matches submitted with submit match. Also deletes all scores for all players associated with this titleName and gameType (e.g. same thing that WipeScoresForPlayer does, but for all players).
  1810. /// \ingroup LOBBY_2_COMMANDS
  1811. struct Ranking_WipeMatches : public Lobby2Message
  1812. {
  1813. __L2_MSG_BASE_IMPL(Ranking_WipeMatches)
  1814. virtual bool RequiresAdmin(void) const {return false;}
  1815. virtual bool RequiresRankingPermission(void) const {return true;}
  1816. virtual bool CancelOnDisconnect(void) const {return false;}
  1817. virtual bool RequiresLogin(void) const {return true;}
  1818. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1819. virtual bool PrevalidateInput(void);
  1820. // Input parameters
  1821. RakNet::RakString titleName;
  1822. RakNet::RakString gameType;
  1823. // Output parameters
  1824. };
  1825. /// \brief Will delete all matches submitted with SubmitMatch over PruneTime days old. Will also prune matches if the total storage space of all matches exceeds PruneSizeMB megabytes in the database.
  1826. /// \ingroup LOBBY_2_COMMANDS
  1827. struct Ranking_PruneMatches : public Lobby2Message
  1828. {
  1829. __L2_MSG_BASE_IMPL(Ranking_PruneMatches)
  1830. virtual bool RequiresAdmin(void) const {return false;}
  1831. virtual bool RequiresRankingPermission(void) const {return true;}
  1832. virtual bool CancelOnDisconnect(void) const {return false;}
  1833. virtual bool RequiresLogin(void) const {return true;}
  1834. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1835. // Input parameters
  1836. unsigned int pruneTimeDays;
  1837. // Output parameters
  1838. };
  1839. /// \brief Add or update a rating for a user, in a particular game and game mode
  1840. /// \ingroup LOBBY_2_COMMANDS
  1841. struct Ranking_UpdateRating : public Lobby2Message
  1842. {
  1843. __L2_MSG_BASE_IMPL(Ranking_UpdateRating)
  1844. virtual bool RequiresAdmin(void) const {return false;}
  1845. virtual bool RequiresRankingPermission(void) const {return true;}
  1846. virtual bool CancelOnDisconnect(void) const {return false;}
  1847. virtual bool RequiresLogin(void) const {return true;}
  1848. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1849. virtual bool PrevalidateInput(void);
  1850. // Input parameters
  1851. RakNet::RakString titleName;
  1852. RakNet::RakString gameType;
  1853. RakNet::RakString targetHandle;
  1854. float targetRating;
  1855. // Output parameters
  1856. };
  1857. /// \brief Deletes all ratings for all players for this combination of titleName and gameType.
  1858. /// \ingroup LOBBY_2_COMMANDS
  1859. struct Ranking_WipeRatings : public Lobby2Message
  1860. {
  1861. __L2_MSG_BASE_IMPL(Ranking_WipeRatings)
  1862. virtual bool RequiresAdmin(void) const {return false;}
  1863. virtual bool RequiresRankingPermission(void) const {return true;}
  1864. virtual bool CancelOnDisconnect(void) const {return false;}
  1865. virtual bool RequiresLogin(void) const {return true;}
  1866. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1867. virtual bool PrevalidateInput(void);
  1868. // Input parameters
  1869. RakNet::RakString titleName;
  1870. RakNet::RakString gameType;
  1871. // Output parameters
  1872. };
  1873. /// \brief Get rating for a player
  1874. /// \ingroup LOBBY_2_COMMANDS
  1875. struct Ranking_GetRating : public Lobby2Message
  1876. {
  1877. __L2_MSG_BASE_IMPL(Ranking_GetRating)
  1878. virtual bool RequiresAdmin(void) const {return false;}
  1879. virtual bool RequiresRankingPermission(void) const {return false;}
  1880. virtual bool CancelOnDisconnect(void) const {return true;}
  1881. virtual bool RequiresLogin(void) const {return true;}
  1882. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1883. virtual bool PrevalidateInput(void);
  1884. // Input parameters
  1885. RakNet::RakString titleName;
  1886. RakNet::RakString gameType;
  1887. RakNet::RakString targetHandle;
  1888. // Output parameters
  1889. /// \param[out] currentRating Defaults to 100 if no matches submitted yet
  1890. float currentRating;
  1891. };
  1892. /// \brief userHandle updates the clanDescription and clanBinaryData of a clan with the specified clanHandle. userHandle must be the clan leader.
  1893. /// \ingroup LOBBY_2_COMMANDS
  1894. struct Clans_Create : public Lobby2Message
  1895. {
  1896. Clans_Create() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1897. ~Clans_Create() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1898. __L2_MSG_BASE_IMPL(Clans_Create)
  1899. virtual bool RequiresAdmin(void) const {return false;}
  1900. virtual bool RequiresRankingPermission(void) const {return false;}
  1901. virtual bool CancelOnDisconnect(void) const {return false;}
  1902. virtual bool RequiresLogin(void) const {return true;}
  1903. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1904. virtual bool PrevalidateInput(void);
  1905. // Input parameters
  1906. RakNet::RakString clanHandle;
  1907. bool failIfAlreadyInClan;
  1908. bool requiresInvitationsToJoin;
  1909. RakNet::RakString description;
  1910. int emailStatus;
  1911. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1912. // Output parameters
  1913. };
  1914. /// \brief userHandle updates the clanDescription and clanBinaryData of a clan with the specified clanHandle. userHandle must be the clan leader.
  1915. /// \ingroup LOBBY_2_COMMANDS
  1916. struct Clans_SetProperties : public Lobby2Message
  1917. {
  1918. Clans_SetProperties() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1919. ~Clans_SetProperties() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1920. __L2_MSG_BASE_IMPL(Clans_SetProperties)
  1921. virtual bool RequiresAdmin(void) const {return false;}
  1922. virtual bool RequiresRankingPermission(void) const {return false;}
  1923. virtual bool CancelOnDisconnect(void) const {return false;}
  1924. virtual bool RequiresLogin(void) const {return true;}
  1925. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1926. virtual bool PrevalidateInput(void);
  1927. // Input parameters
  1928. RakNet::RakString clanHandle;
  1929. RakNet::RakString description;
  1930. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1931. };
  1932. /// \brief Returns clanDescription and clanBinaryData for the given clan.
  1933. /// \ingroup LOBBY_2_COMMANDS
  1934. struct Clans_GetProperties : public Lobby2Message
  1935. {
  1936. Clans_GetProperties() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1937. ~Clans_GetProperties() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1938. __L2_MSG_BASE_IMPL(Clans_GetProperties)
  1939. virtual bool RequiresAdmin(void) const {return false;}
  1940. virtual bool RequiresRankingPermission(void) const {return false;}
  1941. virtual bool CancelOnDisconnect(void) const {return true;}
  1942. virtual bool RequiresLogin(void) const {return true;}
  1943. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1944. virtual bool PrevalidateInput(void);
  1945. // Input parameters
  1946. RakNet::RakString clanHandle;
  1947. // Output parameters
  1948. RakNet::RakString description;
  1949. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1950. };
  1951. /// \brief Each member of each clan has the the properties clanMemberDescription and clanMemberBinaryData which default to empty. These properties can be set here, and retrieved via GetClanMemberProperties
  1952. /// \ingroup LOBBY_2_COMMANDS
  1953. struct Clans_SetMyMemberProperties : public Lobby2Message
  1954. {
  1955. Clans_SetMyMemberProperties() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  1956. ~Clans_SetMyMemberProperties() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  1957. __L2_MSG_BASE_IMPL(Clans_SetMyMemberProperties)
  1958. virtual bool RequiresAdmin(void) const {return false;}
  1959. virtual bool RequiresRankingPermission(void) const {return false;}
  1960. virtual bool CancelOnDisconnect(void) const {return false;}
  1961. virtual bool RequiresLogin(void) const {return true;}
  1962. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1963. virtual bool PrevalidateInput(void);
  1964. // Input parameters
  1965. RakNet::RakString clanHandle;
  1966. RakNet::RakString description;
  1967. RakNetSmartPtr<BinaryDataBlock> binaryData;
  1968. // Output parameters
  1969. };
  1970. /// \brief myPrimaryKey becomes a subleader. newLeaderHandle becomes the leader. An email is sent with Emails_Send() to all members with the specified subject and body
  1971. /// \ingroup LOBBY_2_COMMANDS
  1972. struct Clans_GrantLeader : public Lobby2Message
  1973. {
  1974. __L2_MSG_BASE_IMPL(Clans_GrantLeader)
  1975. virtual bool RequiresAdmin(void) const {return false;}
  1976. virtual bool RequiresRankingPermission(void) const {return false;}
  1977. virtual bool CancelOnDisconnect(void) const {return false;}
  1978. virtual bool RequiresLogin(void) const {return true;}
  1979. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1980. virtual bool PrevalidateInput(void);
  1981. // Input parameters
  1982. RakNet::RakString clanHandle;
  1983. RakNet::RakString targetHandle;
  1984. };
  1985. /// \brief Promotes a clan member to a subleader, or demotes a subleader to a regular member. On promotion, email is sent to all members from myPrimary key with the specified subject and body. On demotion, email is sent to all leaders from myPrimary key with the specified subject and body.
  1986. /// \ingroup LOBBY_2_COMMANDS
  1987. struct Clans_SetSubleaderStatus : public Lobby2Message
  1988. {
  1989. __L2_MSG_BASE_IMPL(Clans_SetSubleaderStatus)
  1990. virtual bool RequiresAdmin(void) const {return false;}
  1991. virtual bool RequiresRankingPermission(void) const {return false;}
  1992. virtual bool CancelOnDisconnect(void) const {return false;}
  1993. virtual bool RequiresLogin(void) const {return true;}
  1994. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  1995. virtual bool PrevalidateInput(void);
  1996. // Input parameters
  1997. RakNet::RakString clanHandle;
  1998. RakNet::RakString targetHandle;
  1999. bool setToSubleader;
  2000. };
  2001. /// \brief Lets the clan leader set the rank property for a clan member
  2002. /// \ingroup LOBBY_2_COMMANDS
  2003. struct Clans_SetMemberRank : public Lobby2Message
  2004. {
  2005. __L2_MSG_BASE_IMPL(Clans_SetMemberRank)
  2006. virtual bool RequiresAdmin(void) const {return false;}
  2007. virtual bool RequiresRankingPermission(void) const {return false;}
  2008. virtual bool CancelOnDisconnect(void) const {return false;}
  2009. virtual bool RequiresLogin(void) const {return true;}
  2010. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2011. virtual bool PrevalidateInput(void);
  2012. // Input parameters
  2013. RakNet::RakString clanHandle;
  2014. RakNet::RakString targetHandle;
  2015. unsigned int newRank;
  2016. };
  2017. /// \brief Returns properties for a clan member of a given clan
  2018. /// \ingroup LOBBY_2_COMMANDS
  2019. struct Clans_GetMemberProperties : public Lobby2Message
  2020. {
  2021. Clans_GetMemberProperties() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2022. ~Clans_GetMemberProperties() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2023. __L2_MSG_BASE_IMPL(Clans_GetMemberProperties)
  2024. virtual bool RequiresAdmin(void) const {return false;}
  2025. virtual bool RequiresRankingPermission(void) const {return false;}
  2026. virtual bool CancelOnDisconnect(void) const {return true;}
  2027. virtual bool RequiresLogin(void) const {return true;}
  2028. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2029. virtual bool PrevalidateInput(void);
  2030. // Input parameters
  2031. RakNet::RakString clanHandle;
  2032. RakNet::RakString targetHandle;
  2033. // Output parameters
  2034. RakNet::RakString description;
  2035. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2036. unsigned int rank;
  2037. bool isSubleader;
  2038. ClanMemberState clanMemberState;
  2039. RakNet::RakString banReason;
  2040. };
  2041. /// \brief Renames the clan. Note that this may be called asynchronously, in which case the stored procedure should account for this occuring at the same time as another function that uses the old clan handle.
  2042. /// \ingroup LOBBY_2_COMMANDS
  2043. struct Clans_ChangeHandle : public Lobby2Message
  2044. {
  2045. __L2_MSG_BASE_IMPL(Clans_ChangeHandle)
  2046. virtual bool RequiresAdmin(void) const {return false;}
  2047. virtual bool RequiresRankingPermission(void) const {return false;}
  2048. virtual bool CancelOnDisconnect(void) const {return false;}
  2049. virtual bool RequiresLogin(void) const {return true;}
  2050. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2051. virtual bool PrevalidateInput(void);
  2052. // Input parameters
  2053. RakNet::RakString oldClanHandle;
  2054. RakNet::RakString newClanHandle;
  2055. // Output parameters
  2056. };
  2057. /// \brief Remove user identified by myPrimaryKey from clan identified by clanHandle.
  2058. /// \details If this user is the leader of the clan, and dissolveIfClanLeader is true, then also destroy the clan and remove all members from the clan, as well as all data associated with the clan (clan boards, join requests, etc). If the clan is automatically destroyed in this way, use Emails_Send() to each clan member with clanDissolvedSubject and clanDissolvedBody. The sender of the email should be the clan leader. If the clan is not destroyed, then leadership passes to the oldest subleader. If no subleaders exist, leadership passes to the oldest member. If no other members exist, the clan is destroyed.
  2059. /// \ingroup LOBBY_2_COMMANDS
  2060. struct Clans_Leave : public Lobby2Message
  2061. {
  2062. Clans_Leave() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2063. ~Clans_Leave() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2064. __L2_MSG_BASE_IMPL(Clans_Leave)
  2065. virtual bool RequiresAdmin(void) const {return false;}
  2066. virtual bool RequiresRankingPermission(void) const {return false;}
  2067. virtual bool CancelOnDisconnect(void) const {return false;}
  2068. virtual bool RequiresLogin(void) const {return true;}
  2069. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2070. virtual bool PrevalidateInput(void);
  2071. // Input parameters
  2072. RakNet::RakString clanHandle;
  2073. bool dissolveIfClanLeader;
  2074. RakNet::RakString subject;
  2075. RakNet::RakString body;
  2076. int emailStatus;
  2077. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2078. // Output parameters
  2079. bool wasDissolved;
  2080. RakNet::RakString newClanLeader; // If not dissolved
  2081. };
  2082. /// \brief Returns all clans that userHandle is a member of. Clans and clan members should be sorted by name, using ascending or descending sort as specified.
  2083. /// \ingroup LOBBY_2_COMMANDS
  2084. struct Clans_Get : public Lobby2Message
  2085. {
  2086. __L2_MSG_BASE_IMPL(Clans_Get)
  2087. virtual bool RequiresAdmin(void) const {return false;}
  2088. virtual bool RequiresRankingPermission(void) const {return false;}
  2089. virtual bool CancelOnDisconnect(void) const {return true;}
  2090. virtual bool RequiresLogin(void) const {return true;}
  2091. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2092. // Input parameters
  2093. // Output parameters
  2094. DataStructures::List<ClanInfo> clans;
  2095. };
  2096. /// \brief if myPrimaryKey is a leader or subleader of clanHandle, and invitedUserHandle is a valid user not already invited to this clan, add this user to the invite table. The invite table contains the clan, who send the invite, and who the invite was sent to, and when it was sent. Invites expire after expiration time in seconds. Also, use Emails_Send() to send an email from myPrimaryKey to invitedUserHandle with the specified subject and body.
  2097. /// \ingroup LOBBY_2_COMMANDS
  2098. struct Clans_SendJoinInvitation : public Lobby2Message
  2099. {
  2100. Clans_SendJoinInvitation() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2101. ~Clans_SendJoinInvitation() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2102. __L2_MSG_BASE_IMPL(Clans_SendJoinInvitation)
  2103. virtual bool RequiresAdmin(void) const {return false;}
  2104. virtual bool RequiresRankingPermission(void) const {return false;}
  2105. virtual bool CancelOnDisconnect(void) const {return false;}
  2106. virtual bool RequiresLogin(void) const {return true;}
  2107. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2108. virtual bool PrevalidateInput(void);
  2109. // Input parameters
  2110. RakNet::RakString clanHandle;
  2111. RakNet::RakString targetHandle;
  2112. RakNet::RakString subject;
  2113. RakNet::RakString body;
  2114. int emailStatus;
  2115. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2116. // Output parameters
  2117. };
  2118. /// \brief if myPrimaryKey is a leader or subleader of clanHandle, and invitedUserHandle is a valid user with an invite to this clan, remove this invite. Also, use Emails_Send() to send an email from myPrimaryKey to invitedUserHandle with the specified subject and body.
  2119. /// \ingroup LOBBY_2_COMMANDS
  2120. struct Clans_WithdrawJoinInvitation : public Lobby2Message
  2121. {
  2122. Clans_WithdrawJoinInvitation() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2123. ~Clans_WithdrawJoinInvitation() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2124. __L2_MSG_BASE_IMPL(Clans_WithdrawJoinInvitation)
  2125. virtual bool RequiresAdmin(void) const {return false;}
  2126. virtual bool RequiresRankingPermission(void) const {return false;}
  2127. virtual bool CancelOnDisconnect(void) const {return false;}
  2128. virtual bool RequiresLogin(void) const {return true;}
  2129. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2130. virtual bool PrevalidateInput(void);
  2131. // Input parameters
  2132. RakNet::RakString clanHandle;
  2133. RakNet::RakString targetHandle;
  2134. RakNet::RakString subject;
  2135. RakNet::RakString body;
  2136. int emailStatus;
  2137. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2138. };
  2139. /// \brief If myPrimaryKey has an invitation to the specified clan, add him to the clan. Fail on specified output parameters. Use Emails_Send() to send an email from myPrimaryKey to all clan members with the specified subject and body.
  2140. /// \ingroup LOBBY_2_COMMANDS
  2141. struct Clans_AcceptJoinInvitation : public Lobby2Message
  2142. {
  2143. Clans_AcceptJoinInvitation() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2144. ~Clans_AcceptJoinInvitation() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2145. __L2_MSG_BASE_IMPL(Clans_AcceptJoinInvitation)
  2146. virtual bool RequiresAdmin(void) const {return false;}
  2147. virtual bool RequiresRankingPermission(void) const {return false;}
  2148. virtual bool CancelOnDisconnect(void) const {return false;}
  2149. virtual bool RequiresLogin(void) const {return true;}
  2150. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2151. virtual bool PrevalidateInput(void);
  2152. // Input parameters
  2153. RakNet::RakString clanHandle;
  2154. RakNet::RakString subject;
  2155. RakNet::RakString body;
  2156. int emailStatus;
  2157. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2158. bool failIfAlreadyInClan;
  2159. // Output parameters
  2160. };
  2161. /// \brief If we have an open clan invitation, reject it (just delete it from the database).
  2162. /// \ingroup LOBBY_2_COMMANDS
  2163. struct Clans_RejectJoinInvitation : public Lobby2Message
  2164. {
  2165. Clans_RejectJoinInvitation() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2166. ~Clans_RejectJoinInvitation() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2167. __L2_MSG_BASE_IMPL(Clans_RejectJoinInvitation)
  2168. virtual bool RequiresAdmin(void) const {return false;}
  2169. virtual bool RequiresRankingPermission(void) const {return false;}
  2170. virtual bool CancelOnDisconnect(void) const {return false;}
  2171. virtual bool RequiresLogin(void) const {return true;}
  2172. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2173. virtual bool PrevalidateInput(void);
  2174. // Input parameters
  2175. RakNet::RakString clanHandle;
  2176. RakNet::RakString subject;
  2177. RakNet::RakString body;
  2178. int emailStatus;
  2179. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2180. // Output parameters
  2181. };
  2182. /// \brief Returns all invites sent by Clans_SendJoinInvitation that were not yet acted upon (withdrawn, accepted, rejected).
  2183. /// \ingroup LOBBY_2_COMMANDS
  2184. struct Clans_DownloadInvitationList : public Lobby2Message
  2185. {
  2186. __L2_MSG_BASE_IMPL(Clans_DownloadInvitationList)
  2187. virtual bool RequiresAdmin(void) const {return false;}
  2188. virtual bool RequiresRankingPermission(void) const {return false;}
  2189. virtual bool CancelOnDisconnect(void) const {return true;}
  2190. virtual bool RequiresLogin(void) const {return true;}
  2191. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2192. // Output parameters
  2193. DataStructures::List<OpenInvite> invitationsSentToMe;
  2194. DataStructures::List<ClanJoinInvite> usersThatHaveAnInvitationFromClansThatIAmAMemberOf;
  2195. };
  2196. /// \brief Function has two forms:
  2197. /// \details If requiresInvitationsToJoin==true when CreateClan() was called, will join the specified clan immediately. Sends subject and body to all other members in the clan.
  2198. /// If requiresInvitationsToJoin==false when CreateClan() was called, send a join request to the specified clan, if we don't have one already. Join request expires after expiration time in seconds. Also, use Emails_Send() to send an email from myPrimaryKey to the clan leader and all subleaders with the specified subject and body.
  2199. /// \ingroup LOBBY_2_COMMANDS
  2200. struct Clans_SendJoinRequest : public Lobby2Message
  2201. {
  2202. Clans_SendJoinRequest() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2203. ~Clans_SendJoinRequest() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2204. __L2_MSG_BASE_IMPL(Clans_SendJoinRequest)
  2205. virtual bool RequiresAdmin(void) const {return false;}
  2206. virtual bool RequiresRankingPermission(void) const {return false;}
  2207. virtual bool CancelOnDisconnect(void) const {return false;}
  2208. virtual bool RequiresLogin(void) const {return true;}
  2209. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2210. virtual bool PrevalidateInput(void);
  2211. // Input parameters
  2212. RakNet::RakString clanHandle;
  2213. RakNet::RakString subject;
  2214. RakNet::RakString body;
  2215. int emailStatus;
  2216. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2217. // Output parameters
  2218. bool clanJoined;
  2219. };
  2220. /// \brief Withdraws a previously sent clan join request via SendClanJoinRequest. Use Emails_Send() to send an email from myPrimaryKey to the clan leader and all subleaders with the specified subject and body.
  2221. /// \ingroup LOBBY_2_COMMANDS
  2222. struct Clans_WithdrawJoinRequest : public Lobby2Message
  2223. {
  2224. Clans_WithdrawJoinRequest() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2225. ~Clans_WithdrawJoinRequest() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2226. __L2_MSG_BASE_IMPL(Clans_WithdrawJoinRequest)
  2227. virtual bool RequiresAdmin(void) const {return false;}
  2228. virtual bool RequiresRankingPermission(void) const {return false;}
  2229. virtual bool CancelOnDisconnect(void) const {return false;}
  2230. virtual bool RequiresLogin(void) const {return true;}
  2231. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2232. virtual bool PrevalidateInput(void);
  2233. // Input parameters
  2234. RakNet::RakString clanHandle;
  2235. RakNet::RakString subject;
  2236. RakNet::RakString body;
  2237. int emailStatus;
  2238. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2239. // Output parameters
  2240. };
  2241. /// \brief A clan leader or subleader accepts a join request from requestingUserHandle to this clan. requestingUserHandle joins the clan as a regular member. Use Emails_Send() to send an email from requestingUserHandle to all clan members with the specified subject and body.
  2242. /// \ingroup LOBBY_2_COMMANDS
  2243. struct Clans_AcceptJoinRequest : public Lobby2Message
  2244. {
  2245. Clans_AcceptJoinRequest() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2246. ~Clans_AcceptJoinRequest() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2247. __L2_MSG_BASE_IMPL(Clans_AcceptJoinRequest)
  2248. virtual bool RequiresAdmin(void) const {return false;}
  2249. virtual bool RequiresRankingPermission(void) const {return false;}
  2250. virtual bool CancelOnDisconnect(void) const {return false;}
  2251. virtual bool RequiresLogin(void) const {return true;}
  2252. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2253. virtual bool PrevalidateInput(void);
  2254. // Input parameters
  2255. RakNet::RakString clanHandle;
  2256. RakNet::RakString subject;
  2257. RakNet::RakString body;
  2258. int emailStatus;
  2259. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2260. RakNet::RakString requestingUserHandle;
  2261. bool failIfAlreadyInClan;
  2262. // Output parameters
  2263. };
  2264. /// \brief Rejects a clan join request from requestingUserHandle. Send an email from myPrimaryKey to requestingUserHandle with the specified subject and body.
  2265. /// \details
  2266. struct Clans_RejectJoinRequest : public Lobby2Message
  2267. {
  2268. Clans_RejectJoinRequest() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2269. ~Clans_RejectJoinRequest() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2270. __L2_MSG_BASE_IMPL(Clans_RejectJoinRequest)
  2271. virtual bool RequiresAdmin(void) const {return false;}
  2272. virtual bool RequiresRankingPermission(void) const {return false;}
  2273. virtual bool CancelOnDisconnect(void) const {return false;}
  2274. virtual bool RequiresLogin(void) const {return true;}
  2275. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2276. virtual bool PrevalidateInput(void);
  2277. // Input parameters
  2278. RakNet::RakString clanHandle;
  2279. RakNet::RakString subject;
  2280. RakNet::RakString body;
  2281. int emailStatus;
  2282. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2283. RakNet::RakString requestingUserHandle;
  2284. // Output parameters
  2285. };
  2286. /// \brief Returns all open requests this user has sent to clans, that have not yet acted upon (withdrawn, accepted, rejected, expired).
  2287. /// \ingroup LOBBY_2_COMMANDS
  2288. struct Clans_DownloadRequestList : public Lobby2Message
  2289. {
  2290. __L2_MSG_BASE_IMPL(Clans_DownloadRequestList)
  2291. virtual bool RequiresAdmin(void) const {return false;}
  2292. virtual bool RequiresRankingPermission(void) const {return false;}
  2293. virtual bool CancelOnDisconnect(void) const {return true;}
  2294. virtual bool RequiresLogin(void) const {return true;}
  2295. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2296. // Input parameters
  2297. // Output parameters
  2298. // joinRequestsToMyClan is only filled out for clans you are a leader or subleader in
  2299. DataStructures::List<ClanJoinRequest> joinRequestsToMyClan, joinRequestsFromMe;
  2300. };
  2301. /// \brief Kicks a user from the clan and/or blacklists a user so they cannot join. Only a clan leader or subleader can perform this operation. The operation can only be performed on members of lower status (leader can perform on subleader or regular member or nonmember, subleader on regular members or nonmember). If a member is banned, they are added to the banned table which contains the member's primary key, which user banned them, and the reason. Email is sent from myPrimaryKey to all leaders if a clan member is banned. Emails is furthermore sent to all clan members if successfully kicked.
  2302. /// \ingroup LOBBY_2_COMMANDS
  2303. struct Clans_KickAndBlacklistUser : public Lobby2Message
  2304. {
  2305. Clans_KickAndBlacklistUser() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2306. ~Clans_KickAndBlacklistUser() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2307. __L2_MSG_BASE_IMPL(Clans_KickAndBlacklistUser)
  2308. virtual bool RequiresAdmin(void) const {return false;}
  2309. virtual bool RequiresRankingPermission(void) const {return false;}
  2310. virtual bool CancelOnDisconnect(void) const {return false;}
  2311. virtual bool RequiresLogin(void) const {return true;}
  2312. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2313. virtual bool PrevalidateInput(void);
  2314. // Input parameters
  2315. RakNet::RakString clanHandle;
  2316. RakNet::RakString subject;
  2317. RakNet::RakString body;
  2318. int emailStatus;
  2319. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2320. RakNet::RakString targetHandle;
  2321. bool kick;
  2322. bool blacklist;
  2323. RakNet::RakString reason;
  2324. };
  2325. /// \brief Removes a user from the blacklist for this clan.
  2326. /// \ingroup LOBBY_2_COMMANDS
  2327. struct Clans_UnblacklistUser : public Lobby2Message
  2328. {
  2329. Clans_UnblacklistUser() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2330. ~Clans_UnblacklistUser() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2331. __L2_MSG_BASE_IMPL(Clans_UnblacklistUser)
  2332. virtual bool RequiresAdmin(void) const {return false;}
  2333. virtual bool RequiresRankingPermission(void) const {return false;}
  2334. virtual bool CancelOnDisconnect(void) const {return false;}
  2335. virtual bool RequiresLogin(void) const {return true;}
  2336. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2337. virtual bool PrevalidateInput(void);
  2338. // Input parameters
  2339. RakNet::RakString clanHandle;
  2340. RakNet::RakString targetHandle;
  2341. RakNet::RakString subject;
  2342. RakNet::RakString body;
  2343. int emailStatus;
  2344. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2345. };
  2346. /// \brief Returns a list of all members blacklisted from this clan. Each element in the list contains the handle of the user that did the ban, who was banned, when the user was banned, and the reason passed to ClanKickAndBlacklistUser
  2347. /// \ingroup LOBBY_2_COMMANDS
  2348. struct Clans_GetBlacklist : public Lobby2Message
  2349. {
  2350. __L2_MSG_BASE_IMPL(Clans_GetBlacklist)
  2351. virtual bool RequiresAdmin(void) const {return false;}
  2352. virtual bool RequiresRankingPermission(void) const {return false;}
  2353. virtual bool CancelOnDisconnect(void) const {return false;}
  2354. virtual bool RequiresLogin(void) const {return true;}
  2355. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2356. virtual bool PrevalidateInput(void);
  2357. // Input parameters
  2358. RakNet::RakString clanHandle;
  2359. // Output parameters
  2360. DataStructures::List<RakNet::RakString> blacklistedUsers;
  2361. };
  2362. /// \brief Returns all clan members for this clan. Each entry returned contains handle, description, binary data, status (leader, regular member, subleader).
  2363. /// \ingroup LOBBY_2_COMMANDS
  2364. struct Clans_GetMembers : public Lobby2Message
  2365. {
  2366. __L2_MSG_BASE_IMPL(Clans_GetMembers)
  2367. virtual bool RequiresAdmin(void) const {return false;}
  2368. virtual bool RequiresRankingPermission(void) const {return false;}
  2369. virtual bool CancelOnDisconnect(void) const {return true;}
  2370. virtual bool RequiresLogin(void) const {return true;}
  2371. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2372. virtual bool PrevalidateInput(void);
  2373. // Input parameters
  2374. RakNet::RakString clanHandle;
  2375. // Output parameters
  2376. RakNet::RakString clanLeader;
  2377. DataStructures::List<RakNet::RakString> clanMembersOtherThanLeader;
  2378. };
  2379. /// \brief Returns all clans names
  2380. /// \ingroup LOBBY_2_COMMANDS
  2381. struct Clans_GetList : public Lobby2Message
  2382. {
  2383. __L2_MSG_BASE_IMPL(Clans_GetList)
  2384. virtual bool RequiresAdmin(void) const {return false;}
  2385. virtual bool RequiresRankingPermission(void) const {return false;}
  2386. virtual bool CancelOnDisconnect(void) const {return true;}
  2387. virtual bool RequiresLogin(void) const {return true;}
  2388. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2389. // Input parameters
  2390. // Output parameters
  2391. DataStructures::List<RakNet::RakString> clanNames;
  2392. };
  2393. /// \brief Creates a new clan board for clan members to post in using AddPostToClanBoard. Clan boards are unique, and are destroyed when the clan is destroyed, or if DestroyClanBoard is called.
  2394. /// \ingroup LOBBY_2_COMMANDS
  2395. struct Clans_CreateBoard : public Lobby2Message
  2396. {
  2397. Clans_CreateBoard() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2398. ~Clans_CreateBoard() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2399. __L2_MSG_BASE_IMPL(Clans_CreateBoard)
  2400. virtual bool RequiresAdmin(void) const {return false;}
  2401. virtual bool RequiresRankingPermission(void) const {return false;}
  2402. virtual bool CancelOnDisconnect(void) const {return false;}
  2403. virtual bool RequiresLogin(void) const {return true;}
  2404. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2405. virtual bool PrevalidateInput(void);
  2406. // Input parameters
  2407. RakNet::RakString clanHandle;
  2408. RakNet::RakString clanBoardName;
  2409. bool allowPublicReads;
  2410. bool allowPublicWrites;
  2411. RakNet::RakString description;
  2412. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2413. // Output parameters
  2414. };
  2415. /// \brief Success, invalid parameter syntax, myPrimaryKey is not the leader or subleader of clanHandle, unknown myPrimaryKey, unknown clanHandle, unknown clanBoardName
  2416. /// \ingroup LOBBY_2_COMMANDS
  2417. struct Clans_DestroyBoard : public Lobby2Message
  2418. {
  2419. __L2_MSG_BASE_IMPL(Clans_DestroyBoard)
  2420. virtual bool RequiresAdmin(void) const {return false;}
  2421. virtual bool RequiresRankingPermission(void) const {return false;}
  2422. virtual bool CancelOnDisconnect(void) const {return false;}
  2423. virtual bool RequiresLogin(void) const {return true;}
  2424. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2425. virtual bool PrevalidateInput(void);
  2426. // Input parameters
  2427. RakNet::RakString clanHandle;
  2428. RakNet::RakString clanBoardName;
  2429. // Output parameters
  2430. };
  2431. /// \brief Each clan has a clan board that only clan members can post to. This adds a topic to the clan board. Posts should reference the primary key of the poster, so that even if the poster chagnes his or her handle, the post author is updated properly. Each post automatically stores the timestamp when it was created. Banned users may not add new posts to the clan board.
  2432. /// \ingroup LOBBY_2_COMMANDS
  2433. struct Clans_CreateNewTopic : public Lobby2Message
  2434. {
  2435. Clans_CreateNewTopic() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2436. ~Clans_CreateNewTopic() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2437. __L2_MSG_BASE_IMPL(Clans_CreateNewTopic)
  2438. virtual bool RequiresAdmin(void) const {return false;}
  2439. virtual bool RequiresRankingPermission(void) const {return false;}
  2440. virtual bool CancelOnDisconnect(void) const {return false;}
  2441. virtual bool RequiresLogin(void) const {return true;}
  2442. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2443. virtual bool PrevalidateInput(void);
  2444. // Input parameters
  2445. RakNet::RakString clanHandle;
  2446. RakNet::RakString clanBoardName;
  2447. RakNet::RakString body;
  2448. RakNet::RakString subject;
  2449. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2450. // Output parameters
  2451. unsigned int postId; // (unique for clanHandle)
  2452. };
  2453. /// \brief Replies to a topic created with Clans_CreateTopic(). If postId references a post within a topic, just add the reply to the last post. Banned users may not add new posts to the clan board.
  2454. /// \ingroup LOBBY_2_COMMANDS
  2455. struct Clans_ReplyToTopic : public Lobby2Message
  2456. {
  2457. Clans_ReplyToTopic() {binaryData=RakNet::OP_NEW<BinaryDataBlock>(_FILE_AND_LINE_);}
  2458. ~Clans_ReplyToTopic() {/*RakNet::OP_DELETE(binaryData,_FILE_AND_LINE_);*/}
  2459. __L2_MSG_BASE_IMPL(Clans_ReplyToTopic)
  2460. virtual bool RequiresAdmin(void) const {return false;}
  2461. virtual bool RequiresRankingPermission(void) const {return false;}
  2462. virtual bool CancelOnDisconnect(void) const {return false;}
  2463. virtual bool RequiresLogin(void) const {return true;}
  2464. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2465. virtual bool PrevalidateInput(void);
  2466. // Input parameters
  2467. unsigned int postId; // returned from Clans_CreateTopic()
  2468. RakNet::RakString subject;
  2469. RakNet::RakString body;
  2470. RakNetSmartPtr<BinaryDataBlock> binaryData;
  2471. };
  2472. /// \brief The clan leader or subleaders may remove posts or topics from a clan board.
  2473. /// \ingroup LOBBY_2_COMMANDS
  2474. struct Clans_RemovePost : public Lobby2Message
  2475. {
  2476. __L2_MSG_BASE_IMPL(Clans_RemovePost)
  2477. virtual bool RequiresAdmin(void) const {return false;}
  2478. virtual bool RequiresRankingPermission(void) const {return false;}
  2479. virtual bool CancelOnDisconnect(void) const {return false;}
  2480. virtual bool RequiresLogin(void) const {return true;}
  2481. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2482. // Input parameters
  2483. unsigned int postId; // returned from Clans_CreateTopic()
  2484. bool removeEntireTopic;
  2485. };
  2486. /// \brief Gets clan boards created for clanHandle. Boards are returned if we are a clan member, or if allowPublicReads in Clans_CreateBoard() was passed as false. However, if we are banned from this clan, no boards are returned.
  2487. /// \ingroup LOBBY_2_COMMANDS
  2488. struct Clans_GetBoards : public Lobby2Message
  2489. {
  2490. __L2_MSG_BASE_IMPL(Clans_GetBoards)
  2491. virtual bool RequiresAdmin(void) const {return false;}
  2492. virtual bool RequiresRankingPermission(void) const {return false;}
  2493. virtual bool CancelOnDisconnect(void) const {return true;}
  2494. virtual bool RequiresLogin(void) const {return true;}
  2495. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2496. virtual bool PrevalidateInput(void);
  2497. // Input parameters
  2498. RakNet::RakString clanHandle;
  2499. // Output parameters
  2500. DataStructures::List<RakNet::RakString> clanBoardsNames;
  2501. };
  2502. /// \brief Gets topics (posts that are not replies to other posts, created with Clans_CreateTopic()) for the specified clanHandle and clanBoardName. If we are not a clan member and the clan was created with allowPublicReads==false, then the user is not allowed to read topics
  2503. /// \ingroup LOBBY_2_COMMANDS
  2504. struct Clans_GetTopics : public Lobby2Message
  2505. {
  2506. __L2_MSG_BASE_IMPL(Clans_GetTopics)
  2507. virtual bool RequiresAdmin(void) const {return false;}
  2508. virtual bool RequiresRankingPermission(void) const {return false;}
  2509. virtual bool CancelOnDisconnect(void) const {return true;}
  2510. virtual bool RequiresLogin(void) const {return true;}
  2511. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2512. virtual bool PrevalidateInput(void);
  2513. // Input parameters
  2514. RakNet::RakString clanHandle;
  2515. RakNet::RakString clanBoardName;
  2516. };
  2517. /// \brief Gets all posts for a particular topic. If postId is not a topic but is instead a post in a topic, treat it as if the topic postId was passed. If we are not a clan member and the clan was created with allowPublicReads==false, then the user is not allowed to read topics
  2518. /// \ingroup LOBBY_2_COMMANDS
  2519. struct Clans_GetPosts : public Lobby2Message
  2520. {
  2521. __L2_MSG_BASE_IMPL(Clans_GetPosts)
  2522. virtual bool RequiresAdmin(void) const {return false;}
  2523. virtual bool RequiresRankingPermission(void) const {return false;}
  2524. virtual bool CancelOnDisconnect(void) const {return true;}
  2525. virtual bool RequiresLogin(void) const {return true;}
  2526. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2527. virtual bool PrevalidateInput(void);
  2528. // Input parameters
  2529. unsigned int postId;
  2530. };
  2531. struct Console_GameBootCheck : public Lobby2Message
  2532. {
  2533. __L2_MSG_BASE_IMPL(Console_GameBootCheck)
  2534. virtual bool RequiresAdmin(void) const {return false;}
  2535. virtual bool RequiresRankingPermission(void) const {return false;}
  2536. virtual bool CancelOnDisconnect(void) const {return true;}
  2537. virtual bool RequiresLogin(void) const {return true;}
  2538. };
  2539. struct Console_GetGameBootInviteDetails : public Lobby2Message
  2540. {
  2541. __L2_MSG_BASE_IMPL(Console_GetGameBootInviteDetails)
  2542. virtual bool RequiresAdmin(void) const {return false;}
  2543. virtual bool RequiresRankingPermission(void) const {return false;}
  2544. virtual bool CancelOnDisconnect(void) const {return true;}
  2545. virtual bool RequiresLogin(void) const {return true;}
  2546. };
  2547. // \brief Call the function to get the list of servers available.
  2548. // \note Does nothing on the PC.
  2549. struct Console_GetServerStatus : public Lobby2Message
  2550. {
  2551. __L2_MSG_BASE_IMPL(Console_GetServerStatus)
  2552. virtual bool RequiresAdmin(void) const {return false;}
  2553. virtual bool RequiresRankingPermission(void) const {return false;}
  2554. virtual bool CancelOnDisconnect(void) const {return true;}
  2555. virtual bool RequiresLogin(void) const {return true;}
  2556. };
  2557. // \brief Given a server, get the list of worlds
  2558. // \note Does nothing on the PC.
  2559. struct Console_GetWorldListFromServer : public Lobby2Message
  2560. {
  2561. __L2_MSG_BASE_IMPL(Console_GetWorldListFromServer)
  2562. virtual bool RequiresAdmin(void) const {return false;}
  2563. virtual bool RequiresRankingPermission(void) const {return false;}
  2564. virtual bool CancelOnDisconnect(void) const {return true;}
  2565. virtual bool RequiresLogin(void) const {return true;}
  2566. };
  2567. // Given a world, get the list of lobbies
  2568. // Does nothing on the PC.
  2569. struct Console_GetLobbyListFromWorld : public Lobby2Message
  2570. {
  2571. __L2_MSG_BASE_IMPL(Console_GetLobbyListFromWorld)
  2572. virtual bool RequiresAdmin(void) const {return false;}
  2573. virtual bool RequiresRankingPermission(void) const {return false;}
  2574. virtual bool CancelOnDisconnect(void) const {return true;}
  2575. virtual bool RequiresLogin(void) const {return true;}
  2576. };
  2577. // Given a lobby, join that lobby
  2578. // Does nothing on the PC.
  2579. struct Console_JoinLobby : public Lobby2Message
  2580. {
  2581. __L2_MSG_BASE_IMPL(Console_JoinLobby)
  2582. virtual bool RequiresAdmin(void) const {return false;}
  2583. virtual bool RequiresRankingPermission(void) const {return false;}
  2584. virtual bool CancelOnDisconnect(void) const {return true;}
  2585. virtual bool RequiresLogin(void) const {return true;}
  2586. };
  2587. // Given a lobby, leave that lobby.
  2588. // Does nothing on the PC.
  2589. struct Console_LeaveLobby : public Lobby2Message
  2590. {
  2591. __L2_MSG_BASE_IMPL(Console_LeaveLobby)
  2592. virtual bool RequiresAdmin(void) const {return false;}
  2593. virtual bool RequiresRankingPermission(void) const {return false;}
  2594. virtual bool CancelOnDisconnect(void) const {return true;}
  2595. virtual bool RequiresLogin(void) const {return true;}
  2596. };
  2597. // Send a message to a lobby that you have joined
  2598. // Does nothing on the PC.
  2599. struct Console_SendLobbyChatMessage : public Lobby2Message
  2600. {
  2601. __L2_MSG_BASE_IMPL(Console_SendLobbyChatMessage)
  2602. virtual bool RequiresAdmin(void) const {return false;}
  2603. virtual bool RequiresRankingPermission(void) const {return false;}
  2604. virtual bool CancelOnDisconnect(void) const {return true;}
  2605. virtual bool RequiresLogin(void) const {return true;}
  2606. // Input
  2607. RakNet::RakString message;
  2608. };
  2609. // Search rooms in the lobby
  2610. // Does nothing on the PC.
  2611. struct Console_SearchRooms : public Lobby2Message
  2612. {
  2613. __L2_MSG_BASE_IMPL(Console_SearchRooms)
  2614. virtual bool RequiresAdmin(void) const {return false;}
  2615. virtual bool RequiresRankingPermission(void) const {return false;}
  2616. virtual bool CancelOnDisconnect(void) const {return true;}
  2617. virtual bool RequiresLogin(void) const {return true;}
  2618. };
  2619. // Get information about a room
  2620. // Does nothing on the PC.
  2621. struct Console_GetRoomDetails : public Lobby2Message
  2622. {
  2623. __L2_MSG_BASE_IMPL(Console_GetRoomDetails)
  2624. virtual bool RequiresAdmin(void) const {return false;}
  2625. virtual bool RequiresRankingPermission(void) const {return false;}
  2626. virtual bool CancelOnDisconnect(void) const {return true;}
  2627. virtual bool RequiresLogin(void) const {return true;}
  2628. };
  2629. // Send a chat message to the lobby
  2630. // Does nothing on the PC.
  2631. struct Console_GetLobbyMemberData : public Lobby2Message
  2632. {
  2633. __L2_MSG_BASE_IMPL(Console_GetLobbyMemberData)
  2634. virtual bool RequiresAdmin(void) const {return false;}
  2635. virtual bool RequiresRankingPermission(void) const {return false;}
  2636. virtual bool CancelOnDisconnect(void) const {return true;}
  2637. virtual bool RequiresLogin(void) const {return true;}
  2638. };
  2639. struct Console_CreateRoom : public Lobby2Message
  2640. {
  2641. __L2_MSG_BASE_IMPL(Console_CreateRoom)
  2642. virtual bool RequiresAdmin(void) const {return false;}
  2643. virtual bool RequiresRankingPermission(void) const {return false;}
  2644. virtual bool CancelOnDisconnect(void) const {return true;}
  2645. virtual bool RequiresLogin(void) const {return true;}
  2646. int publicSlots;
  2647. int privateSlots;
  2648. };
  2649. // XBOX only - needed after creating or joining a room
  2650. struct Console_SignIntoRoom : public Lobby2Message
  2651. {
  2652. __L2_MSG_BASE_IMPL(Console_SignIntoRoom)
  2653. virtual bool RequiresAdmin(void) const {return false;}
  2654. virtual bool RequiresRankingPermission(void) const {return false;}
  2655. virtual bool CancelOnDisconnect(void) const {return true;}
  2656. virtual bool RequiresLogin(void) const {return true;}
  2657. };
  2658. struct Console_SetRoomSearchProperties : public Lobby2Message
  2659. {
  2660. __L2_MSG_BASE_IMPL(Console_SetRoomSearchProperties)
  2661. virtual bool RequiresAdmin(void) const {return false;}
  2662. virtual bool RequiresRankingPermission(void) const {return false;}
  2663. virtual bool CancelOnDisconnect(void) const {return true;}
  2664. virtual bool RequiresLogin(void) const {return true;}
  2665. };
  2666. struct Console_UpdateRoomParameters : public Lobby2Message
  2667. {
  2668. __L2_MSG_BASE_IMPL(Console_UpdateRoomParameters)
  2669. virtual bool RequiresAdmin(void) const {return false;}
  2670. virtual bool RequiresRankingPermission(void) const {return false;}
  2671. virtual bool CancelOnDisconnect(void) const {return true;}
  2672. virtual bool RequiresLogin(void) const {return true;}
  2673. };
  2674. struct Console_JoinRoom : public Lobby2Message
  2675. {
  2676. __L2_MSG_BASE_IMPL(Console_JoinRoom)
  2677. virtual bool RequiresAdmin(void) const {return false;}
  2678. virtual bool RequiresRankingPermission(void) const {return false;}
  2679. virtual bool CancelOnDisconnect(void) const {return true;}
  2680. virtual bool RequiresLogin(void) const {return true;}
  2681. };
  2682. struct Console_LeaveRoom : public Lobby2Message
  2683. {
  2684. __L2_MSG_BASE_IMPL(Console_LeaveRoom)
  2685. virtual bool RequiresAdmin(void) const {return false;}
  2686. virtual bool RequiresRankingPermission(void) const {return false;}
  2687. virtual bool CancelOnDisconnect(void) const {return true;}
  2688. virtual bool RequiresLogin(void) const {return true;}
  2689. };
  2690. struct Console_SendLobbyInvitationToRoom : public Lobby2Message
  2691. {
  2692. __L2_MSG_BASE_IMPL(Console_SendLobbyInvitationToRoom)
  2693. virtual bool RequiresAdmin(void) const {return false;}
  2694. virtual bool RequiresRankingPermission(void) const {return false;}
  2695. virtual bool CancelOnDisconnect(void) const {return true;}
  2696. virtual bool RequiresLogin(void) const {return true;}
  2697. };
  2698. struct Console_SendGUIInvitationToRoom : public Lobby2Message
  2699. {
  2700. __L2_MSG_BASE_IMPL(Console_SendGUIInvitationToRoom)
  2701. virtual bool RequiresAdmin(void) const {return false;}
  2702. virtual bool RequiresRankingPermission(void) const {return false;}
  2703. virtual bool CancelOnDisconnect(void) const {return true;}
  2704. virtual bool RequiresLogin(void) const {return true;}
  2705. };
  2706. struct Console_SendDataMessageToUser : public Lobby2Message
  2707. {
  2708. __L2_MSG_BASE_IMPL(Console_SendDataMessageToUser)
  2709. virtual bool RequiresAdmin(void) const {return false;}
  2710. virtual bool RequiresRankingPermission(void) const {return false;}
  2711. virtual bool CancelOnDisconnect(void) const {return true;}
  2712. virtual bool RequiresLogin(void) const {return true;}
  2713. };
  2714. struct Console_SendRoomChatMessage : public Lobby2Message
  2715. {
  2716. __L2_MSG_BASE_IMPL(Console_SendRoomChatMessage)
  2717. virtual bool RequiresAdmin(void) const {return false;}
  2718. virtual bool RequiresRankingPermission(void) const {return false;}
  2719. virtual bool CancelOnDisconnect(void) const {return true;}
  2720. virtual bool RequiresLogin(void) const {return true;}
  2721. RakNet::RakString message;
  2722. };
  2723. struct Console_ShowFriendsUI : public Lobby2Message
  2724. {
  2725. __L2_MSG_BASE_IMPL(Console_ShowFriendsUI)
  2726. virtual bool RequiresAdmin(void) const {return false;}
  2727. virtual bool RequiresRankingPermission(void) const {return false;}
  2728. virtual bool CancelOnDisconnect(void) const {return true;}
  2729. virtual bool RequiresLogin(void) const {return true;}
  2730. };
  2731. struct Console_EndGame : public Lobby2Message
  2732. {
  2733. __L2_MSG_BASE_IMPL(Console_EndGame)
  2734. virtual bool RequiresAdmin(void) const {return false;}
  2735. virtual bool RequiresRankingPermission(void) const {return false;}
  2736. virtual bool CancelOnDisconnect(void) const {return true;}
  2737. virtual bool RequiresLogin(void) const {return true;}
  2738. };
  2739. struct Console_StartGame : public Lobby2Message
  2740. {
  2741. __L2_MSG_BASE_IMPL(Console_StartGame)
  2742. virtual bool RequiresAdmin(void) const {return false;}
  2743. virtual bool RequiresRankingPermission(void) const {return false;}
  2744. virtual bool CancelOnDisconnect(void) const {return true;}
  2745. virtual bool RequiresLogin(void) const {return true;}
  2746. };
  2747. struct Console_ShowPartyUI : public Lobby2Message
  2748. {
  2749. __L2_MSG_BASE_IMPL(Console_ShowPartyUI)
  2750. virtual bool RequiresAdmin(void) const {return false;}
  2751. virtual bool RequiresRankingPermission(void) const {return false;}
  2752. virtual bool CancelOnDisconnect(void) const {return true;}
  2753. virtual bool RequiresLogin(void) const {return true;}
  2754. };
  2755. struct Console_ShowMessagesUI : public Lobby2Message
  2756. {
  2757. __L2_MSG_BASE_IMPL(Console_ShowMessagesUI)
  2758. virtual bool RequiresAdmin(void) const {return false;}
  2759. virtual bool RequiresRankingPermission(void) const {return false;}
  2760. virtual bool CancelOnDisconnect(void) const {return true;}
  2761. virtual bool RequiresLogin(void) const {return true;}
  2762. };
  2763. struct Console_ShowGUIInvitationsToRooms : public Lobby2Message
  2764. {
  2765. __L2_MSG_BASE_IMPL(Console_ShowGUIInvitationsToRooms)
  2766. virtual bool RequiresAdmin(void) const {return false;}
  2767. virtual bool RequiresRankingPermission(void) const {return false;}
  2768. virtual bool CancelOnDisconnect(void) const {return true;}
  2769. virtual bool RequiresLogin(void) const {return true;}
  2770. };
  2771. struct Console_EnableDisableRoomVoiceChat : public Lobby2Message
  2772. {
  2773. __L2_MSG_BASE_IMPL(Console_EnableDisableRoomVoiceChat)
  2774. virtual bool RequiresAdmin(void) const {return false;}
  2775. virtual bool RequiresRankingPermission(void) const {return false;}
  2776. virtual bool CancelOnDisconnect(void) const {return true;}
  2777. virtual bool RequiresLogin(void) const {return true;}
  2778. };
  2779. /// \ingroup LOBBY_2_NOTIFICATIONS
  2780. struct Notification_Client_RemoteLogin : public Lobby2Message
  2781. {
  2782. __L2_MSG_BASE_IMPL(Notification_Client_RemoteLogin)
  2783. virtual bool RequiresAdmin(void) const {return true;}
  2784. virtual bool RequiresRankingPermission(void) const {return false;}
  2785. virtual bool CancelOnDisconnect(void) const {return false;}
  2786. virtual bool RequiresLogin(void) const {return false;}
  2787. virtual bool IsNotification(void) const {return true;}
  2788. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2789. RakNet::RakString handle;
  2790. };
  2791. /// \ingroup LOBBY_2_NOTIFICATIONS
  2792. struct Notification_Client_IgnoreStatus : public Lobby2Message
  2793. {
  2794. __L2_MSG_BASE_IMPL(Notification_Client_IgnoreStatus)
  2795. virtual bool RequiresAdmin(void) const {return true;}
  2796. virtual bool RequiresRankingPermission(void) const {return false;}
  2797. virtual bool CancelOnDisconnect(void) const {return false;}
  2798. virtual bool RequiresLogin(void) const {return false;}
  2799. virtual bool IsNotification(void) const {return true;}
  2800. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2801. bool nowIgnored;
  2802. RakNet::RakString otherHandle;
  2803. };
  2804. /// \ingroup LOBBY_2_NOTIFICATIONS
  2805. struct Notification_Friends_StatusChange : public Lobby2Message
  2806. {
  2807. __L2_MSG_BASE_IMPL(Notification_Friends_StatusChange)
  2808. virtual bool RequiresAdmin(void) const {return true;}
  2809. virtual bool RequiresRankingPermission(void) const {return false;}
  2810. virtual bool CancelOnDisconnect(void) const {return false;}
  2811. virtual bool RequiresLogin(void) const {return false;}
  2812. virtual bool IsNotification(void) const {return true;}
  2813. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2814. enum Status
  2815. {
  2816. FRIEND_LOGGED_IN,
  2817. FRIEND_LOGGED_IN_DIFFERENT_CONTEXT, // PS3 only
  2818. FRIEND_LOGGED_OFF,
  2819. FRIEND_AFK, // Vita only
  2820. FRIEND_ACCOUNT_WAS_DELETED,
  2821. YOU_WERE_REMOVED_AS_A_FRIEND,
  2822. GOT_INVITATION_TO_BE_FRIENDS,
  2823. THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS,
  2824. THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS,
  2825. } op;
  2826. const char *OpToString(void) const {
  2827. switch (op)
  2828. {
  2829. case FRIEND_LOGGED_IN:
  2830. return "FRIEND_LOGGED_IN";
  2831. case FRIEND_LOGGED_IN_DIFFERENT_CONTEXT:
  2832. return "FRIEND_LOGGED_IN_DIFFERENT_CONTEXT";
  2833. case FRIEND_LOGGED_OFF:
  2834. return "FRIEND_LOGGED_OFF";
  2835. case FRIEND_ACCOUNT_WAS_DELETED:
  2836. return "FRIEND_ACCOUNT_WAS_DELETED";
  2837. case YOU_WERE_REMOVED_AS_A_FRIEND:
  2838. return "YOU_WERE_REMOVED_AS_A_FRIEND";
  2839. case GOT_INVITATION_TO_BE_FRIENDS:
  2840. return "GOT_INVITATION_TO_BE_FRIENDS";
  2841. case THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS:
  2842. return "THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS";
  2843. case THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS:
  2844. return "THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS";
  2845. }
  2846. return "Error in OpToString::Notification_Friends_StatusChange";
  2847. }
  2848. RakNet::RakString otherHandle;
  2849. RakNet::Lobby2Presence presence;
  2850. // If \a op was generated due to YOU_WERE_REMOVED_AS_A_FRIEND,GOT_INVITATION_TO_BE_FRIENDS,THEY_ACCEPTED_OUR_INVITATION_TO_BE_FRIENDS, or THEY_REJECTED_OUR_INVITATION_TO_BE_FRIENDS
  2851. // Then a copy of the subject and body of the corresponding email is here for convenience
  2852. RakNet::RakString subject;
  2853. RakNet::RakString body;
  2854. };
  2855. /// \ingroup LOBBY_2_NOTIFICATIONS
  2856. struct Notification_Friends_PresenceUpdate : public Lobby2Message
  2857. {
  2858. __L2_MSG_BASE_IMPL(Notification_Friends_PresenceUpdate)
  2859. virtual bool RequiresAdmin(void) const {return true;}
  2860. virtual bool RequiresRankingPermission(void) const {return false;}
  2861. virtual bool CancelOnDisconnect(void) const {return false;}
  2862. virtual bool RequiresLogin(void) const {return false;}
  2863. virtual bool IsNotification(void) const {return true;}
  2864. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2865. Lobby2Presence newPresence;
  2866. RakNet::RakString otherHandle;
  2867. };
  2868. /// \ingroup LOBBY_2_NOTIFICATIONS
  2869. struct Notification_User_ChangedHandle : public Lobby2Message
  2870. {
  2871. __L2_MSG_BASE_IMPL(Notification_User_ChangedHandle)
  2872. virtual bool RequiresAdmin(void) const {return true;}
  2873. virtual bool RequiresRankingPermission(void) const {return false;}
  2874. virtual bool CancelOnDisconnect(void) const {return false;}
  2875. virtual bool RequiresLogin(void) const {return false;}
  2876. virtual bool IsNotification(void) const {return true;}
  2877. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2878. RakNet::RakString oldHandle, newHandle;
  2879. };
  2880. /// \ingroup LOBBY_2_NOTIFICATIONS
  2881. struct Notification_Friends_CreatedClan : public Lobby2Message
  2882. {
  2883. __L2_MSG_BASE_IMPL(Notification_Friends_CreatedClan)
  2884. virtual bool RequiresAdmin(void) const {return true;}
  2885. virtual bool RequiresRankingPermission(void) const {return false;}
  2886. virtual bool CancelOnDisconnect(void) const {return false;}
  2887. virtual bool RequiresLogin(void) const {return false;}
  2888. virtual bool IsNotification(void) const {return true;}
  2889. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2890. RakNet::RakString otherHandle;
  2891. RakNet::RakString clanName;
  2892. };
  2893. /// \ingroup LOBBY_2_NOTIFICATIONS
  2894. struct Notification_Emails_Received : public Lobby2Message
  2895. {
  2896. __L2_MSG_BASE_IMPL(Notification_Emails_Received)
  2897. virtual bool RequiresAdmin(void) const {return true;}
  2898. virtual bool RequiresRankingPermission(void) const {return false;}
  2899. virtual bool CancelOnDisconnect(void) const {return false;}
  2900. virtual bool RequiresLogin(void) const {return false;}
  2901. virtual bool IsNotification(void) const {return true;}
  2902. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2903. RakNet::RakString sender;
  2904. RakNet::RakString subject;
  2905. unsigned int emailId;
  2906. };
  2907. /// \ingroup LOBBY_2_NOTIFICATIONS
  2908. struct Notification_Clans_GrantLeader : public Lobby2Message
  2909. {
  2910. __L2_MSG_BASE_IMPL(Notification_Clans_GrantLeader)
  2911. virtual bool RequiresAdmin(void) const {return true;}
  2912. virtual bool RequiresRankingPermission(void) const {return false;}
  2913. virtual bool CancelOnDisconnect(void) const {return false;}
  2914. virtual bool RequiresLogin(void) const {return false;}
  2915. virtual bool IsNotification(void) const {return true;}
  2916. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2917. RakNet::RakString clanHandle;
  2918. RakNet::RakString newLeader;
  2919. RakNet::RakString oldLeader;
  2920. };
  2921. /// \ingroup LOBBY_2_NOTIFICATIONS
  2922. struct Notification_Clans_SetSubleaderStatus : public Lobby2Message
  2923. {
  2924. __L2_MSG_BASE_IMPL(Notification_Clans_SetSubleaderStatus)
  2925. virtual bool RequiresAdmin(void) const {return true;}
  2926. virtual bool RequiresRankingPermission(void) const {return false;}
  2927. virtual bool CancelOnDisconnect(void) const {return false;}
  2928. virtual bool RequiresLogin(void) const {return false;}
  2929. virtual bool IsNotification(void) const {return true;}
  2930. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2931. RakNet::RakString clanHandle;
  2932. RakNet::RakString targetHandle;
  2933. RakNet::RakString leaderHandle;
  2934. bool setToSubleader;
  2935. };
  2936. /// \ingroup LOBBY_2_NOTIFICATIONS
  2937. struct Notification_Clans_SetMemberRank : public Lobby2Message
  2938. {
  2939. __L2_MSG_BASE_IMPL(Notification_Clans_SetMemberRank)
  2940. virtual bool RequiresAdmin(void) const {return true;}
  2941. virtual bool RequiresRankingPermission(void) const {return false;}
  2942. virtual bool CancelOnDisconnect(void) const {return false;}
  2943. virtual bool RequiresLogin(void) const {return false;}
  2944. virtual bool IsNotification(void) const {return true;}
  2945. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2946. RakNet::RakString clanHandle;
  2947. RakNet::RakString targetHandle;
  2948. RakNet::RakString leaderHandle;
  2949. unsigned int newRank;
  2950. };
  2951. /// \ingroup LOBBY_2_NOTIFICATIONS
  2952. struct Notification_Clans_ChangeHandle : public Lobby2Message
  2953. {
  2954. __L2_MSG_BASE_IMPL(Notification_Clans_ChangeHandle)
  2955. virtual bool RequiresAdmin(void) const {return true;}
  2956. virtual bool RequiresRankingPermission(void) const {return false;}
  2957. virtual bool CancelOnDisconnect(void) const {return false;}
  2958. virtual bool RequiresLogin(void) const {return false;}
  2959. virtual bool IsNotification(void) const {return true;}
  2960. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2961. RakNet::RakString oldClanHandle;
  2962. RakNet::RakString newClanHandle;
  2963. RakNet::RakString leaderHandle;
  2964. };
  2965. /// \ingroup LOBBY_2_NOTIFICATIONS
  2966. struct Notification_Clans_Leave : public Lobby2Message
  2967. {
  2968. __L2_MSG_BASE_IMPL(Notification_Clans_Leave)
  2969. virtual bool RequiresAdmin(void) const {return true;}
  2970. virtual bool RequiresRankingPermission(void) const {return false;}
  2971. virtual bool CancelOnDisconnect(void) const {return false;}
  2972. virtual bool RequiresLogin(void) const {return false;}
  2973. virtual bool IsNotification(void) const {return true;}
  2974. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2975. RakNet::RakString clanHandle;
  2976. RakNet::RakString targetHandle;
  2977. };
  2978. /// \ingroup LOBBY_2_NOTIFICATIONS
  2979. struct Notification_Clans_PendingJoinStatus : public Lobby2Message
  2980. {
  2981. __L2_MSG_BASE_IMPL(Notification_Clans_PendingJoinStatus)
  2982. virtual bool RequiresAdmin(void) const {return true;}
  2983. virtual bool RequiresRankingPermission(void) const {return false;}
  2984. virtual bool CancelOnDisconnect(void) const {return false;}
  2985. virtual bool RequiresLogin(void) const {return false;}
  2986. virtual bool IsNotification(void) const {return true;}
  2987. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  2988. RakNet::RakString clanHandle;
  2989. RakNet::RakString sourceHandle;
  2990. RakNet::RakString targetHandle;
  2991. // clanMemberHandle is is the clan member that is withdrawing an invitation, or rejecting a request
  2992. RakNet::RakString clanMemberHandle;
  2993. // The combination of major and minor op describe this notification
  2994. // For example, JOIN_CLAN_INVITATION + JOIN_WITHDRAWN means that an invitation to join the clan was withdrawn by targetHandle
  2995. // JOIN_CLAN_REQUEST + JOIN_REJECTED means that our request to join this clan was rejected by targetHandle
  2996. enum MajorOp
  2997. {
  2998. JOIN_CLAN_INVITATION,
  2999. JOIN_CLAN_REQUEST,
  3000. } majorOp;
  3001. enum MinorOp
  3002. {
  3003. JOIN_SENT,
  3004. JOIN_WITHDRAWN,
  3005. JOIN_REJECTED,
  3006. } minorOp;
  3007. };
  3008. /// \ingroup LOBBY_2_NOTIFICATIONS
  3009. struct Notification_Clans_NewClanMember : public Lobby2Message
  3010. {
  3011. __L2_MSG_BASE_IMPL(Notification_Clans_NewClanMember)
  3012. virtual bool RequiresAdmin(void) const {return true;}
  3013. virtual bool RequiresRankingPermission(void) const {return false;}
  3014. virtual bool CancelOnDisconnect(void) const {return false;}
  3015. virtual bool RequiresLogin(void) const {return false;}
  3016. virtual bool IsNotification(void) const {return true;}
  3017. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  3018. RakNet::RakString clanHandle;
  3019. RakNet::RakString targetHandle;
  3020. };
  3021. /// \ingroup LOBBY_2_NOTIFICATIONS
  3022. struct Notification_Clans_KickAndBlacklistUser : public Lobby2Message
  3023. {
  3024. __L2_MSG_BASE_IMPL(Notification_Clans_KickAndBlacklistUser)
  3025. virtual bool RequiresAdmin(void) const {return true;}
  3026. virtual bool RequiresRankingPermission(void) const {return false;}
  3027. virtual bool CancelOnDisconnect(void) const {return false;}
  3028. virtual bool RequiresLogin(void) const {return false;}
  3029. virtual bool IsNotification(void) const {return true;}
  3030. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  3031. RakNet::RakString clanHandle;
  3032. RakNet::RakString targetHandle;
  3033. RakNet::RakString blacklistingUserHandle;
  3034. // If true, they were both kicked and blacklisted. If false, they were only blacklisted (not currently in the clan)
  3035. bool targetHandleWasKicked;
  3036. RakNet::RakString reason;
  3037. };
  3038. /// \ingroup LOBBY_2_NOTIFICATIONS
  3039. struct Notification_Clans_UnblacklistUser : public Lobby2Message
  3040. {
  3041. __L2_MSG_BASE_IMPL(Notification_Clans_UnblacklistUser)
  3042. virtual bool RequiresAdmin(void) const {return true;}
  3043. virtual bool RequiresRankingPermission(void) const {return false;}
  3044. virtual bool CancelOnDisconnect(void) const {return false;}
  3045. virtual bool RequiresLogin(void) const {return false;}
  3046. virtual bool IsNotification(void) const {return true;}
  3047. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  3048. RakNet::RakString clanHandle;
  3049. RakNet::RakString targetHandle;
  3050. // Currently this is always the clan leader, since subleaders cannot unblacklist
  3051. RakNet::RakString unblacklistingUserHandle;
  3052. };
  3053. /// \ingroup LOBBY_2_NOTIFICATIONS
  3054. struct Notification_Clans_Destroyed : public Lobby2Message
  3055. {
  3056. __L2_MSG_BASE_IMPL(Notification_Clans_Destroyed)
  3057. virtual bool RequiresAdmin(void) const {return true;}
  3058. virtual bool RequiresRankingPermission(void) const {return false;}
  3059. virtual bool CancelOnDisconnect(void) const {return false;}
  3060. virtual bool RequiresLogin(void) const {return false;}
  3061. virtual bool IsNotification(void) const {return true;}
  3062. virtual void Serialize( bool writeToBitstream, bool serializeOutput, RakNet::BitStream *bitStream );
  3063. RakNet::RakString clanHandle;
  3064. RakNet::RakString oldClanLeader;
  3065. };
  3066. /// \ingroup LOBBY_2_NOTIFICATIONS
  3067. struct Notification_Console_CableDisconnected : public Lobby2Message
  3068. {
  3069. __L2_MSG_BASE_IMPL(Notification_Console_CableDisconnected)
  3070. virtual bool RequiresAdmin(void) const {return true;}
  3071. virtual bool RequiresRankingPermission(void) const {return false;}
  3072. virtual bool CancelOnDisconnect(void) const {return false;}
  3073. virtual bool RequiresLogin(void) const {return false;}
  3074. virtual bool IsNotification(void) const {return true;}
  3075. };
  3076. /// \ingroup LOBBY_2_NOTIFICATIONS
  3077. struct Notification_Console_ContextError : public Lobby2Message
  3078. {
  3079. __L2_MSG_BASE_IMPL(Notification_Console_ContextError)
  3080. virtual bool RequiresAdmin(void) const {return true;}
  3081. virtual bool RequiresRankingPermission(void) const {return false;}
  3082. virtual bool CancelOnDisconnect(void) const {return false;}
  3083. virtual bool RequiresLogin(void) const {return false;}
  3084. virtual bool IsNotification(void) const {return true;}
  3085. };
  3086. /// \ingroup LOBBY_2_NOTIFICATIONS
  3087. struct Notification_Console_MemberJoinedLobby : public Lobby2Message
  3088. {
  3089. __L2_MSG_BASE_IMPL(Notification_Console_MemberJoinedLobby)
  3090. virtual bool RequiresAdmin(void) const {return true;}
  3091. virtual bool RequiresRankingPermission(void) const {return false;}
  3092. virtual bool CancelOnDisconnect(void) const {return false;}
  3093. virtual bool RequiresLogin(void) const {return false;}
  3094. virtual bool IsNotification(void) const {return true;}
  3095. RakNet::RakString targetHandle;
  3096. };
  3097. /// \ingroup LOBBY_2_NOTIFICATIONS
  3098. struct Notification_Console_MemberLeftLobby : public Lobby2Message
  3099. {
  3100. __L2_MSG_BASE_IMPL(Notification_Console_MemberLeftLobby)
  3101. virtual bool RequiresAdmin(void) const {return true;}
  3102. virtual bool RequiresRankingPermission(void) const {return false;}
  3103. virtual bool CancelOnDisconnect(void) const {return false;}
  3104. virtual bool RequiresLogin(void) const {return false;}
  3105. virtual bool IsNotification(void) const {return true;}
  3106. RakNet::RakString targetHandle;
  3107. };
  3108. /// \ingroup LOBBY_2_NOTIFICATIONS
  3109. struct Notification_Console_LobbyDestroyed : public Lobby2Message
  3110. {
  3111. __L2_MSG_BASE_IMPL(Notification_Console_LobbyDestroyed)
  3112. virtual bool RequiresAdmin(void) const {return true;}
  3113. virtual bool RequiresRankingPermission(void) const {return false;}
  3114. virtual bool CancelOnDisconnect(void) const {return false;}
  3115. virtual bool RequiresLogin(void) const {return false;}
  3116. virtual bool IsNotification(void) const {return true;}
  3117. };
  3118. /// \ingroup LOBBY_2_NOTIFICATIONS
  3119. struct Notification_Console_LobbyMemberDataUpdated : public Lobby2Message
  3120. {
  3121. __L2_MSG_BASE_IMPL(Notification_Console_LobbyMemberDataUpdated)
  3122. virtual bool RequiresAdmin(void) const {return true;}
  3123. virtual bool RequiresRankingPermission(void) const {return false;}
  3124. virtual bool CancelOnDisconnect(void) const {return false;}
  3125. virtual bool RequiresLogin(void) const {return false;}
  3126. virtual bool IsNotification(void) const {return true;}
  3127. };
  3128. /// \ingroup LOBBY_2_NOTIFICATIONS
  3129. struct Notification_Console_LobbyGotChatMessage : public Lobby2Message
  3130. {
  3131. __L2_MSG_BASE_IMPL(Notification_Console_LobbyGotChatMessage)
  3132. virtual bool RequiresAdmin(void) const {return true;}
  3133. virtual bool RequiresRankingPermission(void) const {return false;}
  3134. virtual bool CancelOnDisconnect(void) const {return false;}
  3135. virtual bool RequiresLogin(void) const {return false;}
  3136. virtual bool IsNotification(void) const {return true;}
  3137. RakNet::RakString sender;
  3138. RakNet::RakString message;
  3139. };
  3140. /// \ingroup LOBBY_2_NOTIFICATIONS
  3141. struct Notification_Console_LobbyGotRoomInvitation : public Lobby2Message
  3142. {
  3143. __L2_MSG_BASE_IMPL(Notification_Console_LobbyGotRoomInvitation)
  3144. virtual bool RequiresAdmin(void) const {return true;}
  3145. virtual bool RequiresRankingPermission(void) const {return false;}
  3146. virtual bool CancelOnDisconnect(void) const {return false;}
  3147. virtual bool RequiresLogin(void) const {return false;}
  3148. virtual bool IsNotification(void) const {return true;}
  3149. RakNet::RakString sender;
  3150. };
  3151. /// \ingroup LOBBY_2_NOTIFICATIONS
  3152. struct Notification_Console_MemberJoinedRoom : public Lobby2Message
  3153. {
  3154. __L2_MSG_BASE_IMPL(Notification_Console_MemberJoinedRoom)
  3155. virtual bool RequiresAdmin(void) const {return true;}
  3156. virtual bool RequiresRankingPermission(void) const {return false;}
  3157. virtual bool CancelOnDisconnect(void) const {return false;}
  3158. virtual bool RequiresLogin(void) const {return false;}
  3159. virtual bool IsNotification(void) const {return true;}
  3160. RakNet::RakString memberName;
  3161. };
  3162. /// \ingroup LOBBY_2_NOTIFICATIONS
  3163. struct Notification_Console_MemberLeftRoom : public Lobby2Message
  3164. {
  3165. __L2_MSG_BASE_IMPL(Notification_Console_MemberLeftRoom)
  3166. virtual bool RequiresAdmin(void) const {return true;}
  3167. virtual bool RequiresRankingPermission(void) const {return false;}
  3168. virtual bool CancelOnDisconnect(void) const {return false;}
  3169. virtual bool RequiresLogin(void) const {return false;}
  3170. virtual bool IsNotification(void) const {return true;}
  3171. RakNet::RakString memberName;
  3172. };
  3173. /// \ingroup LOBBY_2_NOTIFICATIONS
  3174. struct Notification_Console_KickedOutOfRoom : public Lobby2Message
  3175. {
  3176. __L2_MSG_BASE_IMPL(Notification_Console_KickedOutOfRoom)
  3177. virtual bool RequiresAdmin(void) const {return true;}
  3178. virtual bool RequiresRankingPermission(void) const {return false;}
  3179. virtual bool CancelOnDisconnect(void) const {return false;}
  3180. virtual bool RequiresLogin(void) const {return false;}
  3181. virtual bool IsNotification(void) const {return true;}
  3182. };
  3183. /// \ingroup LOBBY_2_NOTIFICATIONS
  3184. struct Notification_Console_RoomWasDestroyed : public Lobby2Message
  3185. {
  3186. __L2_MSG_BASE_IMPL(Notification_Console_RoomWasDestroyed)
  3187. virtual bool RequiresAdmin(void) const {return true;}
  3188. virtual bool RequiresRankingPermission(void) const {return false;}
  3189. virtual bool CancelOnDisconnect(void) const {return false;}
  3190. virtual bool RequiresLogin(void) const {return false;}
  3191. virtual bool IsNotification(void) const {return true;}
  3192. };
  3193. /// \ingroup LOBBY_2_NOTIFICATIONS
  3194. struct Notification_Console_UpdateRoomParameters : public Lobby2Message
  3195. {
  3196. __L2_MSG_BASE_IMPL(Notification_Console_UpdateRoomParameters)
  3197. virtual bool RequiresAdmin(void) const {return true;}
  3198. virtual bool RequiresRankingPermission(void) const {return false;}
  3199. virtual bool CancelOnDisconnect(void) const {return false;}
  3200. virtual bool RequiresLogin(void) const {return false;}
  3201. virtual bool IsNotification(void) const {return true;}
  3202. };
  3203. /// \ingroup LOBBY_2_NOTIFICATIONS
  3204. struct Notification_Console_RoomOwnerChanged : public Lobby2Message
  3205. {
  3206. __L2_MSG_BASE_IMPL(Notification_Console_RoomOwnerChanged)
  3207. virtual bool RequiresAdmin(void) const {return true;}
  3208. virtual bool RequiresRankingPermission(void) const {return false;}
  3209. virtual bool CancelOnDisconnect(void) const {return false;}
  3210. virtual bool RequiresLogin(void) const {return false;}
  3211. virtual bool IsNotification(void) const {return true;}
  3212. };
  3213. /// \ingroup LOBBY_2_NOTIFICATIONS
  3214. struct Notification_Console_RoomChatMessage : public Lobby2Message
  3215. {
  3216. __L2_MSG_BASE_IMPL(Notification_Console_RoomChatMessage)
  3217. virtual bool RequiresAdmin(void) const {return true;}
  3218. virtual bool RequiresRankingPermission(void) const {return false;}
  3219. virtual bool CancelOnDisconnect(void) const {return false;}
  3220. virtual bool RequiresLogin(void) const {return false;}
  3221. virtual bool IsNotification(void) const {return true;}
  3222. RakNet::RakString sender;
  3223. RakNet::RakString message;
  3224. };
  3225. /// \ingroup LOBBY_2_NOTIFICATIONS
  3226. struct Notification_Console_RoomMessage : public Lobby2Message
  3227. {
  3228. __L2_MSG_BASE_IMPL(Notification_Console_RoomMessage)
  3229. virtual bool RequiresAdmin(void) const {return true;}
  3230. virtual bool RequiresRankingPermission(void) const {return false;}
  3231. virtual bool CancelOnDisconnect(void) const {return false;}
  3232. virtual bool RequiresLogin(void) const {return false;}
  3233. virtual bool IsNotification(void) const {return true;}
  3234. RakNet::RakString sender;
  3235. RakNet::RakString message;
  3236. };
  3237. // Now merged into Notification_Console_MemberJoinedRoom
  3238. /*
  3239. /// \ingroup LOBBY_2_NOTIFICATIONS
  3240. struct Notification_Console_RoomMemberConnectivityUpdate : public Lobby2Message
  3241. {
  3242. __L2_MSG_BASE_IMPL(Notification_Console_RoomMemberConnectivityUpdate)
  3243. virtual bool RequiresAdmin(void) const {return true;}
  3244. virtual bool RequiresRankingPermission(void) const {return false;}
  3245. virtual bool CancelOnDisconnect(void) const {return false;}
  3246. virtual bool RequiresLogin(void) const {return false;}
  3247. virtual bool IsNotification(void) const {return true;}
  3248. // Out
  3249. SystemAddress systemAddress;
  3250. };
  3251. */
  3252. /// \ingroup LOBBY_2_NOTIFICATIONS
  3253. struct Notification_Console_ChatEvent : public Lobby2Message
  3254. {
  3255. __L2_MSG_BASE_IMPL(Notification_Console_ChatEvent)
  3256. virtual bool RequiresAdmin(void) const {return true;}
  3257. virtual bool RequiresRankingPermission(void) const {return false;}
  3258. virtual bool CancelOnDisconnect(void) const {return false;}
  3259. virtual bool RequiresLogin(void) const {return false;}
  3260. virtual bool IsNotification(void) const {return true;}
  3261. };
  3262. /// \ingroup LOBBY_2_NOTIFICATIONS
  3263. struct Notification_Console_MuteListChanged : public Lobby2Message
  3264. {
  3265. __L2_MSG_BASE_IMPL(Notification_Console_MuteListChanged)
  3266. virtual bool RequiresAdmin(void) const {return true;}
  3267. virtual bool RequiresRankingPermission(void) const {return false;}
  3268. virtual bool CancelOnDisconnect(void) const {return false;}
  3269. virtual bool RequiresLogin(void) const {return false;}
  3270. virtual bool IsNotification(void) const {return true;}
  3271. };
  3272. /// \ingroup LOBBY_2_NOTIFICATIONS
  3273. struct Notification_Console_Local_Users_Changed : public Lobby2Message
  3274. {
  3275. __L2_MSG_BASE_IMPL(Notification_Console_Local_Users_Changed)
  3276. virtual bool RequiresAdmin(void) const {return true;}
  3277. virtual bool RequiresRankingPermission(void) const {return false;}
  3278. virtual bool CancelOnDisconnect(void) const {return false;}
  3279. virtual bool RequiresLogin(void) const {return false;}
  3280. virtual bool IsNotification(void) const {return true;}
  3281. };
  3282. /// \ingroup LOBBY_2_NOTIFICATIONS
  3283. struct Notification_ReceivedDataMessageFromUser : public Lobby2Message
  3284. {
  3285. __L2_MSG_BASE_IMPL(Notification_ReceivedDataMessageFromUser)
  3286. virtual bool RequiresAdmin(void) const {return true;}
  3287. virtual bool RequiresRankingPermission(void) const {return false;}
  3288. virtual bool CancelOnDisconnect(void) const {return false;}
  3289. virtual bool RequiresLogin(void) const {return false;}
  3290. virtual bool IsNotification(void) const {return true;}
  3291. };
  3292. /// \ingroup LOBBY_2_NOTIFICATIONS
  3293. struct Notification_Console_MemberJoinedParty : public Lobby2Message
  3294. {
  3295. __L2_MSG_BASE_IMPL(Notification_Console_MemberJoinedParty)
  3296. virtual bool RequiresAdmin(void) const {return true;}
  3297. virtual bool RequiresRankingPermission(void) const {return false;}
  3298. virtual bool CancelOnDisconnect(void) const {return false;}
  3299. virtual bool RequiresLogin(void) const {return false;}
  3300. virtual bool IsNotification(void) const {return true;}
  3301. };
  3302. /// \ingroup LOBBY_2_NOTIFICATIONS
  3303. struct Notification_Console_MemberLeftParty : public Lobby2Message
  3304. {
  3305. __L2_MSG_BASE_IMPL(Notification_Console_MemberLeftParty)
  3306. virtual bool RequiresAdmin(void) const {return true;}
  3307. virtual bool RequiresRankingPermission(void) const {return false;}
  3308. virtual bool CancelOnDisconnect(void) const {return false;}
  3309. virtual bool RequiresLogin(void) const {return false;}
  3310. virtual bool IsNotification(void) const {return true;}
  3311. };
  3312. /// \ingroup LOBBY_2_NOTIFICATIONS
  3313. struct Notification_Console_Game_Started : public Lobby2Message
  3314. {
  3315. __L2_MSG_BASE_IMPL(Notification_Console_Game_Started)
  3316. virtual bool RequiresAdmin(void) const {return true;}
  3317. virtual bool RequiresRankingPermission(void) const {return false;}
  3318. virtual bool CancelOnDisconnect(void) const {return false;}
  3319. virtual bool RequiresLogin(void) const {return false;}
  3320. virtual bool IsNotification(void) const {return true;}
  3321. };
  3322. /// \ingroup LOBBY_2_NOTIFICATIONS
  3323. struct Notification_Console_Game_Ending : public Lobby2Message
  3324. {
  3325. __L2_MSG_BASE_IMPL(Notification_Console_Game_Ending)
  3326. virtual bool RequiresAdmin(void) const {return true;}
  3327. virtual bool RequiresRankingPermission(void) const {return false;}
  3328. virtual bool CancelOnDisconnect(void) const {return false;}
  3329. virtual bool RequiresLogin(void) const {return false;}
  3330. virtual bool IsNotification(void) const {return true;}
  3331. };
  3332. /// \ingroup LOBBY_2_NOTIFICATIONS
  3333. struct Notification_Console_Game_Ended : public Lobby2Message
  3334. {
  3335. __L2_MSG_BASE_IMPL(Notification_Console_Game_Ended)
  3336. virtual bool RequiresAdmin(void) const {return true;}
  3337. virtual bool RequiresRankingPermission(void) const {return false;}
  3338. virtual bool CancelOnDisconnect(void) const {return false;}
  3339. virtual bool RequiresLogin(void) const {return false;}
  3340. virtual bool IsNotification(void) const {return true;}
  3341. };
  3342. /// \ingroup LOBBY_2_NOTIFICATIONS
  3343. struct Notification_Console_Got_Room_Invite : public Lobby2Message
  3344. {
  3345. __L2_MSG_BASE_IMPL(Notification_Console_Got_Room_Invite)
  3346. virtual bool RequiresAdmin(void) const {return true;}
  3347. virtual bool RequiresRankingPermission(void) const {return false;}
  3348. virtual bool CancelOnDisconnect(void) const {return false;}
  3349. virtual bool RequiresLogin(void) const {return false;}
  3350. virtual bool IsNotification(void) const {return true;}
  3351. };
  3352. /// \ingroup LOBBY_2_NOTIFICATIONS
  3353. struct Notification_Console_Accepted_Room_Invite : public Lobby2Message
  3354. {
  3355. __L2_MSG_BASE_IMPL(Notification_Console_Accepted_Room_Invite)
  3356. virtual bool RequiresAdmin(void) const {return true;}
  3357. virtual bool RequiresRankingPermission(void) const {return false;}
  3358. virtual bool CancelOnDisconnect(void) const {return false;}
  3359. virtual bool RequiresLogin(void) const {return false;}
  3360. virtual bool IsNotification(void) const {return true;}
  3361. };
  3362. // --------------------------------------------- Base interface of factory class for all messages --------------------------------------------
  3363. #define __L2_ALLOCATE_AND_DEFINE(FACTORY, __TYPE__,VAR_NAME) RakNet::__TYPE__ *VAR_NAME = (RakNet::__TYPE__ *) FACTORY->Alloc(L2MID_##__TYPE__); RakAssert(VAR_NAME);
  3364. #define __L2_MSG_FACTORY_BASE(__NAME__) {case L2MID_##__NAME__ : Lobby2Message *m = RakNet::OP_NEW< __NAME__ >( _FILE_AND_LINE_ ) ; RakAssert(m->GetID()==L2MID_##__NAME__ ); m->requestId=nextRequestId++; return m;}
  3365. /// \ingroup LOBBY_2_GROUP
  3366. struct Lobby2MessageFactory
  3367. {
  3368. Lobby2MessageFactory() {nextRequestId=0;}
  3369. virtual ~Lobby2MessageFactory() {}
  3370. virtual Lobby2Message *Alloc(Lobby2MessageID id)
  3371. {
  3372. switch (id)
  3373. {
  3374. __L2_MSG_FACTORY_BASE(Platform_Startup);
  3375. __L2_MSG_FACTORY_BASE(Platform_Shutdown);
  3376. __L2_MSG_FACTORY_BASE(System_CreateDatabase);
  3377. __L2_MSG_FACTORY_BASE(System_DestroyDatabase);
  3378. __L2_MSG_FACTORY_BASE(System_CreateTitle);
  3379. __L2_MSG_FACTORY_BASE(System_DestroyTitle);
  3380. __L2_MSG_FACTORY_BASE(System_GetTitleRequiredAge);
  3381. __L2_MSG_FACTORY_BASE(System_GetTitleBinaryData);
  3382. __L2_MSG_FACTORY_BASE(System_RegisterProfanity);
  3383. __L2_MSG_FACTORY_BASE(System_BanUser);
  3384. __L2_MSG_FACTORY_BASE(System_UnbanUser);
  3385. __L2_MSG_FACTORY_BASE(CDKey_Add);
  3386. __L2_MSG_FACTORY_BASE(CDKey_GetStatus);
  3387. __L2_MSG_FACTORY_BASE(CDKey_Use);
  3388. __L2_MSG_FACTORY_BASE(CDKey_FlagStolen);
  3389. __L2_MSG_FACTORY_BASE(Client_Login);
  3390. __L2_MSG_FACTORY_BASE(Client_Logoff);
  3391. __L2_MSG_FACTORY_BASE(Client_RegisterAccount);
  3392. __L2_MSG_FACTORY_BASE(System_SetEmailAddressValidated);
  3393. __L2_MSG_FACTORY_BASE(Client_ValidateHandle);
  3394. __L2_MSG_FACTORY_BASE(System_DeleteAccount);
  3395. __L2_MSG_FACTORY_BASE(System_PruneAccounts);
  3396. __L2_MSG_FACTORY_BASE(Client_GetEmailAddress);
  3397. __L2_MSG_FACTORY_BASE(Client_GetPasswordRecoveryQuestionByHandle);
  3398. __L2_MSG_FACTORY_BASE(Client_GetPasswordByPasswordRecoveryAnswer);
  3399. __L2_MSG_FACTORY_BASE(Client_ChangeHandle);
  3400. __L2_MSG_FACTORY_BASE(Client_UpdateAccount);
  3401. __L2_MSG_FACTORY_BASE(Client_GetAccountDetails);
  3402. __L2_MSG_FACTORY_BASE(Client_StartIgnore);
  3403. __L2_MSG_FACTORY_BASE(Client_StopIgnore);
  3404. __L2_MSG_FACTORY_BASE(Client_GetIgnoreList);
  3405. __L2_MSG_FACTORY_BASE(Client_PerTitleIntegerStorage);
  3406. __L2_MSG_FACTORY_BASE(Client_PerTitleBinaryStorage);
  3407. __L2_MSG_FACTORY_BASE(Client_SetPresence);
  3408. __L2_MSG_FACTORY_BASE(Client_GetPresence);
  3409. __L2_MSG_FACTORY_BASE(Friends_SendInvite);
  3410. __L2_MSG_FACTORY_BASE(Friends_AcceptInvite);
  3411. __L2_MSG_FACTORY_BASE(Friends_RejectInvite);
  3412. __L2_MSG_FACTORY_BASE(Friends_GetInvites);
  3413. __L2_MSG_FACTORY_BASE(Friends_GetFriends);
  3414. __L2_MSG_FACTORY_BASE(Friends_Remove);
  3415. __L2_MSG_FACTORY_BASE(BookmarkedUsers_Add);
  3416. __L2_MSG_FACTORY_BASE(BookmarkedUsers_Remove);
  3417. __L2_MSG_FACTORY_BASE(BookmarkedUsers_Get);
  3418. __L2_MSG_FACTORY_BASE(Emails_Send);
  3419. __L2_MSG_FACTORY_BASE(Emails_Get);
  3420. __L2_MSG_FACTORY_BASE(Emails_Delete);
  3421. __L2_MSG_FACTORY_BASE(Emails_SetStatus);
  3422. __L2_MSG_FACTORY_BASE(Ranking_SubmitMatch);
  3423. __L2_MSG_FACTORY_BASE(Ranking_GetMatches);
  3424. __L2_MSG_FACTORY_BASE(Ranking_GetMatchBinaryData);
  3425. __L2_MSG_FACTORY_BASE(Ranking_GetTotalScore);
  3426. __L2_MSG_FACTORY_BASE(Ranking_WipeScoresForPlayer);
  3427. __L2_MSG_FACTORY_BASE(Ranking_WipeMatches);
  3428. __L2_MSG_FACTORY_BASE(Ranking_PruneMatches);
  3429. __L2_MSG_FACTORY_BASE(Ranking_UpdateRating);
  3430. __L2_MSG_FACTORY_BASE(Ranking_WipeRatings);
  3431. __L2_MSG_FACTORY_BASE(Ranking_GetRating);
  3432. __L2_MSG_FACTORY_BASE(Clans_Create);
  3433. __L2_MSG_FACTORY_BASE(Clans_SetProperties);
  3434. __L2_MSG_FACTORY_BASE(Clans_GetProperties);
  3435. __L2_MSG_FACTORY_BASE(Clans_SetMyMemberProperties);
  3436. __L2_MSG_FACTORY_BASE(Clans_GrantLeader);
  3437. __L2_MSG_FACTORY_BASE(Clans_SetSubleaderStatus);
  3438. __L2_MSG_FACTORY_BASE(Clans_SetMemberRank);
  3439. __L2_MSG_FACTORY_BASE(Clans_GetMemberProperties);
  3440. __L2_MSG_FACTORY_BASE(Clans_ChangeHandle);
  3441. __L2_MSG_FACTORY_BASE(Clans_Leave);
  3442. __L2_MSG_FACTORY_BASE(Clans_Get);
  3443. __L2_MSG_FACTORY_BASE(Clans_SendJoinInvitation);
  3444. __L2_MSG_FACTORY_BASE(Clans_WithdrawJoinInvitation);
  3445. __L2_MSG_FACTORY_BASE(Clans_AcceptJoinInvitation);
  3446. __L2_MSG_FACTORY_BASE(Clans_RejectJoinInvitation);
  3447. __L2_MSG_FACTORY_BASE(Clans_DownloadInvitationList);
  3448. __L2_MSG_FACTORY_BASE(Clans_SendJoinRequest);
  3449. __L2_MSG_FACTORY_BASE(Clans_WithdrawJoinRequest);
  3450. __L2_MSG_FACTORY_BASE(Clans_AcceptJoinRequest);
  3451. __L2_MSG_FACTORY_BASE(Clans_RejectJoinRequest);
  3452. __L2_MSG_FACTORY_BASE(Clans_DownloadRequestList);
  3453. __L2_MSG_FACTORY_BASE(Clans_KickAndBlacklistUser);
  3454. __L2_MSG_FACTORY_BASE(Clans_UnblacklistUser);
  3455. __L2_MSG_FACTORY_BASE(Clans_GetBlacklist);
  3456. __L2_MSG_FACTORY_BASE(Clans_GetMembers);
  3457. __L2_MSG_FACTORY_BASE(Clans_GetList);
  3458. __L2_MSG_FACTORY_BASE(Clans_CreateBoard);
  3459. __L2_MSG_FACTORY_BASE(Clans_DestroyBoard);
  3460. __L2_MSG_FACTORY_BASE(Clans_CreateNewTopic);
  3461. __L2_MSG_FACTORY_BASE(Clans_ReplyToTopic);
  3462. __L2_MSG_FACTORY_BASE(Clans_RemovePost);
  3463. __L2_MSG_FACTORY_BASE(Clans_GetBoards);
  3464. __L2_MSG_FACTORY_BASE(Clans_GetTopics);
  3465. __L2_MSG_FACTORY_BASE(Clans_GetPosts);
  3466. __L2_MSG_FACTORY_BASE(Console_GameBootCheck);
  3467. __L2_MSG_FACTORY_BASE(Console_GetGameBootInviteDetails);
  3468. __L2_MSG_FACTORY_BASE(Console_GetServerStatus);
  3469. __L2_MSG_FACTORY_BASE(Console_GetWorldListFromServer);
  3470. __L2_MSG_FACTORY_BASE(Console_GetLobbyListFromWorld);
  3471. __L2_MSG_FACTORY_BASE(Console_JoinLobby);
  3472. __L2_MSG_FACTORY_BASE(Console_LeaveLobby);
  3473. __L2_MSG_FACTORY_BASE(Console_SendLobbyChatMessage);
  3474. __L2_MSG_FACTORY_BASE(Console_SearchRooms);
  3475. __L2_MSG_FACTORY_BASE(Console_GetRoomDetails);
  3476. __L2_MSG_FACTORY_BASE(Console_GetLobbyMemberData);
  3477. __L2_MSG_FACTORY_BASE(Console_CreateRoom);
  3478. __L2_MSG_FACTORY_BASE(Console_SignIntoRoom);
  3479. __L2_MSG_FACTORY_BASE(Console_SetRoomSearchProperties);
  3480. __L2_MSG_FACTORY_BASE(Console_UpdateRoomParameters);
  3481. __L2_MSG_FACTORY_BASE(Console_JoinRoom);
  3482. __L2_MSG_FACTORY_BASE(Console_LeaveRoom);
  3483. __L2_MSG_FACTORY_BASE(Console_SendLobbyInvitationToRoom);
  3484. __L2_MSG_FACTORY_BASE(Console_SendGUIInvitationToRoom);
  3485. __L2_MSG_FACTORY_BASE(Console_SendDataMessageToUser);
  3486. __L2_MSG_FACTORY_BASE(Console_SendRoomChatMessage);
  3487. __L2_MSG_FACTORY_BASE(Console_ShowFriendsUI);
  3488. __L2_MSG_FACTORY_BASE(Console_EndGame); // Currently xbox only
  3489. __L2_MSG_FACTORY_BASE(Console_StartGame); // Currently xbox only
  3490. __L2_MSG_FACTORY_BASE(Console_ShowPartyUI);
  3491. __L2_MSG_FACTORY_BASE(Console_ShowMessagesUI);
  3492. __L2_MSG_FACTORY_BASE(Console_ShowGUIInvitationsToRooms);
  3493. __L2_MSG_FACTORY_BASE(Console_EnableDisableRoomVoiceChat);
  3494. __L2_MSG_FACTORY_BASE(Notification_Client_RemoteLogin);
  3495. __L2_MSG_FACTORY_BASE(Notification_Client_IgnoreStatus);
  3496. __L2_MSG_FACTORY_BASE(Notification_Friends_StatusChange);
  3497. __L2_MSG_FACTORY_BASE(Notification_Friends_PresenceUpdate);
  3498. __L2_MSG_FACTORY_BASE(Notification_User_ChangedHandle);
  3499. __L2_MSG_FACTORY_BASE(Notification_Friends_CreatedClan);
  3500. __L2_MSG_FACTORY_BASE(Notification_Emails_Received);
  3501. __L2_MSG_FACTORY_BASE(Notification_Clans_GrantLeader);
  3502. __L2_MSG_FACTORY_BASE(Notification_Clans_SetSubleaderStatus);
  3503. __L2_MSG_FACTORY_BASE(Notification_Clans_SetMemberRank);
  3504. __L2_MSG_FACTORY_BASE(Notification_Clans_ChangeHandle);
  3505. __L2_MSG_FACTORY_BASE(Notification_Clans_Leave);
  3506. __L2_MSG_FACTORY_BASE(Notification_Clans_PendingJoinStatus);
  3507. __L2_MSG_FACTORY_BASE(Notification_Clans_NewClanMember);
  3508. __L2_MSG_FACTORY_BASE(Notification_Clans_KickAndBlacklistUser);
  3509. __L2_MSG_FACTORY_BASE(Notification_Clans_UnblacklistUser);
  3510. __L2_MSG_FACTORY_BASE(Notification_Clans_Destroyed);
  3511. __L2_MSG_FACTORY_BASE(Notification_Console_MemberJoinedLobby);
  3512. __L2_MSG_FACTORY_BASE(Notification_Console_MemberLeftLobby);
  3513. __L2_MSG_FACTORY_BASE(Notification_Console_LobbyDestroyed);
  3514. __L2_MSG_FACTORY_BASE(Notification_Console_LobbyMemberDataUpdated);
  3515. __L2_MSG_FACTORY_BASE(Notification_Console_LobbyGotChatMessage);
  3516. __L2_MSG_FACTORY_BASE(Notification_Console_LobbyGotRoomInvitation);
  3517. __L2_MSG_FACTORY_BASE(Notification_Console_MemberJoinedRoom);
  3518. __L2_MSG_FACTORY_BASE(Notification_Console_MemberLeftRoom);
  3519. __L2_MSG_FACTORY_BASE(Notification_Console_KickedOutOfRoom);
  3520. __L2_MSG_FACTORY_BASE(Notification_Console_RoomWasDestroyed);
  3521. __L2_MSG_FACTORY_BASE(Notification_Console_UpdateRoomParameters);
  3522. __L2_MSG_FACTORY_BASE(Notification_Console_RoomOwnerChanged);
  3523. __L2_MSG_FACTORY_BASE(Notification_Console_RoomChatMessage);
  3524. __L2_MSG_FACTORY_BASE(Notification_Console_RoomMessage);
  3525. // __L2_MSG_FACTORY_BASE(Notification_Console_RoomMemberConnectivityUpdate);
  3526. __L2_MSG_FACTORY_BASE(Notification_Console_ChatEvent);
  3527. __L2_MSG_FACTORY_BASE(Notification_Console_MuteListChanged);
  3528. __L2_MSG_FACTORY_BASE(Notification_Console_Local_Users_Changed);
  3529. __L2_MSG_FACTORY_BASE(Notification_ReceivedDataMessageFromUser);
  3530. __L2_MSG_FACTORY_BASE(Notification_Console_MemberJoinedParty);
  3531. __L2_MSG_FACTORY_BASE(Notification_Console_MemberLeftParty);
  3532. __L2_MSG_FACTORY_BASE(Notification_Console_Game_Started); // Currently XBOX only
  3533. __L2_MSG_FACTORY_BASE(Notification_Console_Game_Ending); // Currently XBOX only
  3534. __L2_MSG_FACTORY_BASE(Notification_Console_Game_Ended); // Currently XBOX only
  3535. __L2_MSG_FACTORY_BASE(Notification_Console_Got_Room_Invite);
  3536. __L2_MSG_FACTORY_BASE(Notification_Console_Accepted_Room_Invite);
  3537. default:
  3538. return 0;
  3539. };
  3540. }
  3541. void Dealloc(Lobby2Message *msg) {
  3542. msg->Deref();
  3543. if (msg->GetRefCount()<=0)
  3544. {
  3545. // Only delete one message at a time or else GetRefCount may be called on the same message in two threads at the same time and not be accurate
  3546. deallocateLockMutex.Lock();
  3547. if (msg->GetRefCount()<=0)
  3548. RakNet::OP_DELETE<Lobby2Message>(msg, _FILE_AND_LINE_ );
  3549. deallocateLockMutex.Unlock();
  3550. }
  3551. }
  3552. unsigned int nextRequestId;
  3553. SimpleMutex deallocateLockMutex;
  3554. };
  3555. } // namespace RakNet
  3556. #endif
粤ICP备19079148号