11 #include "RNPlatform/Inc/MemoryTracking.h"
12 #ifndef __XPSESSION_H__
13 #define __XPSESSION_H__
15 #define _XPSESSION_VERSION 7200
21 #include "RNXPSession/Inc/XPSession.h"
22 #include "RNXPURL/Inc/XPURL.h"
23 #include "RNXPURL/Inc/Transport.h"
24 #include "RNPlatform/Inc/MessageHelper.h"
25 #include "RNPlatform/Inc/ThreadClass.h"
26 #include "RNPlatform/Inc/SysTime.h"
28 namespace RNReplicaNet
31 const int kPingHistorySize = 5;
49 XPSessionInternalBufferedPacket(
const int sessionid,
const char *data,
const int length,
const bool reliable,
const bool certain,
const bool ordered,
const unsigned int band);
61 const int kXPSessionUnknownID = -1;
62 const int kXPSessionBroadcastID = -2;
65 const unsigned char kXPSessionPacketType_Unreliable = 0;
66 const unsigned char kXPSessionPacketType_Reliable = 1;
67 const unsigned char kXPSessionPacketType_Certain = 2;
68 const unsigned char kXPSessionPacketType_Ordered = 3;
94 kXPSession_ETRANSPORT_CLOSED = -2,
95 kXPSession_ETRANSPORT_ERROR = -3
120 void Create(
const std::string name);
128 void Create(
const std::string name,
const std::string protocols);
141 std::string
ExportURL(
const bool shortAddress =
true);
148 void Join(
const std::string url);
159 void Find(
const std::string protocols);
222 void DataSendToSession(
const int sessionid,
const char *data,
const int length,
const bool reliable =
true,
const bool certain =
false,
const bool ordered =
false,
const unsigned int band = 0);
265 bool DataReceivePeek(
int *
const fromsessionid,
int *
const length,
unsigned char *
const type = 0);
275 bool DataReceive(
int *
const fromsessionid,
char *
const data,
int *
const length,
unsigned char *
const type = 0);
442 void Disconnect(
const int sessionID = kXPSessionUnknownID);
500 void GetMergedStatistics(
int *
const sent=0,
int *
const received=0,
const bool reset =
false);
539 bool GetBandwidthFromSessionID(
const int sessionID,Transport::Bandwidth *
const bandwidth,
int *
const output,
int *
const input);
565 typedef int GetSessionIDCallback(
void *context);
574 void SetProxyMode(
const bool enable =
false);
576 bool GetProxyMode(
void);
583 int GetMaximumDataSize(
void)
const;
594 int GetPacketCompressionLevel(
void)
const;
595 int GetLargePacketCompressionLevel(
void)
const;
618 int mMasterSessionID;
621 char *mMessageBufferIn;
622 char *mMessageBufferOut;
623 float mCurrentSendRate;
624 float mCurrentRecvRate;
625 SysTimeType mLastRateCalcTime;
628 bool mCompletelyStable;
630 SysTimeType startPollTime;
631 SysTimeType mLocalTimeStartPollTime;
632 int mPotentialMasterSessionID;
633 int mNoticedHighestSessionID;
636 bool mPollLayerBelow;
637 bool mEnablePreConnect;
641 std::vector<Transport *> mMasterListens;
642 std::vector<Transport *> mListens;
643 std::list<Route *> mConnections;
644 std::multimap<int,Route *> mConnectionsBySessionID;
645 std::vector<Transport *> mFindTransports;
647 std::string mSessionName;
657 mFromSession = kXPSessionUnknownID;
660 mPacketType = kXPSessionPacketType_Unreliable;
663 virtual ~WaitingPacket()
675 unsigned char mPacketType;
678 std::list<WaitingPacket *> mWaitingPackets;
680 std::list<int> mJoiners;
681 std::list<int> mLeavers;
684 std::list<int> mPotentialLeavers;
687 SysTimeType mZeroTime;
688 float mZeroTimeDelta;
689 SysTimeType mLastTimeCorrectionTime;
690 SysTimeType mTargetZeroTime;
694 bool mDontDoBreakOut;
696 float mLatencyRecalculationDelay;
699 bool mPreConnectSignalDone;
700 int mPreConnectSendToID;
702 bool mCreateOrJoinDone;
704 bool mEnableAutomaticCompression;
705 int mCompressionBefore;
706 int mCompressionAfter;
709 bool mTransportDisconnected;
710 bool mTransportError;
712 bool mAllowConnections;
714 int mNetworkPacketsLost;
715 int mNetworkPacketsRejected;
717 bool mEnableExtraBuffering;
718 void HandleWaitingToSendPackets(
void);
720 int mNumWaitingToSend;
721 std::list<XPSessionInternalBufferedPacket*> mWaitingToSend;
729 std::string mReturnExportURLTrue;
730 std::string mReturnExportURLFalse;
731 std::map<int,std::string> mBufferedURLsBySessionID;
732 std::map<int,float> mBufferedLatencyBySessionID;
734 XPSession::GetSessionIDCallback *mGetSessionIDCallback;
735 void *mGetSessionIDCallbackContext;
738 bool mMasterIsProxyMode;
741 std::string BufferedExportURL(
const bool shortAddress);
742 int BufferedGetNetworkPacketsLost(
void);
744 void MutateToMaster(
const int nextsessionid,
const Route *route);
747 std::string ExportURLInternal(
const bool ShortAddress =
true);
749 std::string GetSessionString(
void);
751 Route *FindRouteForSessionIDFromMap(
const int sessionID);
757 bool Initialise(
void);
760 void DataSendToSessionPrivate(
const int sessionid,
const char *data,
const int length,
const bool reliable =
true,
const bool certain =
false,
const bool ordered =
false,
const unsigned int band = 0);
761 void DataPacketSendPrivate(
const int finalDestID,
const char *data,
const int length,
const bool reliable,
const bool certain,
const bool ordered,
const unsigned int band,Route *route);
763 void InternalSendMessage(Route *routed,
const SessionPacket_Header &message,
const int length);
764 bool ParsePacket(Route *
const route,
int length);
766 std::string AppendSessionInfo(std::string instr);
769 void HandleTransportDiscovery(Transport *
const trans);
770 int ThreadEntry(
void);
774 void CompressSessionPacket(SessionPacket_Header &message);
775 void EncryptSessionPacket(SessionPacket_Header &message);
777 void AddJoiner(
const int sessionid);
778 void AddLeaver(
const int sessionid);
780 void CreateBufferedURL(
void);
782 int mMaximumDataSize;
783 int mPacketCompressionLevel;
784 int mLargePacketCompressionLevel;
786 int mTransparentPacketCompression;
void SetClientOnly(const bool isClient=false)
void SetMaximumDataSize(const int bytes=64 *1024)
void SetCanSpider(const bool canSpider=true)
float GetNetworkReceiveRate(void)
void PreConnectHasFinished(void)
bool GetBandwidthFromSessionID(const int sessionID, Transport::Bandwidth *const bandwidth, int *const output, int *const input)
void Disconnect(const int sessionID=kXPSessionUnknownID)
std::string GetURLFromSessionID(const int sessionID)
void SetEncryption(const bool enable=false)
bool GetPreConnectStatus(void)
bool GetPollLayerBelow(void)
void GetCompressionStatistics(int *const before=0, int *const after=0, const bool reset=false)
SysTimeType GetTime(void)
Definition: XPSession.h:93
bool GetNodeBuffers(void)
float GetLatencyToMasterSession(void)
void Join(const std::string url)
void GetMergedStatistics(int *const sent=0, int *const received=0, const bool reset=false)
bool GetAutomaticPacketCompression(void)
Definition: MessageHelper.h:35
void DataSendToSessionReliable(const int sessionid, const char *data, const int length, const unsigned int band=0)
bool GetCanBecomeMaster(void)
void DataSendToSession(const int sessionid, const char *data, const int length, const bool reliable=true, const bool certain=false, const bool ordered=false, const unsigned int band=0)
float GetNetworkSendRate(void)
int GetNetworkPacketsLost(void)
bool GetAllowConnections(void)
void SetLargePacketCompressionLevel(const int level=5)
void SetPollLayerBelow(bool enable=true)
void SetManualPollXPURL(void)
int GetTransparentPacketCompression(void)
void SetPreConnect(const bool enable=false)
void SetGameChannel(const int channel=TransportAnyGameChannel)
void Create(const std::string name)
void SetAutomaticPoll(void)
Definition: XPSession.h:46
Error GetSessionErrorReason(void)
int GetNetworkPacketsRejected(void)
void SetPacketCompressionLevel(const int level=10)
void SetCanBecomeMaster(const bool canBeMaster=true)
SysTimeType GetLocalTime(void)
int GetMasterSessionID(void)
std::string EnumerateFound(void)
float GetLatencyToSessionID(const int sessionID)
Definition: XPSession.h:83
void SetNodeBuffers(const bool enable=false)
std::string ExportURL(const bool shortAddress=true)
void SetAllowConnections(const bool allow=true)
void SetAutomaticPollXPURL(void)
Definition: XPSession.h:92
void RegisterSessionIDCallback(GetSessionIDCallback *callback=0, void *context=0)
bool DataReceive(int *const fromsessionid, char *const data, int *const length, unsigned char *const type=0)
void SetLatencyRecalculationDelay(const float seconds=1.0f)
bool DataReceivePeek(int *const fromsessionid, int *const length, unsigned char *const type=0)
void DataSendToSessionUnreliable(const int sessionid, const char *data, const int length)
void SetTransparentPacketCompression(const int level=0)
static XPSession * Allocate(void)
void DataSendToSessionCertain(const int sessionid, const char *data, const int length)
void DataSendToSessionOrdered(const int sessionid, const char *data, const int length, const unsigned int band=0)
void SetAutomaticPacketCompression(const bool enable=false)
Definition: ThreadClass.h:96
Error
Definition: XPSession.h:90