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