the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
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}