17 #include <pia/transport/transport_definitions.h> 18 #include <pia/common/common_types.h> 19 #include <pia/transport/transport_ProtocolID.h> 20 #include <pia/common/common_PacketDefine.h> 42 class ProtocolMessageReader;
55 class ReliableSlidingWindow :
public common::RootObject
61 ReliableSlidingWindow();
67 virtual ~ReliableSlidingWindow();
81 nn::Result
Initialize(u32 sendBufferSize, u32 receiveBufferSize);
104 nn::Result Startup(PacketHandler* pPacketHandler, u32 protocolId,
StationIndex sourceStationIndex,
StationIndex destinationStationIndex);
119 nn::Result StartupForStationHost(PacketHandler* pPacketHandler, u32 protocolId);
134 nn::Result StartupForStationChild(PacketHandler* pPacketHandler, u32 protocolId);
162 bool IsInCommunication()
const;
176 nn::Result AnalyzeProtocolMessage(
const ProtocolMessageReader& reader);
188 nn::Result Dispatch(PacketHandler* pPacketHandler);
205 nn::Result PopData(
void* pBuffer,
size_t* pDataSize,
size_t bufferSize);
220 nn::Result PushData(
const void* pData,
size_t dataSize);
230 bool CanPushData(
size_t dataSize);
238 u32 GetProtocolId()
const 251 return m_SourceStationIndex;
262 return m_DestinationStationIndex;
271 virtual void Trace(u64 flag)
const;
279 void GetString(common::String* pString)
const;
288 u32 GetSendBufferDataNum()
const 290 return m_SendBuffer.GetDataNum();
300 u32 GetReceiveBufferDataNum()
const 302 return m_ReceiveBuffer.GetDataNum();
313 static nn::Result SetRetransmissionTimeOutRate(f32 rate);
322 static f32 GetRetransmissionTimeOutRate(
void)
338 static nn::Result SetRttSamplingNum(
size_t num);
348 static size_t GetRttSamplingNum(
void)
350 return s_RttSamplingNum;
356 typedef s32 (*ResendTimeCallback)(s32 rtt,
size_t resendCount);
366 static ResendTimeCallback RegisterResendTimeCallback(ResendTimeCallback cb);
370 #if NN_PIA_EXPERIMENT_RELIABLE_DETAIL_INFO 371 void PrintDebugInfo(
void)
const;
373 void ClearResendCount(
void);
374 u32 GetResendCount(
void)
const;
379 ReliableSlidingWindow(
const ReliableSlidingWindow& rhs);
380 bool operator==(
const ReliableSlidingWindow& rhs)
const;
381 bool operator!=(
const ReliableSlidingWindow& rhs)
const;
382 ReliableSlidingWindow& operator=(
const ReliableSlidingWindow& rhs);
385 void StartupCommon(PacketHandler* pPacketHandler);
400 static const u32 c_PayloadSizeMax = (common::PROTOCOL_MESSGAE_PAYLOAD_SIZE_MAX /
sizeof(u64) *
sizeof(u64)) -
sizeof(MessageHeader);
405 bit8 m_Buffer[c_PayloadSizeMax];
411 MessageHeader m_Header;
421 MessageData m_MessageData;
434 template <
typename T>
435 class Buffer :
public common::RootObject
446 T* GetData(u32 sequenceId);
452 u32 GetStartSequenceId()
const 454 return m_StartSequenceId;
456 u32 GetDataNum()
const 461 void Withdraw(u32 num);
474 PIA_ASSERT(IsEnd() ==
false);
475 u32 idx = m_pBuffer->m_StartIdx + m_Offset;
476 if (idx >= m_pBuffer->m_Size)
478 idx -= m_pBuffer->m_Size;
480 return &(m_pBuffer->m_pData[idx]);
494 return m_Offset >= m_pBuffer->m_DataNum;
498 if (IsEnd() ==
false)
505 Buffer<T>* m_pBuffer;
513 u32 m_StartSequenceId;
519 class SendBuffer :
public Buffer<SendData>
522 u32 GetAvailableDataNum()
const 524 return m_Size - m_DataNum;
531 class ReceiveBuffer :
public Buffer<ReceiveData>
534 ReceiveData* Assign(u32 sequenceId);
538 transport::ProtocolId m_ProtocolId;
542 SendBuffer m_SendBuffer;
543 ReceiveBuffer m_ReceiveBuffer;
548 u64 m_DefaultResendTimeSpan;
553 #if NN_PIA_EXPERIMENT_RELIABLE_DETAIL_INFO 557 size_t m_LargeDataSendSize;
560 static f32 s_RtoRate;
561 static size_t s_RttSamplingNum;
562 static ResendTimeCallback s_pfResendTimeCallback;
void Finalize(void)
Finalizes the common module.
Class that represents time.
Definition: common_Time.h:39
StationIndex
Enumerates StationIndex values.
Definition: platformCtr.h:44
Definition: transport_ReliableSlidingWindow.h:463
nn::Result Initialize(void *pMem, u32 size)
Initializes the common module.