the game where you go into mines and start crafting! but for consoles (forked directly from smartcmd's github)
1#pragma once
2using namespace std;
3#include <vector>
4#include "..\..\..\Minecraft.World\C4JThread.h"
5#include "..\..\Common\Network\NetworkPlayerInterface.h"
6#include "..\..\Common\Network\PlatformNetworkManagerInterface.h"
7#include "..\..\Common\Network\SessionInfo.h"
8#include "DQRNetworkManager.h"
9
10#define MINECRAFT_DURANGO_PARTY_SEARCH_DELAY_MILLISECONDS 30000
11
12class CPlatformNetworkManagerDurango : public CPlatformNetworkManager, IDQRNetworkManagerListener
13{
14 friend class CGameNetworkManager;
15public:
16 virtual bool Initialise(CGameNetworkManager *pGameNetworkManager, int flagIndexSize);
17 virtual void Terminate();
18 virtual int GetJoiningReadyPercentage();
19 virtual int CorrectErrorIDS(int IDS);
20
21 virtual void DoWork();
22 virtual int GetPlayerCount();
23 virtual int GetOnlinePlayerCount();
24 virtual int GetLocalPlayerMask(int playerIndex);
25 virtual bool AddLocalPlayerByUserIndex( int userIndex );
26 virtual bool RemoveLocalPlayerByUserIndex( int userIndex );
27 virtual INetworkPlayer *GetLocalPlayerByUserIndex( int userIndex );
28 virtual INetworkPlayer *GetPlayerByIndex(int playerIndex);
29 virtual INetworkPlayer * GetPlayerByXuid(PlayerUID xuid);
30 virtual INetworkPlayer * GetPlayerBySmallId(unsigned char smallId);
31 virtual wstring GetDisplayNameByGamertag(wstring gamertag);
32 virtual bool ShouldMessageForFullSession();
33
34 virtual INetworkPlayer *GetHostPlayer();
35 virtual bool IsHost();
36 virtual bool JoinGameFromInviteInfo( int userIndex, int userMask, const INVITE_INFO *pInviteInfo);
37 virtual bool LeaveGame(bool bMigrateHost);
38
39 virtual bool IsInSession();
40 virtual bool IsInGameplay();
41 virtual bool IsReadyToPlayOrIdle();
42 virtual bool IsInStatsEnabledSession();
43 virtual bool SessionHasSpace(unsigned int spaceRequired = 1);
44 virtual void SendInviteGUI(int quadrant);
45 virtual bool IsAddingPlayer();
46
47 virtual void HostGame(int localUsersMask, bool bOnlineGame, bool bIsPrivate, unsigned char publicSlots = MINECRAFT_NET_MAX_PLAYERS, unsigned char privateSlots = 0);
48 virtual int JoinGame(FriendSessionInfo *searchResult, int localUsersMask, int primaryUserIndex );
49 virtual void CancelJoinGame();
50 virtual bool SetLocalGame(bool isLocal);
51 virtual bool IsLocalGame() { return m_bIsOfflineGame; }
52 virtual void SetPrivateGame(bool isPrivate);
53 virtual bool IsPrivateGame() { return m_bIsPrivateGame; }
54 virtual bool IsLeavingGame() { return m_bLeavingGame; }
55 virtual void ResetLeavingGame() { m_bLeavingGame = false; }
56
57 virtual void RegisterPlayerChangedCallback(int iPad, void (*callback)(void *callbackParam, INetworkPlayer *pPlayer, bool leaving), void *callbackParam);
58 virtual void UnRegisterPlayerChangedCallback(int iPad, void (*callback)(void *callbackParam, INetworkPlayer *pPlayer, bool leaving), void *callbackParam);
59
60 virtual void HandleSignInChange();
61
62 virtual bool _RunNetworkGame();
63
64private:
65 bool isSystemPrimaryPlayer(DQRNetworkPlayer *pDQRPlayer);
66 virtual bool _LeaveGame(bool bMigrateHost, bool bLeaveRoom);
67 virtual void _HostGame(int dwUsersMask, unsigned char publicSlots = MINECRAFT_NET_MAX_PLAYERS, unsigned char privateSlots = 0);
68 virtual bool _StartGame();
69
70 DQRNetworkManager * m_pDQRNet; // pointer to SQRNetworkManager interface
71
72 HANDLE m_notificationListener;
73
74 vector<DQRNetworkPlayer *> m_machineDQRPrimaryPlayers; // collection of players that we deem to be the main one for that system
75
76 bool m_bLeavingGame;
77 bool m_bLeaveGameOnTick;
78 bool m_migrateHostOnLeave;
79 bool m_bHostChanged;
80
81 bool m_bIsOfflineGame;
82 bool m_bIsPrivateGame;
83 int m_flagIndexSize;
84
85 // This is only maintained by the host, and is not valid on client machines
86 GameSessionData m_hostGameSessionData;
87 bool m_hostGameSessionIsJoinable;
88 CGameNetworkManager *m_pGameNetworkManager;
89public:
90 virtual void UpdateAndSetGameSessionData(INetworkPlayer *pNetworkPlayerLeaving = NULL);
91
92private:
93 // TODO 4J Stu - Do we need to be able to have more than one of these?
94 void (*playerChangedCallback[XUSER_MAX_COUNT])(void *callbackParam, INetworkPlayer *pPlayer, bool leaving);
95 void *playerChangedCallbackParam[XUSER_MAX_COUNT];
96
97 static int RemovePlayerOnSocketClosedThreadProc( void* lpParam );
98 virtual bool RemoveLocalPlayer( INetworkPlayer *pNetworkPlayer );
99
100 // Things for handling per-system flags
101 class PlayerFlags
102 {
103 public:
104 INetworkPlayer *m_pNetworkPlayer;
105 unsigned char *flags;
106 unsigned int count;
107 PlayerFlags(INetworkPlayer *pNetworkPlayer, unsigned int count);
108 ~PlayerFlags();
109 };
110 vector<PlayerFlags *> m_playerFlags;
111 void SystemFlagAddPlayer(INetworkPlayer *pNetworkPlayer);
112 void SystemFlagRemovePlayer(INetworkPlayer *pNetworkPlayer);
113 void SystemFlagReset();
114public:
115 virtual void SystemFlagSet(INetworkPlayer *pNetworkPlayer, int index);
116 virtual bool SystemFlagGet(INetworkPlayer *pNetworkPlayer, int index);
117
118 // For telemetry
119private:
120 float m_lastPlayerEventTimeStart;
121
122public:
123 wstring GatherStats();
124 wstring GatherRTTStats();
125
126private:
127 vector<FriendSessionInfo *> friendsSessions[XUSER_MAX_COUNT];
128 int m_searchResultsCount;
129 int m_lastSearchStartTime;
130
131 // The results that will be filled in with the current search
132 DQRNetworkManager::SessionSearchResult *m_pSearchResults;
133
134 int m_lastSearchPad;
135 bool m_bSearchResultsReady;
136 bool m_bSearchPending;
137 LPVOID m_pSearchParam;
138 void (*m_SessionsUpdatedCallback)(LPVOID pParam);
139
140 void TickSearch();
141
142 vector<INetworkPlayer *>currentNetworkPlayers;
143 INetworkPlayer *addNetworkPlayer(DQRNetworkPlayer *pDQRPlayer);
144 void removeNetworkPlayer(DQRNetworkPlayer *pDQRPlayer);
145 static INetworkPlayer *getNetworkPlayer(DQRNetworkPlayer *pDQRPlayer);
146
147 virtual void SetSessionTexturePackParentId( int id );
148 virtual void SetSessionSubTexturePackId( int id );
149 virtual void Notify(int ID, ULONG_PTR Param);
150
151public:
152 virtual vector<FriendSessionInfo *> *GetSessionList(int iPad, int localPlayers, bool partyOnly);
153 virtual bool GetGameSessionInfo(int iPad, SessionID sessionId,FriendSessionInfo *foundSession);
154 virtual void SetSessionsUpdatedCallback( void (*SessionsUpdatedCallback)(LPVOID pParam), LPVOID pSearchParam );
155 virtual void GetFullFriendSessionInfo( FriendSessionInfo *foundSession, void (* FriendSessionUpdatedFn)(bool success, void *pParam), void *pParam );
156 virtual void ForceFriendsSessionRefresh();
157
158 // ... and the new ones that have been converted to IDQRNetworkManagerListener
159 virtual void HandleDataReceived(DQRNetworkPlayer *playerFrom, DQRNetworkPlayer *playerTo, unsigned char *data, unsigned int dataSize);
160 virtual void HandlePlayerJoined(DQRNetworkPlayer *player);
161 virtual void HandlePlayerLeaving(DQRNetworkPlayer *player);
162 virtual void HandleStateChange(DQRNetworkManager::eDQRNetworkManagerState oldState, DQRNetworkManager::eDQRNetworkManagerState newState);
163// virtual void HandleResyncPlayerRequest(DQRNetworkPlayer **aPlayers);
164 virtual void HandleAddLocalPlayerFailed(int idx, bool serverFull);
165 virtual void HandleDisconnect(bool bLostRoomOnly);
166 virtual void HandleInviteReceived(int playerIndex, DQRNetworkManager::SessionInfo *pInviteInfo);
167 virtual bool IsSessionJoinable();
168};