134 lines
4.9 KiB
C++
134 lines
4.9 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, 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 __CLOUD_SERVER_HELPER_H
|
|
#define __CLOUD_SERVER_HELPER_H
|
|
|
|
#include "slikenet/CloudServer.h"
|
|
|
|
namespace SLNet
|
|
{
|
|
|
|
class DynDNS;
|
|
class CloudClient;
|
|
class TwoWayAuthentication;
|
|
class FullyConnectedMesh2;
|
|
class ConnectionGraph2;
|
|
|
|
class CloudServerHelperFilter : public CloudServerQueryFilter
|
|
{
|
|
public:
|
|
virtual bool OnPostRequest(RakNetGUID clientGuid, SystemAddress clientAddress, CloudKey key, uint32_t dataLength, const char *data);
|
|
virtual bool OnReleaseRequest(RakNetGUID clientGuid, SystemAddress clientAddress, DataStructures::List<CloudKey> &cloudKeys);
|
|
virtual bool OnGetRequest(RakNetGUID clientGuid, SystemAddress clientAddress, CloudQuery &query, DataStructures::List<RakNetGUID> &specificSystems);
|
|
virtual bool OnUnsubscribeRequest(RakNetGUID clientGuid, SystemAddress clientAddress, DataStructures::List<CloudKey> &cloudKeys, DataStructures::List<RakNetGUID> &specificSystems);
|
|
|
|
RakNetGUID serverGuid;
|
|
};
|
|
|
|
// To use this class without DynDNS, you only need the CloudServer class. and CloudServerHelperFilter
|
|
// The only function you need is CloudServerHelper::OnPacket() for CloudServerHelper::OnConnectionCountChange
|
|
// For setup, call cloudServer->AddQueryFilter(sampleFilter);
|
|
struct CloudServerHelper
|
|
{
|
|
char *serverToServerPassword;
|
|
unsigned short rakPeerPort;
|
|
// #med - consider changing to (unsigned?) int
|
|
unsigned short allowedIncomingConnections;
|
|
unsigned short allowedOutgoingConnections;
|
|
|
|
virtual void OnPacket(Packet *packet, RakPeerInterface *rakPeer, CloudClient *cloudClient, SLNet::CloudServer *cloudServer, SLNet::FullyConnectedMesh2 *fullyConnectedMesh2, TwoWayAuthentication *twoWayAuthentication, ConnectionGraph2 *connectionGraph2);
|
|
virtual bool Update(void);
|
|
virtual bool ParseCommandLineParameters(int argc, char **argv);
|
|
virtual void PrintHelp(void);
|
|
bool StartRakPeer(SLNet::RakPeerInterface *rakPeer);
|
|
Packet *ConnectToRakPeer(const char *host, unsigned short port, RakPeerInterface *rakPeer);
|
|
MessageID AuthenticateRemoteServerBlocking(RakPeerInterface *rakPeer, TwoWayAuthentication *twoWayAuthentication, RakNetGUID remoteSystem);
|
|
void SetupPlugins(
|
|
SLNet::CloudServer *cloudServer,
|
|
SLNet::CloudServerHelperFilter *sampleFilter,
|
|
SLNet::CloudClient *cloudClient,
|
|
SLNet::FullyConnectedMesh2 *fullyConnectedMesh2,
|
|
SLNet::TwoWayAuthentication *twoWayAuthentication,
|
|
SLNet::ConnectionGraph2 *connectionGraph2,
|
|
const char *newServerToServerPassword
|
|
);
|
|
|
|
int JoinCloud(
|
|
SLNet::RakPeerInterface *rakPeer,
|
|
SLNet::CloudServer *cloudServer,
|
|
SLNet::CloudClient *cloudClient,
|
|
SLNet::FullyConnectedMesh2 *fullyConnectedMesh2,
|
|
SLNet::TwoWayAuthentication *twoWayAuthentication,
|
|
SLNet::ConnectionGraph2 *connectionGraph2,
|
|
const char *rakPeerIpOrDomain
|
|
);
|
|
|
|
|
|
// Call when the number of client connections change
|
|
// Usually internal
|
|
virtual void OnConnectionCountChange(RakPeerInterface *rakPeer, CloudClient *cloudClient);
|
|
protected:
|
|
// Call when you get ID_FCM2_NEW_HOST
|
|
virtual void OnFCMNewHost(Packet *packet, RakPeerInterface *rakPeer);
|
|
|
|
|
|
virtual int OnJoinCloudResult(
|
|
Packet *packet,
|
|
SLNet::RakPeerInterface *rakPeer,
|
|
SLNet::CloudServer *cloudServer,
|
|
SLNet::CloudClient *cloudClient,
|
|
SLNet::FullyConnectedMesh2 *fullyConnectedMesh2,
|
|
SLNet::TwoWayAuthentication *twoWayAuthentication,
|
|
SLNet::ConnectionGraph2 *connectionGraph2,
|
|
const char *rakPeerIpOrDomain,
|
|
char myPublicIP[32]
|
|
);
|
|
};
|
|
|
|
struct CloudServerHelper_DynDns : public CloudServerHelper
|
|
{
|
|
public:
|
|
CloudServerHelper_DynDns(DynDNS *_dynDns);
|
|
|
|
// Returns false on DNS update failure
|
|
virtual bool Update(void);
|
|
virtual bool SetHostDNSToThisSystemBlocking(void);
|
|
virtual bool ParseCommandLineParameters(int argc, char **argv);
|
|
protected:
|
|
DynDNS *dynDNS;
|
|
char *dynDNSUsernameAndPassword;
|
|
char *dnsHost;
|
|
|
|
// Call when you get ID_FCM2_NEW_HOST
|
|
virtual void OnFCMNewHost(Packet *packet, RakPeerInterface *rakPeer);
|
|
|
|
virtual int OnJoinCloudResult(
|
|
Packet *packet,
|
|
SLNet::RakPeerInterface *rakPeer,
|
|
SLNet::CloudServer *cloudServer,
|
|
SLNet::CloudClient *cloudClient,
|
|
SLNet::FullyConnectedMesh2 *fullyConnectedMesh2,
|
|
SLNet::TwoWayAuthentication *twoWayAuthentication,
|
|
SLNet::ConnectionGraph2 *connectionGraph2,
|
|
const char *rakPeerIpOrDomain,
|
|
char myPublicIP[32]
|
|
);
|
|
};
|
|
|
|
} // namespace SLNet
|
|
|
|
#endif // __CLOUD_SERVER_HELPER_H
|