Files
SLikeNet/Samples/RoomsBrowserGFx3/RakNet/RoomsBrowserGFx3_RakNet.h
2025-11-24 14:19:51 +05:30

172 lines
9.5 KiB
C++

/*
* Original work: Copyright (c) 2014, Oculus VR, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* RakNet License.txt file in the licenses directory of this source tree. An additional grant
* of patent rights can be found in the RakNet Patents.txt file in the same directory.
*
*
* Modified work: Copyright (c) 2017-2019, SLikeSoft UG (haftungsbeschränkt)
*
* This source code was modified by SLikeSoft. Modifications are licensed under the MIT-style
* license found in the license.txt file in the root directory of this source tree.
*/
#ifndef __ROOMS_BROWSER_GFX3_RAKNET
#define __ROOMS_BROWSER_GFX3_RAKNET
#include "slikenet/WindowsIncludes.h"
#include "slikenet/types.h"
#include "Lobby2Message.h"
#include "slikenet/PluginInterface2.h"
#include "RoomsBrowserGFx3.h"
#include "RoomsPlugin.h"
namespace SLNet {
/// This is data that should be set with RakPeerInterface::SetOfflinePingResponse()
/// It should also be able to write this data to a LobbyServer instance
struct ServerAndRoomBrowserData
{
unsigned short numPlayers;
unsigned short maxPlayers;
SLNet::RakString mapName;
SLNet::RakString roomName;
SLNet::RakNetGUID roomId;
/// For the LAN browser, it expects the offline ping response to be packed using the format from this structure
/// Therefore, to advertise that your server is available or updated, fill out the parameters in this structure, then call SetAsOfflinePingResponse()
/// When your server is no longer available, set the offline ping response to null
void SetAsOfflinePingResponse(SLNet::RakPeerInterface *rakPeer);
/// Write to a RakNet table data structure, useful when creating the room or setting the room properties
/// Writes everything EXCEPT the list of players
void WriteToTable(DataStructures::Table *table);
/// \internal
void Serialize(SLNet::BitStream *bitStream, bool writeToBitstream);
};
// GFxPlayerTinyD3D9.cpp has an instance of this class, and callls the corresponding 3 function
// This keeps the patching code out of the GFx sample as much as possible
class RoomsBrowserGFx3_RakNet : public RoomsBrowserGFx3, public SLNet::Lobby2Callbacks, public PluginInterface2, SLNet::RoomsCallback
{
public:
RoomsBrowserGFx3_RakNet();
virtual ~RoomsBrowserGFx3_RakNet();
virtual void Init(SLNet::Lobby2Client *_lobby2Client,
SLNet::Lobby2MessageFactory *_messageFactory,
RakPeerInterface *_rakPeer,
SLNet::RoomsPlugin *_roomsPlugin,
SLNet::RakString _titleName,
SLNet::RakString _titleSecretKey,
SLNet::RakString _pathToXMLPropertyFile,
unsigned short _lanServerPort,
GPtr<FxDelegate> pDelegate,
GPtr<GFxMovieView> pMovie);
void Update(void);
void Shutdown(void);
// Update all callbacks from flash
void Accept(CallbackProcessor* cbreg);
virtual const char *QueryPlatform(void) const {return "RakNet";}
virtual void SaveProperty(const char *propertyId, const char *propertyValue);
virtual void LoadProperty(const char *propertyId, SLNet::RakString &propertyOut);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_ConnectToServer);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Login);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_RegisterAccount);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_UpdateRoomsList);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_UpdateFriendsList);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_JoinByFilter);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_CreateRoom);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Friends_SendInvite);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Friends_Remove);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Friends_AcceptInvite);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Friends_RejectInvite);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Directed_Chat_Func);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Room_Chat_Func);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_Logoff);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_LeaveRoom);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_SendInvite);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_StartSpectating);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_StopSpectating);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_GrantModerator);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_SetReadyStatus);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_GetReadyStatus);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_SetRoomLockState);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_GetRoomLockState);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_AreAllMembersReady);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_KickMember);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_GetRoomProperties);
ACTIONSCRIPT_CALLABLE_HEADER(f2c_StartGame);
// Lobby2
virtual void MessageResult(SLNet::Client_Login *message);
virtual void MessageResult(SLNet::Client_Logoff *message);
virtual void MessageResult(SLNet::Client_RegisterAccount *message);
virtual void MessageResult(SLNet::Friends_GetFriends *message);
virtual void MessageResult(SLNet::Friends_GetInvites *message);
virtual void MessageResult(SLNet::Friends_SendInvite *message);
virtual void MessageResult(SLNet::Friends_AcceptInvite *message);
virtual void MessageResult(SLNet::Friends_RejectInvite *message);
virtual void MessageResult(SLNet::Friends_Remove *message);
virtual void MessageResult(SLNet::Notification_Friends_PresenceUpdate *message);
virtual void MessageResult(SLNet::Notification_Friends_StatusChange *message);
// PluginInterface2
virtual void OnClosedConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, PI2_LostConnectionReason lostConnectionReason );
virtual void OnNewConnection(const SystemAddress &systemAddress, RakNetGUID rakNetGUID, bool isIncoming);
virtual void OnFailedConnectionAttempt(Packet *packet, PI2_FailedConnectionAttemptReason failedConnectionAttemptReason);
virtual PluginReceiveResult OnReceive(Packet *packet);
/// Rooms callbacks
virtual void CreateRoom_Callback( const SystemAddress &senderAddress, SLNet::CreateRoom_Func *callResult);
virtual void SearchByFilter_Callback( const SystemAddress &senderAddress, SLNet::SearchByFilter_Func *callResult);
virtual void JoinByFilter_Callback( const SystemAddress &senderAddress, SLNet::JoinByFilter_Func *callResult);
virtual void Chat_Callback( const SystemAddress &senderAddress, SLNet::Chat_Func *callResult);
virtual void Chat_Callback( const SystemAddress &senderAddress, SLNet::Chat_Notification *notification);
virtual void LeaveRoom_Callback( const SystemAddress &senderAddress, SLNet::LeaveRoom_Func *callResult);
virtual void SendInvite_Callback( const SystemAddress &senderAddress, SLNet::SendInvite_Func *callResult);
virtual void StartSpectating_Callback( const SystemAddress &senderAddress, SLNet::StartSpectating_Func *callResult);
virtual void StopSpectating_Callback( const SystemAddress &senderAddress, SLNet::StopSpectating_Func *callResult);
virtual void GrantModerator_Callback( const SystemAddress &senderAddress, SLNet::GrantModerator_Func *callResult);
virtual void SetReadyStatus_Callback( const SystemAddress &senderAddress, SLNet::SetReadyStatus_Func *callResult);
virtual void GetReadyStatus_Callback( const SystemAddress &senderAddress, SLNet::GetReadyStatus_Func *callResult);
virtual void SetRoomLockState_Callback( const SystemAddress &senderAddress, SLNet::SetRoomLockState_Func *callResult);
virtual void GetRoomLockState_Callback( const SystemAddress &senderAddress, SLNet::GetRoomLockState_Func *callResult);
virtual void AreAllMembersReady_Callback( const SystemAddress &senderAddress, SLNet::AreAllMembersReady_Func *callResult);
virtual void KickMember_Callback( const SystemAddress &senderAddress, SLNet::KickMember_Func *callResult);
virtual void GetRoomProperties_Callback( const SystemAddress &senderAddress, SLNet::GetRoomProperties_Func *callResult);
// Notifications due to other room members
virtual void RoomMemberStartedSpectating_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberStartedSpectating_Notification *notification);
virtual void RoomMemberStoppedSpectating_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberStoppedSpectating_Notification *notification);
virtual void ModeratorChanged_Callback( const SystemAddress &senderAddress, SLNet::ModeratorChanged_Notification *notification);
virtual void RoomMemberReadyStatusSet_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberReadyStatusSet_Notification *notification);
virtual void RoomLockStateSet_Callback( const SystemAddress &senderAddress, SLNet::RoomLockStateSet_Notification *notification);
virtual void RoomMemberKicked_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberKicked_Notification *notification);
virtual void RoomMemberLeftRoom_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberLeftRoom_Notification *notification);
virtual void RoomMemberJoinedRoom_Callback( const SystemAddress &senderAddress, SLNet::RoomMemberJoinedRoom_Notification *notification);
virtual void RoomInvitationSent_Callback( const SystemAddress &senderAddress, SLNet::RoomInvitationSent_Notification *notification);
virtual void RoomInvitationWithdrawn_Callback( const SystemAddress &senderAddress, SLNet::RoomInvitationWithdrawn_Notification *notification);
virtual void RoomDestroyedOnModeratorLeft_Callback( const SystemAddress &senderAddress, SLNet::RoomDestroyedOnModeratorLeft_Notification *notification);
SLNet::Lobby2Client *lobby2Client;
SLNet::Lobby2MessageFactory *msgFactory;
SLNet::RakPeerInterface *rakPeer;
SLNet::RakString titleName;
SLNet::RakString titleSecretKey;
SLNet::RakString pathToXMLPropertyFile;
SLNet::RakString loginUsername;
SLNet::RoomsPlugin *roomsPlugin;
unsigned short lanServerPort;
};
} // namespace SLNet
#endif // __ROOMS_BROWSER_GFX3_RAKNET