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