the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
at main 510 lines 17 kB view raw
1#include "stdafx.h" 2 3#include "PSVita_NPToolkit.h" 4#include "PSVita/PSVitaExtras/Conf.h" 5#include "PSVita/Network/SonyCommerce_Vita.h" 6 7// #define NP_TITLE_ID "CUSA00265_00" 8// #define NP_TITLE_SECRET_HEX "c37e30fa1f7fd29e3534834d62781143ae29aa7b51d02320e7aa0b45116ad600e4d309e8431bc37977d98b8db480e721876e7d736e11fd906778c0033bbb6370903477b1dc1e65106afc62007a5feee3158844d721b88c3f4bff2e56417b6910cedfdec78b130d2e0dd35a35a9e2ae31d5889f9398c1d62b52a3630bb03faa5b" 9// #define CLIENT_ID_FOR_SAMPLE "c8c483e7-f0b4-420b-877b-307fcb4c3cdc" 10 11//#define _USE_STANDARD_ALLOC 12 13// sce::Toolkit::NP::Utilities::Future< sce::Toolkit::NP::NpSessionInformation > PSVitaNPToolkit::sm_createJoinFuture; 14// sce::Toolkit::NP::NpSessionInformation PSVitaNPToolkit::m_currentSessionInfo; 15sce::Toolkit::NP::Utilities::Future<sce::Toolkit::NP::MessageAttachment> PSVitaNPToolkit::m_messageData; 16 17 18void PSVitaNPToolkit::presenceCallback( const sce::Toolkit::NP::Event& event ) 19{ 20 switch(event.event) 21 { 22 case sce::Toolkit::NP::Event::presenceSet: 23 app.DebugPrintf("presenceSet Successfully\n"); 24 break; 25 case sce::Toolkit::NP::Event::presenceSetFailed: 26 app.DebugPrintf("presenceSetFailed event received = 0x%x\n", event.returnCode); 27 SQRNetworkManager_Vita::SetPresenceFailedCallback(); 28// assert(0); 29 break; 30 default: 31 break; 32 } 33} 34 35void PSVitaNPToolkit::profileCallback( const sce::Toolkit::NP::Event& event ) 36{ 37 switch(event.event) 38 { 39 case sce::Toolkit::NP::Event::profileError: 40 app.DebugPrintf("User profile error: 0x%x\n", event.returnCode); 41 break; 42 default: 43 app.DebugPrintf("User profile event: %i\n", event.event); 44 break; 45 } 46} 47 48void PSVitaNPToolkit::messagingCallback( const sce::Toolkit::NP::Event& event ) 49{ 50 switch(event.event) 51 { 52 case sce::Toolkit::NP::Event::serviceError: 53 app.DebugPrintf("NP messagingCallback - serviceError: 0x%x\n", event.returnCode); 54 ProfileManager.SetSysUIShowing( false ); 55 break; 56 case sce::Toolkit::NP::Event::messageSent: 57 app.DebugPrintf("NP messagingCallback - messageSent: 0x%x\n", event.returnCode); 58 ProfileManager.SetSysUIShowing( false ); 59 break; 60 case sce::Toolkit::NP::Event::messageError: 61 app.DebugPrintf("NP messagingCallback - messageError: 0x%x\n", event.returnCode); 62 if(SQRNetworkManager_Vita::m_bSendingInviteMessage) // MGH - added to fix a sysUI lockup on startup - devtrack #5883 63 ProfileManager.SetSysUIShowing( false ); 64 break; 65 case sce::Toolkit::NP::Event::messageDialogTerminated: 66 app.DebugPrintf("NP messagingCallback - messageDialogTerminated: 0x%x\n", event.returnCode); 67 ProfileManager.SetSysUIShowing( false ); 68 break; 69 case sce::Toolkit::NP::Event::messageRetrieved: 70 app.DebugPrintf("NP messagingCallback - messageRetrieved: 0x%x\n", event.returnCode); 71 if(m_messageData.hasResult()) 72 { 73 SQRNetworkManager_Vita::GetInviteDataAndProcess(m_messageData.get()); 74 } 75 else 76 { 77 app.DebugPrintf("messageRetrieved error 0x%08x\n", m_messageData.getError()); 78 } 79 break; 80 case sce::Toolkit::NP::Event::messageInGameDataReceived: 81 app.DebugPrintf("NP messagingCallback - messageInGameDataReceived: 0x%x\n", event.returnCode); 82 break; 83 case sce::Toolkit::NP::Event::messageInGameDataRetrievalDone: 84 app.DebugPrintf("NP messagingCallback - messageInGameDataRetrievalDone: 0x%x\n", event.returnCode); 85 break; 86 87 default: 88 assert(0); 89 break; 90 } 91} 92 93void PSVitaNPToolkit::coreCallback( const sce::Toolkit::NP::Event& event ) 94{ 95 switch (event.event) 96 { 97 case sce::Toolkit::NP::Event::enetUp: ///< An event from the NetCtl service generated when a connection has been established. 98 app.DebugPrintf("Received core callback: Network Up \n"); 99 break; 100 case sce::Toolkit::NP::Event::enetDown: ///< An event from the NetCtl service generated when the connection layer has gone down. 101 app.DebugPrintf("Received core callback: Network down \n"); 102 break; 103 case sce::Toolkit::NP::Event::loggedIn: ///< An event from the NetCtl service generated when a connection to the PSN has been established. 104 app.DebugPrintf("Received core callback: PSN sign in \n"); 105 SceNetCtlInfo info; 106 sceNetCtlInetGetInfo(SCE_NET_CTL_INFO_DEVICE, &info); 107 if(info.device == SCE_NET_CTL_DEVICE_PHONE) // 3G connection, we're not going to allow this 108 { 109 ProfileManager.SetNetworkStatus(false, true); 110 } 111 else 112 { 113 ProfileManager.SetNetworkStatus(true, true); 114 } 115 break; 116 case sce::Toolkit::NP::Event::loggedOut: ///< An event from the NetCtl service generated when a connection to the PSN has been lost. 117 app.DebugPrintf("Received core callback: PSN sign out \n"); 118 ProfileManager.SetNetworkStatus(false, true); 119 break; 120 default: 121 app.DebugPrintf("Received core callback: event Num: %d \n", event.event); 122 break; 123 } 124} 125 126void PSVitaNPToolkit::sceNpToolkitCallback( const sce::Toolkit::NP::Event& event) 127{ 128 switch(event.service) 129 { 130 case sce::Toolkit::NP::ServiceType::core: 131 coreCallback(event); 132 break; 133// case sce::Toolkit::NP::ServiceType::netInfo: 134// Menu::NetInfo::sceNpToolkitCallback(event); 135// break; 136// case sce::Toolkit::NP::ServiceType::sessions: 137// sessionsCallback(event); 138// break; 139// case sce::Toolkit::NP::ServiceType::tss: 140// Menu::Tss::sceNpToolkitCallback(event); 141// break; 142// case sce::Toolkit::NP::ServiceType::ranking: 143// Menu::Ranking::sceNpToolkitCallback(event); 144// break; 145// case sce::Toolkit::NP::ServiceType::tus: 146// Menu::Tus::sceNpToolkitCallback(event); 147// break; 148 case sce::Toolkit::NP::ServiceType::profile: 149 profileCallback(event); 150 break; 151 case sce::Toolkit::NP::ServiceType::messaging: 152 messagingCallback(event); 153// case sce::Toolkit::NP::ServiceType::friends: 154// Menu::Friends::sceNpToolkitCallback(event); 155// break; 156// case sce::Toolkit::NP::ServiceType::auth: 157// Menu::Auth::sceNpToolkitCallback(event); 158// break; 159 case sce::Toolkit::NP::ServiceType::trophy: 160// ProfileManager.trophySystemCallback(event); 161 break; 162// case sce::Toolkit::NP::ServiceType::messaging: 163// messagingCallback(event); 164// case sce::Toolkit::NP::ServiceType::inGameMessage: 165// Menu::Messaging::sceNpToolkitCallback(event); 166// break; 167 168 case sce::Toolkit::NP::ServiceType::commerce: 169 SonyCommerce_Vita::commerce2Handler(event); 170 break; 171 case sce::Toolkit::NP::ServiceType::presence: 172 presenceCallback(event); 173 break; 174// case sce::Toolkit::NP::ServiceType::wordFilter: 175// Menu::WordFilter::sceNpToolkitCallback(event); 176// break; 177// case sce::Toolkit::NP::ServiceType::sns: 178// Menu::Sns::sceNpToolkitCallback(event); 179// break; 180 181// case sce::Toolkit::NP::ServiceType::gameCustomData: 182// gameCustomDataCallback(event); 183 default: 184 break; 185 } 186} 187 188 189// 190// void PSVitaNPToolkit::sessionsCallback( const sce::Toolkit::NP::Event& event) 191// { 192// switch(event.event) 193// { 194// case sce::Toolkit::NP::Event::npSessionCreateResult: ///< An event generated when the %Np session creation process has been completed. 195// app.DebugPrintf("npSessionCreateResult"); 196// if(sm_createJoinFuture.hasResult()) 197// { 198// app.DebugPrintf("Session Created Successfully\n"); 199// m_currentSessionInfo = *sm_createJoinFuture.get(); 200// } 201// else 202// { 203// app.DebugPrintf("Session Creation Failed 0x%x\n",sm_createJoinFuture.getError()); 204// } 205// sm_createJoinFuture.reset(); 206// break; 207// case sce::Toolkit::NP::Event::npSessionJoinResult: ///< An event generated when the join %Np session process has been completed. 208// app.DebugPrintf("npSessionJoinResult"); 209// if(sm_createJoinFuture.hasResult()) 210// { 211// app.DebugPrintf("Session joined successfully\n"); 212// m_currentSessionInfo = *sm_createJoinFuture.get(); 213// } 214// else 215// { 216// app.DebugPrintf("Session join Failed 0x%x\n",sm_createJoinFuture.getError()); 217// } 218// sm_createJoinFuture.reset(); 219// break; 220// case sce::Toolkit::NP::Event::npSessionError: ///< An event generated when there was error performing the current %Np session process. 221// app.DebugPrintf("npSessionError"); 222// break; 223// case sce::Toolkit::NP::Event::npSessionLeaveResult: ///< An event generated when the user has left the current %Np session. 224// app.DebugPrintf("npSessionLeaveResult"); 225// break; 226// case sce::Toolkit::NP::Event::npSessionModified: ///< An event generated when the %Np session has been modified. 227// app.DebugPrintf("npSessionModified"); 228// break; 229// case sce::Toolkit::NP::Event::npSessionUpdateResult: ///< An event generated when the %Np session has been updated. 230// app.DebugPrintf("npSessionUpdateResult"); 231// break; 232// case sce::Toolkit::NP::Event::npSessionGetInfoResult: ///< An event generated when the %Np session info has been retrieved. 233// app.DebugPrintf("npSessionGetInfoResult"); 234// break; 235// case sce::Toolkit::NP::Event::npSessionGetInfoListResult: ///< An event generated when the %Np session info has been retrieved. 236// app.DebugPrintf("npSessionGetInfoListResult"); 237// break; 238// case sce::Toolkit::NP::Event::npSessionGetSessionDataResult: ///< An event generated when the %Np session data has been retrieved. 239// app.DebugPrintf("npSessionGetSessionDataResult"); 240// break; 241// case sce::Toolkit::NP::Event::npSessionSearchResult: ///< An event generated when the %Np session search request has been completed. 242// app.DebugPrintf("npSessionSearchResult"); 243// break; 244// case sce::Toolkit::NP::Event::npSessionInviteNotification: ///< An event generated when the %Np session push notification is received. 245// app.DebugPrintf("npSessionInviteNotification"); 246// break; 247// case sce::Toolkit::NP::Event::npSessionInviteGetInfoResult: ///< An event generated when the %Np session info has been retrieved. 248// app.DebugPrintf("npSessionInviteGetInfoResult"); 249// break; 250// case sce::Toolkit::NP::Event::npSessionInviteGetInfoListResult: ///< An event generated when the %Np session info has been retrieved. 251// app.DebugPrintf("npSessionInviteGetInfoListResult"); 252// break; 253// case sce::Toolkit::NP::Event::npSessionInviteGetDataResult: ///< An event generated when the %Np session data has been retrieved. 254// app.DebugPrintf("npSessionInviteGetDataResult"); 255// break; 256// default: 257// assert(0); 258// break; 259// } 260// 261// } 262 263void PSVitaNPToolkit::gameCustomDataCallback( const sce::Toolkit::NP::Event& event) 264{ 265// switch(event.event) 266// { 267// 268// case sce::Toolkit::NP::Event::gameCustomDataItemListResult: 269// app.DebugPrintf("gameCustomDataItemListResult"); 270// break; 271// case sce::Toolkit::NP::Event::gameCustomDataGameDataResult: 272// app.DebugPrintf("gameCustomDataGameDataResult"); 273// if(m_messageData.hasResult()) 274// { 275// SQRNetworkManager_Orbis::GetInviteDataAndProcess(m_messageData.get()); 276// } 277// else 278// { 279// app.DebugPrintf("gameCustomDataMessageResult error 0x%08x\n", m_messageData.getError()); 280// } 281// break; 282// case sce::Toolkit::NP::Event::gameCustomDataMessageResult: 283// app.DebugPrintf("gameCustomDataMessageResult"); 284// break; 285// case sce::Toolkit::NP::Event::gameCustomDataSetUseFlagResult: 286// app.DebugPrintf("gameCustomDataSetUseFlagResult"); 287// break; 288// case sce::Toolkit::NP::Event::gameCustomDataGameThumbnailResult: 289// app.DebugPrintf("gameCustomDataGameThumbnailResult"); 290// break; 291// case sce::Toolkit::NP::Event::messageError: 292// app.DebugPrintf("messageError : 0x%08x\n", event.returnCode); 293// assert(0); 294// break; 295// default: 296// assert(0); 297// break; 298// } 299} 300 301static uint8_t hexCharToUint(char ch) 302{ 303 uint8_t val = 0; 304 305 if ( isdigit(ch) ){ 306 val = (ch - '0'); 307 } 308 else if ( isupper(ch) ){ 309 val = (ch - 'A' + 10); 310 } 311 else{ 312 val = (ch - 'a' + 10); 313 } 314 315 return val; 316} 317 318void hexStrToBin( 319 const char *pHexStr, 320 uint8_t *pBinBuf, 321 size_t binBufSize 322 ) 323{ 324 uint8_t val = 0; 325 int hexStrLen = strlen(pHexStr); 326 327 int binOffset = 0; 328 for (int i = 0; i < hexStrLen; i++) { 329 val |= hexCharToUint(*(pHexStr + i)); 330 if (i % 2 == 0) { 331 val <<= 4; 332 } 333 else { 334 if (pBinBuf != NULL && binOffset < binBufSize) { 335 memcpy(pBinBuf + binOffset, &val, 1); 336 val = 0; 337 } 338 binOffset++; 339 } 340 } 341 342 if (val != 0 && pBinBuf != NULL && binOffset < binBufSize) { 343 memcpy(pBinBuf + binOffset, &val, 1); 344 } 345 346 return; 347} 348 349 350static void npStateCallback(SceNpServiceState state, int retCode, void *userdata) 351{ 352 //CD - Updates the online status of player 353 switch(state) 354 { 355 case SCE_NP_SERVICE_STATE_SIGNED_OUT: 356 ProfileManager.SetNetworkStatus(false, false); 357 break; 358 case SCE_NP_SERVICE_STATE_SIGNED_IN: 359 ProfileManager.SetNetworkStatus(false, true); 360 break; 361 case SCE_NP_SERVICE_STATE_ONLINE: 362 SceNetCtlInfo info; 363 sceNetCtlInetGetInfo(SCE_NET_CTL_INFO_DEVICE, &info); 364 if(info.device == SCE_NET_CTL_DEVICE_PHONE) // 3G connection, we're not going to allow this 365 { 366 app.DebugPrintf("Online with 3G connection!!\n"); 367 ProfileManager.SetNetworkStatus(false, true); 368 } 369 else 370 { 371 ProfileManager.SetNetworkStatus(true, true); 372 } 373 break; 374 default: 375 break; 376 } 377} 378 379void PSVitaNPToolkit::init() 380{ 381// MenuApp menuApp; 382// sce::Toolkit::NP::NpTitleId nptTitleId; 383// nptTitleId.setTitleSecret(*SQRNetworkManager_Vita::GetSceNpTitleId(), *SQRNetworkManager_Vita::GetSceNpTitleSecret()); 384 sce::Toolkit::NP::CommunicationId commsIds(s_npCommunicationId, s_npCommunicationPassphrase, s_npCommunicationSignature); 385 sce::Toolkit::NP::Parameters params(sceNpToolkitCallback,commsIds); 386 params.m_title.setId(app.GetCommerceCategory()); 387 388 389 int ret = sce::Toolkit::NP::Interface::init(params); 390 if (ret != SCE_OK) 391 { 392 app.DebugPrintf("Failed to initialize NP Toolkit Library : 0x%x\n", ret); 393 assert(0); 394 } 395 396 397 ret = sce::Toolkit::NP::Interface::registerNpCommsId(commsIds, sce::Toolkit::NP::matching); 398 if (ret < 0) 399 { 400 app.DebugPrintf("Failed to register TSS Comms ID : 0x%x\n", ret); 401 assert(0); 402 } 403 404// extern void npStateCallback(SceNpServiceState state, int retCode, void *userdata); 405 406 ret = sceNpRegisterServiceStateCallback(npStateCallback, NULL); 407 if (ret < 0) 408 { 409 app.DebugPrintf("sceNpRegisterServiceStateCallback() failed. ret = 0x%x\n", ret); 410 } 411 412 413 414 415// // Register Client ID for Auth 416// ret = sce::Toolkit::NP::Interface::registerClientId(CLIENT_ID_FOR_SAMPLE); 417// if (ret < 0) 418// { 419// app.DebugPrintf("Failed to register Auth Client ID : 0x%x\n", ret); 420// assert(0); 421// } 422 423} 424 425 426 427// void PSVitaNPToolkit::createNPSession() 428// { 429// #define CURRENT_SESSION_ATTR_NUMS 5 430// #define SESSION_IMAGE_PATH "/app0/orbis/session_image.png" 431// #define SESSION_STATUS "Minecraft online game (this text needs defined and localised)" 432// #define SESSION_NAME "Minecraft(this text needs defined and localised)" 433// 434// static const int maxSlots = 8; 435// 436// SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID; 437// int ret = sceUserServiceGetInitialUser(&userId); 438// if( ret < 0 ) 439// { 440// app.DebugPrintf("Couldn't retrieve user ID 0x%x ...\n",ret); 441// } 442// 443// sce::Toolkit::NP::CreateNpSessionRequest createSessionRequest; 444// memset(&createSessionRequest,0,sizeof(createSessionRequest)); 445// strncpy(createSessionRequest.sessionName,SESSION_NAME,strlen(SESSION_NAME)); 446// createSessionRequest.sessionTypeFlag = SCE_TOOLKIT_NP_CREATE_SESSION_TYPE_PUBLIC; 447// createSessionRequest.maxSlots = maxSlots; 448// strncpy(createSessionRequest.sessionImgPath,SESSION_IMAGE_PATH,strlen(SESSION_IMAGE_PATH)); 449// strncpy(createSessionRequest.sessionStatus,SESSION_STATUS,strlen(SESSION_STATUS)); 450// createSessionRequest.userInfo.userId = userId; 451// char test[3] = {'R','K','B'}; 452// createSessionRequest.sessionData= test; 453// createSessionRequest.sessionDataSize = 3; 454// ret = sce::Toolkit::NP::Sessions::Interface::create(&createSessionRequest,&sm_createJoinFuture); 455// } 456// 457// 458// void PSVitaNPToolkit::joinNPSession() 459// { 460// SceUserServiceUserId userId = SCE_USER_SERVICE_USER_ID_INVALID; 461// int ret = sceUserServiceGetInitialUser(&userId); 462// if( ret < 0 ) 463// { 464// app.DebugPrintf("Couldn't retrieve user ID 0x%x ...\n",ret); 465// } 466// 467// sce::Toolkit::NP::JoinNpSessionRequest joinSessionRequest; 468// memset(&joinSessionRequest,0,sizeof(joinSessionRequest)); 469// // still to sort this out 470// ORBIS_STUBBED; 471// } 472// 473// void PSVitaNPToolkit::leaveNPSession() 474// { 475// 476// } 477// 478 479 480void PSVitaNPToolkit::getMessageData(SceAppUtilAppEventParam* paramData) 481{ 482 483 if (SCE_APPUTIL_APPEVENT_TYPE_NP_INVITE_MESSAGE == paramData->type) 484 { 485 sce::Toolkit::NP::Messaging::Interface::retrieveMessageAttachment(paramData,&m_messageData); 486 } 487 else if (SCE_APPUTIL_APPEVENT_TYPE_NP_APP_DATA_MESSAGE == paramData->type) 488 { 489 sce::Toolkit::NP::Messaging::Interface::retrieveMessageAttachment(paramData,&m_messageData); 490 } 491 else if (SCE_APPUTIL_APPEVENT_TYPE_NP_BASIC_JOINABLE_PRESENCE == paramData->type) 492 { 493 SceAppUtilNpBasicJoinablePresenceParam joinParam = {0}; 494 int ret = sceAppUtilAppEventParseNpBasicJoinablePresence(paramData, &joinParam); 495 if (ret < 0) 496 { 497 app.DebugPrintf("sceAppUtilAppEventParseNpBasicJoinablePresence() failed: 0x%x\n", ret); 498 } 499 else 500 { 501 SQRNetworkManager_Vita::GetJoinablePresenceDataAndProcess(&joinParam); 502 } 503 504 } 505 else 506 { 507 assert(0); 508 } 509 510}