CTR-Pia  5.4.3
Game Communication Engine
 全て クラス ネームスペース 関数 変数 型定義 列挙型 列挙型の値 ページ
transport_RoundRobinUnreliableProtocol.h
1 /*--------------------------------------------------------------------------------*
2  Copyright (C)Nintendo All rights reserved.
3 
4  These coded instructions, statements, and computer programs contain proprietary
5  information of Nintendo and/or its licensed developers and are protected by
6  national and international copyright laws. They may not be disclosed to third
7  parties or copied or duplicated in any form, in whole or in part, without the
8  prior written consent of Nintendo.
9 
10  The content herein is highly confidential and should be handled accordingly.
11  *--------------------------------------------------------------------------------*/
12 
13 
14 #pragma once
15 
16 #include <nn/pia/transport/transport_Definitions.h>
17 #include <nn/pia/transport/transport_UnreliableProtocol.h>
18 
19 namespace nn
20 {
21 namespace pia
22 {
23 namespace transport
24 {
25 
26 
27 /*!
28  @brief UnreliableProtocol を継承し、負荷を分散しながら送信する機能を追加したクラスです。
29 
30 
31  */
33 {
34 public:
35  /*!
36  @cond PRIVATE
37  @brief デフォルトコンストラクタです。
38 
39  @details アプリケーションプログラムは、このコンストラクタを直接呼び出してはいけません。
40  インスタンスの作成は、 @ref Transport::CreateProtocol を利用してください。
41  */
43  //! @endcond
44 
45 
46  /*!
47  @cond PRIVATE
48  @brief デストラクタです。
49 
50  @details アプリケーションプログラムは、このデストラクタを直接呼び出してはいけません。
51  インスタンスの破棄は、 @ref Transport::DestroyProtocol を利用してください。
52  */
53  virtual ~RoundRobinUnreliableProtocol(void);
54  //! @endcond
55 
56 
57  PIA_PROTOCOL_TYPE_INFO(ProtocolTypeRoundrobinUnreliable);
58 
59 
60  /*!
61  @cond PRIVATE
62  @brief 通信を開始します。
63 
64  @param[in] localStationAddress 自分の(ローカルの) StationAddress 。
65  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
66  @retval ResultInvalidArgument 引数に誤りがあります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
67  @retval ResultInvalidState 既に Startup() は呼ばれています。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
68 
69  */
70  virtual Result StartupWithStationAddress(const common::StationAddress& localStationAddress);
71  //! @endcond
72 
73 
74  /*!
75  @cond PRIVATE
76  @brief 通信を終了します。
77  */
78  virtual void CleanupWithStationAddress(void);
79  //! @endcond
80 
81 
82  /*!
83  @brief データを複数のステーションに向けて送信します。
84 
85  @details 自分の StationIndex を始点とし、自分の StationIndex より大きい StationIndex が割り当てられた
86  Station から順に stationNum で指定した数のステーションに向けてデータを送信します。
87  最後にデータを送信した StationIndex を次回呼出し時の始点とします。
88 
89  例えば、Station A, B, C, D, E, F のセッションで自分の Station は F, 宛先数 2 で SendToRoundRobin() を
90  呼び出した場合は以下のように送信されます。
91 
92  1回目の呼出し: SendToRoundRobin(Data1) Data1 を A と B<br />
93  2回目の呼出し: SendToRoundRobin(Data2) Data2 を C と D<br />
94  3回目の呼出し: SendToRoundRobin(Data3) Data3 を E と A<br />
95  4回目の呼出し: SendToRoundRobin(Data4) Data4 を B と C<br />
96  5回目の呼出し: SendToRoundRobin(Data5) Data5 を D と E<br />
97 
98  この関数を呼び出しただけでは実際のデータ送信は行われません。
99  この関数は、アプリケーションが渡したデータを Pia 内部のパケットバッファにコピーします。
100  パケットは Pia 内部の送信スレッドにより定期的に送信されます。
101 
102  @param[in] pData 送信したいデータの先頭を指すポインタ。
103  @param[in] dataSize 送信データサイズ。単位はバイトです。 GetDataSizeLimit() が返す値を超過してはいけません。
104  @param[in] stationNum データを送信したいステーションの数です。
105  @return 成功すれば、 IsSuccess() が true を返す Result が返されます。
106  @retval ResultInvalidArgument 引数に誤りがあります。送信データサイズが過大であった場合にも、このエラーが返されます。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
107  @retval ResultInvalidState Initialize() が呼ばれていない可能性があります。プログラミングエラーです。このエラーが返らないようにソースコードを修正してください。
108  @retval ResultNotInCommunication 通信が可能な状態ではありません。アプリケーションで適切にハンドリングしてください。
109  @see Send, Receive, MaxDataSize, GetDataSizeLimit, IsInCommunication
110  */
111  Result SendToRoundRobin(const void* pData, uint32_t dataSize, uint32_t stationNum);
112 
113 
114  /*!
115  @brief デバッグに有用な情報をプリントします。
116 
117  @param[in] flag トレースフラグの論理和。詳細は @ref TraceFlag 型を参照してください。
118  */
119  virtual void Trace(uint64_t flag) const;
120 
121 
122 private:
123  uint32_t m_LatestPariticipatingBitmap;
124  StationIndex m_LastSentStationIndex;
125 };
126 }
127 }
128 } // end of namespace nn::pia::transport