/*
* 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 __LOBBY_2_PLUGIN_H
#define __LOBBY_2_PLUGIN_H
#include "Lobby2Message.h"
#include "slikenet/PluginInterface2.h"
#include "slikenet/PacketPriority.h"
#include "slikenet/peerinterface.h"
/// \defgroup LOBBY_2_GROUP Lobby2Plugin
/// \brief SQL based lobby system, with support for users, friends, clans, emails, ranking, and a message board
/// \details
/// \ingroup PLUGINS_GROUP
/// \defgroup LOBBY_2_COMMANDS Lobby2Commands
/// \brief Commands that can be sent to Lobby2Server from Lobby2Client
/// \details
/// \ingroup LOBBY_2_GROUP
/// \defgroup LOBBY_2_NOTIFICATIONS Lobby2Notifications
/// \brief Callbacks that the Lobby2System will send to you
/// \details
/// \ingroup LOBBY_2_GROUP
/// \defgroup LOBBY_2_SERVER Lobby2Server
/// \brief Runs the server modules that asynchronously processes Lobby2Message
/// \details
/// \ingroup LOBBY_2_GROUP
/// \defgroup LOBBY_2_CLIENT Lobby2Client
/// \brief Sends commands to Lobby2Server
/// \details
/// \ingroup LOBBY_2_GROUP
namespace SLNet
{
/// \ingroup LOBBY_2_GROUP
enum ServerErrors
{
// Class factory could not create a message of the given type
// Followed by 4 bytes, with the message number
L2SE_UNKNOWN_MESSAGE_ID,
// Client is trying to run a function that requires admin access. Use Lobby2Server::AddAdminAddress() to add this client.
L2SE_REQUIRES_ADMIN,
};
struct Lobby2MessageFactory;
/// \brief Both Lobby2Server and Lobby2Client derive from this class
/// \details
/// \ingroup LOBBY_2_GROUP
class RAK_DLL_EXPORT Lobby2Plugin : public PluginInterface2
{
public:
Lobby2Plugin();
virtual ~Lobby2Plugin();
/// \brief Ordering channel to send messages on
/// \param[in] oc The ordering channel
void SetOrderingChannel(char oc);
/// \brief Send priority to send messages on
/// \param[in] pp The packet priority
void SetSendPriority(PacketPriority pp);
/// \brief Creates messages from message IDs
/// \details Server should get a factory that creates messages with database functionality.
/// Client can use the base class
/// \param[in] f Class factory instance, which should remain valid for the scope of the plugin
void SetMessageFactory(Lobby2MessageFactory *f);
/// \brief Returns whatever was passed to SetMessageFactory()
Lobby2MessageFactory* GetMessageFactory(void) const;
/// \brief Set the callback to receive the results of operations via SendMsg()
virtual void SetCallbackInterface(Lobby2Callbacks *cb);
/// \brief You can have more than one callback to get called from the results of operations via SendMsg()
virtual void AddCallbackInterface(Lobby2Callbacks *cb);
/// \brief Removes a callback added with AddCallbackInterface();
virtual void RemoveCallbackInterface(Lobby2Callbacks *cb);
/// \brief Removes all callbacks added with AddCallbackInterface();
virtual void ClearCallbackInterfaces();
protected:
char orderingChannel;
PacketPriority packetPriority;
Lobby2MessageFactory *msgFactory;
DataStructures::List callbacks;
};
}; // namespace SLNet
#endif