1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     friends_Api.h
4 
5   Copyright 2009 Nintendo.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 33065 $
14  *---------------------------------------------------------------------------*/
15 
16 #ifndef NN_FRIENDS_CTR_FRIENDS_API_H_
17 #define NN_FRIENDS_CTR_FRIENDS_API_H_
18 
19 /*! @file
20     @brief      フレンド・プレゼンス機能に関する API の宣言
21 */
22 
23 #include <nn/types.h>
24 
25 #include <nn/friends/friends_Result.h>
26 #include <nn/friends/CTR/friends_Types.h>
27 
28 #include <nn/uds/CTR/uds_Type.h>
29 
30 #ifdef __cplusplus
31 
32 namespace nn {
33 namespace friends {
34 namespace CTR {
35 
36     namespace detail
37     {
38         // ライブラリの初期化・終了
39         Result Initialize();
40         Result Finalize();
41 
42         // ライブラリ状態確認
43         bool IsInitialized();
44         bool HasLoggedIn();
45 
46         // 接続管理
47         Result Login( os::Event* pEvent );
48         Result Logout();
49 
50         // 自分情報取得(ローカル)
51         PrincipalId     GetMyPrincipalId();
52         Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame );
53         Result GetMyProfile( Profile* pProfile );
54         Result GetMyPresence( MyPresence* pMyPresence );
55         Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] );
56         Result GetMyMii( MiiData* pMiiData );
57 
58         // 友達情報取得
59         Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset, size_t size );
60         Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size );
61         Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size );
62         Result GetFriendScreenName( char16 (*pScreenNameList)[SCREEN_NAME_SIZE], const FriendKey* pFriendKeyList, size_t size, bool replaceForeignCharacters, u8* pFontRegionList );
63         Result GetFriendScreenName( char16 (*pScreenNameList)[SCREEN_NAME_SIZE], const PrincipalId* pPrincipalIdList, size_t size, bool replaceForeignCharacters, u8* pFontRegionList );
64         Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size );
65         Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size );
66         Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size );
67         Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size );
68         Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size );
69         Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size );
70         Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size );
71 
72         // 自分情報更新
73         Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] );
74 
75         // 通知内容取得
76         Result AttachToEventNotification( nn::os::Event* pEvent );
77         Result SetNotificationMask( bit32 mask );
78         u32 GetEventNotification( EventNotification* pEventNotificationList, size_t size, bool* pHasOverflowed );
79         Result GetLastResponseResult();
80 
81         // エラーコード取得
82         u32 ResultToErrorCode( const Result& result );
83     }
84 
85     namespace
86     {
87         static const char PORT_NAME_USER[]  = "frd:u";
88     }
89 
90     /*-------------------------------------------------------------------
91     ライブラリの初期化/終了
92     -------------------------------------------------------------------*/
93 
94     /*!
95     @brief          フレンド・プレゼンスライブラリの初期化を行い、プレゼンス機能を使用可能な状態にします。
96 
97     @return         処理の結果が返ってきます。<BR>
98     */
99     Result Initialize();
Initialize()100     inline Result Initialize()
101     {
102         return detail::Initialize();
103     }
104 
105     /*!
106     @brief          フレンド・プレゼンスライブラリを終了します。
107 
108                     複数回 @ref nn::friends::CTR::Initialize 関数を呼んだ場合、この関数も同じ回数呼ぶ必要があります。
109 
110     @return         処理の結果が返ってきます。<BR>
111     */
112     Result Finalize();
Finalize()113     inline Result Finalize()
114     {
115         return detail::Finalize();
116     }
117 
118     /*!
119     @brief          フレンド・プレゼンスライブラリが初期化済みか否かを確認します。
120 
121     @return         フレンド・プレゼンスライブラリが初期化済みであれば true 、未初期化であれば false が返ってきます。
122     */
123     bool IsInitialized();
IsInitialized()124     inline bool IsInitialized()
125     {
126         return detail::IsInitialized();
127     }
128 
129     /*!
130     @brief          自分のログイン状態を確認します。
131 
132                     自分が @ref nn::friends::CTR::Login 関数を呼んだ上でオンライン状態になっているかを確認します。
133 
134     @return         自分がログイン中であれば true 、ログインしていなければ false が返ってきます。
135                     この関数の結果が true であれば必ずオンライン状態ですが、結果が false であってもオフライン状態とは限りません。
136     */
137     bool HasLoggedIn();
HasLoggedIn()138     inline bool HasLoggedIn()
139     {
140         return detail::HasLoggedIn();
141     }
142 
143     /*!
144     @brief          サーバへのログインを要求します。
145 
146                     この関数が成功で返った場合は非同期処理が発生し、非同期処理が完了した時点で引数に指定した @ref nn::os::Event がシグナルされます。
147                     非同期処理の結果は @ref nn::friends::CTR::GetLastResponseResult で取得できます。
148                     この関数が失敗で返った場合は、非同期処理が発生することはありません。<BR>
149                     <BR>
150                     この関数を呼ぶには、事前に @ref nn::ac::Connect 関数を呼んで AP との接続を確立しておく必要があります。
151                     AP との接続を確立せずに呼んだ場合は @ref nn::friends::ResultAcNotConnected を返します。<BR>
152                     <BR>
153                     バックグラウンドでサーバからの切断処理が走っていた場合、この関数は一時的に @ref nn::friends::ResultTemporarilyBusy を返します。
154                     その場合は比較的短時間が経過した後に再試行することで成功する可能性があります。<BR>
155                     <BR>
156                     すでにログインしている状態でコールしても成功します。その場合、非同期処理は瞬時に成功で完了します。<BR>
157                     <BR>
158                     非同期処理が成功した場合、必ずオンライン状態になります。
159 
160     @param[in]      pEvent  非同期処理の完了を通知する @ref nn::os::Event へのポインタを指定します。事前に @ref nn::os::Event::Initialize で初期化しておいてください。
161 
162     @return         処理の結果が返ってきます。
163     */
164     Result Login( os::Event* pEvent );
Login(os::Event * pEvent)165     inline Result Login( os::Event* pEvent )
166     {
167         return detail::Login( pEvent );
168     }
169 
170     /*!
171     @brief          サーバへのログイン要求を撤回します。
172 
173                     すでにログアウトしている状態でコールしても成功します。<BR>
174                     <BR>
175                     この関数が成功しても、オフライン状態であることは保証されません。<BR>
176                     <BR>
177                     何らかの要因によりサーバとの接続が切断された場合、この関数をコール済みの状態へ暗黙的に遷移します。
178 
179     @return         処理の結果が返ってきます。
180     */
181     Result Logout();
Logout()182     inline Result Logout()
183     {
184         return detail::Logout();
185     }
186 
187     /*!
188     @brief          自分のプリンシパル ID を取得します。
189 
190     @return         自分のプリンシパル ID が返ってきます。<BR>
191                     <BR>
192                     ライブラリが未初期化であったり、まだ一度もサーバに接続したことがないと @ref nn::friends::CTR::INVALID_PRINCIPAL_ID が返ってきます。
193     */
194     PrincipalId GetMyPrincipalId();
GetMyPrincipalId()195     inline PrincipalId GetMyPrincipalId()
196     {
197         return detail::GetMyPrincipalId();
198     }
199 
200     /*!
201     @brief          自分の情報の公開レベルを取得します。
202 
203     @param[out]     pIsPublicMode        公開モードを格納するバッファへのポインタを指定します。
204     @param[out]     pIsShowGameName      遊んでいるゲームを公開するかを格納するバッファへのポインタを指定します。
205     @param[out]     pIsShowPlayedGame    ゲーム履歴を公開するかを格納するバッファへのポインタを指定します。
206 
207     @return         処理の結果が返ってきます。
208     */
209     Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame );
GetMyPreference(bool * pIsPublicMode,bool * pIsShowGameName,bool * pIsShowPlayedGame)210     inline Result GetMyPreference( bool* pIsPublicMode, bool* pIsShowGameName, bool* pIsShowPlayedGame )
211     {
212         return detail::GetMyPreference( pIsPublicMode, pIsShowGameName, pIsShowPlayedGame );
213     }
214 
215     /*!
216     @brief          自分のプロフィール情報を取得します。
217 
218     @param[out]     pProfile    自分のプロフィール情報を格納する構造体へのポインタを指定します。
219 
220     @return         処理の結果が返ってきます。
221     */
222     Result GetMyProfile( Profile* pProfile );
GetMyProfile(Profile * pProfile)223     inline Result GetMyProfile( Profile* pProfile )
224     {
225         return detail::GetMyProfile( pProfile );
226     }
227 
228     /*!
229     @brief          自分のプレゼンス情報を取得します。
230 
231     @param[out]     pMyPresence     自分のプレゼンス情報を格納する構造体へのポインタを指定します。
232 
233     @return         処理の結果が返ってきます。
234     */
235     Result GetMyPresence( MyPresence* pMyPresence );
GetMyPresence(MyPresence * pMyPresence)236     inline Result GetMyPresence( MyPresence* pMyPresence )
237     {
238         return detail::GetMyPresence( pMyPresence );
239     }
240 
241     /*!
242     @brief          自分の表示名を取得します。
243 
244     @param[out]     screenName  自分の表示名を格納するバッファを指定します。
245 
246     @return         処理の結果が返ってきます。
247     */
248     Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] );
GetMyScreenName(char16 screenName[SCREEN_NAME_SIZE])249     inline Result GetMyScreenName( char16 screenName[SCREEN_NAME_SIZE] )
250     {
251         return detail::GetMyScreenName( screenName );
252     }
253 
254     /*!
255     @brief          自分の Mii データを取得します。
256 
257                     「Mii スタジオ」で「じぶんの Mii」を設定していない場合、空の Mii データが取得されます。<BR>
258                     <BR>
259                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
260 
261     @param[out]     pMiiData  自分の Mii データを格納する構造体へのポインタを指定します。
262 
263     @return         処理の結果が返ってきます。
264     */
265     Result GetMyMii( MiiData* pMiiData );
GetMyMii(MiiData * pMiiData)266     inline Result GetMyMii( MiiData* pMiiData )
267     {
268         return detail::GetMyMii( pMiiData );
269     }
270 
271     /*!
272     @brief          フレンドリストに登録されたフレンドキーのリストを取得します。
273 
274                     取得されるフレンドキーには、まだフレンド関係が成立していないものも含まれます。
275 
276     @param[out]     pFriendKeyList  取得したフレンドキーを格納するバッファへのポインタを指定します。
277     @param[out]     pNum            実際に取得された数を格納するバッファへのポインタを指定します。
278     @param[in]      offset          取得を開始するフレンドキーのインデックスを指定します。
279     @param[in]      size            取得するフレンドキーの最大数(バッファの要素数)を指定します。
280 
281     @return         処理の結果が返ってきます。
282     */
283     Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset = 0, size_t size = FRIEND_LIST_SIZE );
GetFriendKeyList(FriendKey * pFriendKeyList,size_t * pNum,size_t offset,size_t size)284     inline Result GetFriendKeyList( FriendKey* pFriendKeyList, size_t* pNum, size_t offset, size_t size)
285     {
286         return detail::GetFriendKeyList( pFriendKeyList, pNum, offset, size );
287     }
288 
289     /*!
290     @brief          フレンドプレゼンスのリストを取得します。
291 
292                     自分と異なる合流ゲーム ID を指定したフレンドのゲームモードとお誘いフラグは取得できません。<BR>
293                     <BR>
294                     引数で与えられたキーに対応するフレンドが存在しないと、空のプレゼンスが返されます。
295 
296     @param[out]     pFriendPresenceList     取得したフレンドプレゼンスを格納するバッファへのポインタを指定します。
297     @param[in]      pFriendKeyList          フレンドキーのリストへのポインタを指定します。
298     @param[in]      size                    フレンドキーのリストの要素数(バッファの要素数)を指定します。
299 
300     @return         処理の結果が返ってきます。
301     */
302     Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendPresence(FriendPresence * pFriendPresenceList,const FriendKey * pFriendKeyList,size_t size)303     inline Result GetFriendPresence( FriendPresence* pFriendPresenceList, const FriendKey* pFriendKeyList, size_t size)
304     {
305         return detail::GetFriendPresence( pFriendPresenceList, pFriendKeyList, size );
306     }
307 
308     /*!
309     @brief          フレンドプレゼンスのリストを取得します。
310 
311                     自分と異なる合流ゲーム ID を指定したフレンドのゲームモードとお誘いフラグは取得できません。<BR>
312                     <BR>
313                     引数で与えられたキーに対応するフレンドが存在しないと、空のプレゼンスが返されます。
314 
315     @param[out]     pFriendPresenceList     取得したフレンドプレゼンスを格納するバッファへのポインタを指定します。
316     @param[in]      pPrincipalIdList        プリンシパル ID のリストへのポインタを指定します。
317     @param[in]      size                    プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
318 
319     @return         処理の結果が返ってきます。
320     */
321     Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendPresence(FriendPresence * pFriendPresenceList,const PrincipalId * pPrincipalIdList,size_t size)322     inline Result GetFriendPresence( FriendPresence* pFriendPresenceList, const PrincipalId* pPrincipalIdList, size_t size)
323     {
324         return detail::GetFriendPresence( pFriendPresenceList, pPrincipalIdList, size );
325     }
326 
327     /*!
328     @brief          フレンドの表示名のリストを取得します。
329 
330                     この関数を使用すると、「似顔絵ライブラリ」を使用せずにフレンドの Mii の名前を直接取得することができます。
331                     また、対象がフレンド関係成立待ち状態で Mii が取得できない場合でも、自分が仮登録した表示名が取得されます。<BR>
332                     <BR>
333                     フレンドの Mii がブラックリストに含まれていた場合でも生の名前が取得されますが、
334                     フレンドの Mii の名前が NG ネームだった場合は ??? に置換されて取得されます。<BR>
335                     <BR>
336                     引数で与えられたキーに対応するフレンドが存在しないと、空の表示名が返されます。
337 
338     @param[out]     pScreenNameList             取得した表示名を格納するバッファへのポインタを指定します。
339     @param[in]      pFriendKeyList              フレンドキーのリストへのポインタを指定します。
340     @param[in]      size                        フレンドキーのリストの要素数(バッファの要素数)を指定します。
341     @param[in]      replaceForeignCharacters    フレンドの表示名のフォントリージョンが自分と異なる場合に、 ASCII 以外の文字を ? で置換するかを指定します。
342     @param[in]      pFontRegionList             フレンドの表示名のフォントリージョンを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
343 
344     @return         処理の結果が返ってきます。
345     */
346     Result GetFriendScreenName(
347         char16           (*pScreenNameList)[SCREEN_NAME_SIZE],
348         const FriendKey* pFriendKeyList,
349         size_t           size = 1,
350         bool             replaceForeignCharacters = true,
351         u8*              pFontRegionList = NULL
352     );
GetFriendScreenName(char16 (* pScreenNameList)[SCREEN_NAME_SIZE],const FriendKey * pFriendKeyList,size_t size,bool replaceForeignCharacters,u8 * pFontRegionList)353     inline Result GetFriendScreenName(
354         char16           (*pScreenNameList)[SCREEN_NAME_SIZE],
355         const FriendKey* pFriendKeyList,
356         size_t           size,
357         bool             replaceForeignCharacters,
358         u8*              pFontRegionList
359     )
360     {
361         return detail::GetFriendScreenName( pScreenNameList, pFriendKeyList, size, replaceForeignCharacters, pFontRegionList );
362     }
363 
364     /*!
365     @brief          フレンドの表示名のリストを取得します。
366 
367                     この関数を使用すると、「似顔絵ライブラリ」を使用せずにフレンドの Mii の名前を直接取得することができます。
368                     また、対象がフレンド関係成立待ち状態で Mii が取得できない場合でも、自分が仮登録した表示名が取得されます。<BR>
369                     <BR>
370                     フレンドの Mii がブラックリストに含まれていた場合でも生の名前が取得されますが、
371                     フレンドの Mii の名前が NG ネームだった場合は ??? に置換されて取得されます。<BR>
372                     <BR>
373                     引数で与えられたキーに対応するフレンドが存在しないと、空の表示名が返されます。
374 
375     @param[out]     pScreenNameList             取得した表示名を格納するバッファへのポインタを指定します。
376     @param[in]      pPrincipalIdList            プリンシパル ID のリストへのポインタを指定します。
377     @param[in]      size                        プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
378     @param[in]      replaceForeignCharacters    フレンドの表示名のフォントリージョンが自分と異なる場合に、 ASCII 以外の文字を ? で置換するかを指定します。
379     @param[in]      pFontRegionList             フレンドの表示名のフォントリージョンを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
380 
381     @return         処理の結果が返ってきます。
382     */
383     Result GetFriendScreenName(
384         char16             (*pScreenNameList)[SCREEN_NAME_SIZE],
385         const PrincipalId* pPrincipalIdList,
386         size_t             size = 1,
387         bool               replaceForeignCharacters = true,
388         u8*                pFontRegionList = NULL
389     );
GetFriendScreenName(char16 (* pScreenNameList)[SCREEN_NAME_SIZE],const PrincipalId * pPrincipalIdList,size_t size,bool replaceForeignCharacters,u8 * pFontRegionList)390     inline Result GetFriendScreenName(
391         char16             (*pScreenNameList)[SCREEN_NAME_SIZE],
392         const PrincipalId* pPrincipalIdList,
393         size_t             size,
394         bool               replaceForeignCharacters,
395         u8*                pFontRegionList
396     )
397     {
398         return detail::GetFriendScreenName( pScreenNameList, pPrincipalIdList, size, replaceForeignCharacters, pFontRegionList );
399     }
400 
401     /*!
402     @brief          フレンドの Mii データのリストを取得します。
403 
404                     引数で与えられたキーに対応するフレンドが存在しないと、空の Mii データが返されます。<BR>
405                     <BR>
406                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
407 
408     @param[out]     pMiiDataList    取得した Mii データを格納するバッファへのポインタを指定します。
409     @param[in]      pFriendKeyList  フレンドキーのリストへのポインタを指定します。
410     @param[in]      size            フレンドキーのリストの要素数(バッファの要素数)を指定します。
411 
412     @return         処理の結果が返ってきます。
413     */
414     Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendMii(MiiData * pMiiDataList,const FriendKey * pFriendKeyList,size_t size)415     inline Result GetFriendMii( MiiData* pMiiDataList, const FriendKey* pFriendKeyList, size_t size)
416     {
417         return detail::GetFriendMii( pMiiDataList, pFriendKeyList, size );
418     }
419 
420     /*!
421     @brief          フレンドの Mii データのリストを取得します。
422 
423                     引数で与えられたキーに対応するフレンドが存在しないと、空の Mii データが返されます。<BR>
424                     <BR>
425                     取得した Mii データを利用するには別途「似顔絵ライブラリ」が必要です。
426 
427     @param[out]     pMiiDataList        取得した Mii データを格納するバッファへのポインタを指定します。
428     @param[in]      pPrincipalIdList    プリンシパル ID のリストへのポインタを指定します。
429     @param[in]      size                プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
430 
431     @return         処理の結果が返ってきます。
432     */
433     Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size = 1);
GetFriendMii(MiiData * pMiiDataList,const PrincipalId * pPrincipalIdList,size_t size)434     inline Result GetFriendMii( MiiData* pMiiDataList, const PrincipalId* pPrincipalIdList, size_t size)
435     {
436         return detail::GetFriendMii( pMiiDataList, pPrincipalIdList, size );
437     }
438 
439     /*!
440     @brief          フレンドのプロフィール情報のリストを取得します。
441 
442                     引数で与えられたキーに対応するフレンドが存在しないと、空のプロフィール情報が返されます。
443 
444     @param[out]     pProfileList    取得したプロフィール情報を格納するバッファへのポインタを指定します。
445     @param[in]      pFriendKeyList  フレンドキーのリストへのポインタを指定します。
446     @param[in]      size            フレンドキーのリストの要素数(バッファの要素数)を指定します。
447 
448     @return         処理の結果が返ってきます。
449     */
450     Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendProfile(Profile * pProfileList,const FriendKey * pFriendKeyList,size_t size)451     inline Result GetFriendProfile( Profile* pProfileList, const FriendKey* pFriendKeyList, size_t size)
452     {
453         return detail::GetFriendProfile( pProfileList, pFriendKeyList, size );
454     }
455 
456     /*!
457     @brief          フレンドのプロフィール情報のリストを取得します。
458 
459                     引数で与えられたキーに対応するフレンドが存在しないと、空のプロフィール情報が返されます。
460 
461     @param[out]     pProfileList        取得したプロフィール情報を格納するバッファへのポインタを指定します。
462     @param[in]      pPrincipalIdList    プリンシパル ID のリストへのポインタを指定します。
463     @param[in]      size                プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
464 
465     @return         処理の結果が返ってきます。
466     */
467     Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendProfile(Profile * pProfileList,const PrincipalId * pPrincipalIdList,size_t size)468     inline Result GetFriendProfile( Profile* pProfileList, const PrincipalId* pPrincipalIdList, size_t size)
469     {
470         return detail::GetFriendProfile( pProfileList, pPrincipalIdList, size );
471     }
472 
473     /*!
474     @brief          フレンドの関係のリストを取得します。
475 
476                     フレンド関係は、属性のビットの OR であらわされます。
477                     一度でもフレンド関係が成立したことがあるフレンドは @ref nn::friends::CTR::ATTRIBUTE_FLAG_ESTABLISHED ビットが 1 になります。
478 
479     @param[out]     pAttributeFlagsList     取得した関係情報を格納するバッファへのポインタを指定します。
480     @param[in]      pFriendKeyList          フレンドキーのリストへのポインタを指定します。
481     @param[in]      size                    フレンドキーのリストの要素数(バッファの要素数)を指定します。
482 
483     @return         処理の結果が返ってきます。
484     */
485     Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size = 1 );
GetFriendAttributeFlags(bit32 * pAttributeFlagsList,const FriendKey * pFriendKeyList,size_t size)486     inline Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const FriendKey* pFriendKeyList, size_t size)
487     {
488         return detail::GetFriendAttributeFlags( pAttributeFlagsList, pFriendKeyList, size );
489     }
490 
491     /*!
492     @brief          フレンドの関係のリストを取得します。
493 
494                     フレンド関係は、属性のビットの OR であらわされます。
495                     一度でもフレンド関係が成立したことがあるフレンドは @ref nn::friends::CTR::ATTRIBUTE_FLAG_ESTABLISHED ビットが 1 になります。
496 
497     @param[out]     pAttributeFlagsList     取得した関係情報を格納するバッファへのポインタを指定します。
498     @param[in]      pPrincipalIdList        プリンシパル ID のリストへのポインタを指定します。
499     @param[in]      size                    プリンシパル ID のリストの要素数(バッファの要素数)を指定します。
500 
501     @return         処理の結果が返ってきます。
502     */
503     Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size = 1 );
GetFriendAttributeFlags(bit32 * pAttributeFlagsList,const PrincipalId * pPrincipalIdList,size_t size)504     inline Result GetFriendAttributeFlags( bit32* pAttributeFlagsList, const PrincipalId* pPrincipalIdList, size_t size)
505     {
506         return detail::GetFriendAttributeFlags( pAttributeFlagsList, pPrincipalIdList, size );
507     }
508 
509     /*!
510     @brief          フレンドの暗号化ローカルフレンドコードを復号します。
511 
512                     フレンドのものでない暗号化ローカルフレンドコードを指定した場合、無効なローカルフレンドコードが返ってきます。
513 
514     @param[out]     pLocalFriendCodeList            復号したローカルフレンドコードを格納するバッファへのポインタを指定します。
515     @param[in]      pScrambledLocalFriendCodeList   暗号化ローカルフレンドコードのリストへのポインタを指定します。
516     @param[in]      size                            暗号化ローカルフレンドコードのリストの要素数(バッファの要素数)を指定します。
517 
518     @return         処理の結果が返ってきます。
519     */
520     Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size = 1);
UnscrambleLocalFriendCode(LocalFriendCode * pLocalFriendCodeList,const uds::CTR::ScrambledLocalFriendCode * pScrambledLocalFriendCodeList,size_t size)521     inline Result UnscrambleLocalFriendCode( LocalFriendCode* pLocalFriendCodeList, const uds::CTR::ScrambledLocalFriendCode* pScrambledLocalFriendCodeList, size_t size )
522     {
523         return detail::UnscrambleLocalFriendCode( pLocalFriendCodeList, pScrambledLocalFriendCodeList, size );
524     }
525 
526     /*!
527     @brief          ゲームモード説明文字列を更新します。
528 
529                     ここで設定した文字列は、オンライン時にフレンドへ送信され、相手のフレンドリストに表示されます。<BR>
530                     <BR>
531                     引数に渡せる文字列は改行や終端文字を含めて @ref nn::friends::CTR::MODE_DESCRIPTION_SIZE 文字までですが、
532                     フレンドリストでの表示は全角16文字分の幅×2行までとなり、それを超えた分は切れて表示されません。<BR>
533                     <BR>
534                     本体リージョンと、フレンドリストで表示できる文字の関係は以下のとおりです。<BR>
535                       @li 日米欧:内蔵フォントの日米欧文字に含まれる文字<BR>
536                       @li 中:内蔵フォントの簡体字に含まれる文字<BR>
537                       @li 韓:内蔵フォントのハングルに含まれる文字<BR>
538                       @li 台:内蔵フォントの繁体字に含まれる文字<BR>
539                     ここに含まれない文字は、任天堂外字の「?」 (L'\\xE011') に置き換えられて表示されます。
540                     各フォントに含まれる文字セットの詳細については、「CTR オーバービュー」を参照してください。<BR>
541                     <BR>
542                     改行には L'\\n' を使用してください。
543 
544     @param[in]      description     ゲームモード説明文字列を指定します。
545 
546     @return         処理の結果が返ってきます。
547     */
548     Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] );
UpdateGameModeDescription(const char16 description[MODE_DESCRIPTION_SIZE])549     inline Result UpdateGameModeDescription( const char16 description[MODE_DESCRIPTION_SIZE] )
550     {
551         return detail::UpdateGameModeDescription( description );
552     }
553 
554 
555     /*!
556     @brief          自分のログイン状態や、フレンドの状態変更を通知するイベントを指定します。
557 
558                     この関数を複数回呼んだ場合、最後に指定した @ref nn::os::Event のみがシグナルします。
559 
560     @param[out]     pEvent   変更を通知する @ref nn::os::Event へのポインタを指定します。事前に @ref nn::os::Event::Initialize で初期化しておいてください。
561 
562     @return         処理の結果が返ってきます。
563     */
564     Result AttachToEventNotification( nn::os::Event* pEvent );
AttachToEventNotification(nn::os::Event * pEvent)565     inline Result AttachToEventNotification( nn::os::Event* pEvent )
566     {
567         return detail::AttachToEventNotification( pEvent );
568     }
569 
570     /*!
571     @brief          受け取る通知の種類を指定します。
572 
573                     @ref nn::friends::CTR::AttachToEventNotification で指定したイベントをシグナルさせたり、
574                     @ref nn::friends::CTR::GetEventNotification で取得される履歴に含める通知の種類を指定します。
575 
576                     初期状態ではこの関数に @ref nn::friends::CTR::NOTIFICATION_MASK_DEFAULT を指定したのと同じ状態になっています。
577 
578     @param[in]      mask    受け取る通知の種類のビットマスクを指定します。 @ref nn::friends::CTR::NotificationMask 列挙体メンバの OR を指定してください。
579 
580     @return         処理の結果が返ってきます。
581     */
582     Result SetNotificationMask( bit32 mask );
SetNotificationMask(bit32 mask)583     inline Result SetNotificationMask( bit32 mask )
584     {
585         return detail::SetNotificationMask( mask );
586     }
587 
588     /*!
589     @brief          自分のオンライン状態や、フレンドの状態変更の通知の履歴を取得します。
590 
591                     この関数を呼ぶと、まだ取得していない通知の内容を古いものから順に取得します。
592                     返値が 0 になるまで繰り返し呼ぶことで、たまっている通知を時系列順に取得することができます。<BR>
593                     <BR>
594                     ライブラリが保存できる通知は128件までです。
595                     128件を超えた通知は古いほうから削除されます。
596                     通知の保存件数は今後調整される可能性があります。
597 
598     @param[out]     pEventNotificationList   取得した通知の内容を格納するバッファへのポインタを指定します。
599     @param[in]      size                     バッファの要素数を指定します。
600     @param[out]     pHasOverflowed           取得できずにあふれた通知があったかを格納するバッファへのポインタを指定します。不要な場合は NULL を指定してください。
601 
602     @return         実際に取得できた通知の数が返ってきます。
603     */
604     u32 GetEventNotification(
605         EventNotification* pEventNotificationList,
606         size_t             size = 1,
607         bool*              pHasOverflowed = NULL
608     );
GetEventNotification(EventNotification * pEventNotificationList,size_t size,bool * pHasOverflowed)609     inline u32 GetEventNotification(
610         EventNotification* pEventNotificationList,
611         size_t             size,
612         bool*              pHasOverflowed
613     )
614     {
615         return detail::GetEventNotification( pEventNotificationList, size, pHasOverflowed );
616     }
617 
618     /*!
619     @brief          完了した非同期処理の結果を取得します。
620 
621                     複数の非同期処理を走らせると、取得される結果は最後に開始した非同期処理のものでその都度上書きされます。
622                     ある非同期処理の完了前に別の非同期処理を開始した場合、後者の完了前に前者が完了したとしても、その結果を取得することはできません。
623                     原則として、複数の非同期処理を並行して走らせることは避けてください。
624 
625     @return         非同期処理の処理の結果が返ってきます。
626     */
627     Result GetLastResponseResult();
GetLastResponseResult()628     inline Result GetLastResponseResult()
629     {
630         return detail::GetLastResponseResult();
631     }
632 
633     /*!
634     @brief          フレンド・プレゼンスライブラリの API の結果からエラーコードを取得します。
635 
636     @param[in]      result  フレンド・プレゼンスライブラリの API から取得した結果を指定します。
637 
638     @return         指定した結果に対応するエラーコードが返ってきます。
639                     <BR>
640                     エラーコードを表示する必要がない結果や、 FRIENDS ライブラリ API 以外の結果を指定した場合は 0 が返ってきます。
641     */
642     u32 ResultToErrorCode( const Result& result );
ResultToErrorCode(const Result & result)643     inline u32 ResultToErrorCode( const Result& result )
644     {
645         return detail::ResultToErrorCode( result );
646     }
647 
648 } // end of namespace CTR
649 } // end of namespace friends
650 } // end of namespace nn
651 
652 #endif // __cplusplus
653 
654 // 以下、C 用宣言
655 
656 #include <nn/util/detail/util_CLibImpl.h>
657 
658 /*!
659     @addtogroup   nn_friends   friends
660 
661     @{
662 */
663 
664 
665 
666 /*!
667   @}
668 */
669 
670 #endif  // ifndef NN_FRIENDS_CTR_FRIENDS_API_H_
671