3 #include "Core/ArraySegment.hpp"
4 #include "Core/NetworkConnectionToClient.hpp"
5 #include "Core/NetworkMessage.hpp"
6 #include "KapMirror/Experimental/Core/Action.hpp"
7 #include "Messages.hpp"
8 #include "KapEngine.hpp"
9 #include "Platform.hpp"
10 #include "Dictionary.hpp"
26 int maxConnections = 10;
37 bool isActivated()
const {
return active; }
42 void listen(
int maxConnections,
int port);
58 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
65 for (
auto const& [
id, conn] : connections) {
73 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
80 std::shared_ptr<NetworkConnectionToClient> connection;
81 if (connections.tryGetValue(networkId, connection)) {
82 connection->send(message);
92 for (
auto const& [
id, conn] : connections) {
94 onTransportDisconnect(conn->getConnectionId());
104 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
105 void registerHandler(std::function<
void(
const std::shared_ptr<NetworkConnectionToClient>&, T&)> handler) {
106 ushort msgType = MessagePacking::getId<T>();
107 if (handlers.containsKey(msgType)) {
109 "}, id={" + std::to_string(msgType) +
110 "}. If replacement is intentional, use replaceHandler instead to avoid this warning.");
113 auto messageHandler = [handler](std::shared_ptr<NetworkConnectionToClient> connection,
NetworkReader& reader) {
115 message.deserialize(reader);
116 handler(connection, message);
119 std::make_shared<std::function<void(std::shared_ptr<NetworkConnectionToClient>,
NetworkReader&)>>(messageHandler);
125 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
127 ushort
id = MessagePacking::getId<T>();
131 #pragma region KapEngine
137 const std::function<
void(
const std::shared_ptr<KapEngine::GameObject>&)>& playload,
138 std::shared_ptr<KapEngine::GameObject>& gameObject);
144 const std::function<
void(
const std::shared_ptr<KapEngine::GameObject>&)>& playload,
145 std::shared_ptr<KapEngine::GameObject>& gameObject) {
147 spawnObject(prefabName, scene, position, playload, gameObject);
154 const std::function<
void(
const std::shared_ptr<KapEngine::GameObject>&)>& playload,
155 std::shared_ptr<KapEngine::GameObject>& gameObject) {
157 spawnObject(prefabName, scene, position, playload, gameObject);
164 std::shared_ptr<KapEngine::GameObject>& gameObject) {
166 spawnObject(prefabName, scene, position,
nullptr, gameObject);
173 void unSpawn(
const std::shared_ptr<KapEngine::GameObject>& gameObject);
194 return networkObjects.tryGetValue(
id, gameObject);
202 void addTransportHandlers();
203 void removeTransportHandlers();
204 void registerSystemHandlers();
206 void onTransportConnect(
int connectionId);
207 void onTransportDisconnect(
int connectionId);
208 void onTransportData(
int connectionId,
const std::shared_ptr<
ArraySegment<byte>>& data);
210 bool addConnection(
const std::shared_ptr<NetworkConnectionToClient>& connection);
211 bool removeConnection(
int connectionId);
213 bool unpackAndInvoke(
const std::shared_ptr<NetworkConnectionToClient>& connection,
const std::shared_ptr<
ArraySegment<byte>>& data);
215 void sendObject(
const std::shared_ptr<KapEngine::GameObject>& gameObject,
216 const std::shared_ptr<NetworkConnectionToClient>& connection);
void destroyObject(unsigned int networkId)
Destroy GameObject corresponding of networkId for all clients.
Definition: NetworkServer.cpp:322
bool getExistingObject(unsigned int id, std::shared_ptr< KapEngine::GameObject > &gameObject)
Get existing GameObject with networkId.
Definition: NetworkServer.hpp:193
void listen(int maxConnections, int port)
Starts server and listens to incoming connections with max connections limit.
Definition: NetworkServer.cpp:33
void registerHandler(std::function< void(const std::shared_ptr< NetworkConnectionToClient > &, T &)> handler)
Register a handler for a message type T.
Definition: NetworkServer.hpp:105
Definition: NetworkReader.hpp:10
void spawnObject(const std::string &prefabName, std::size_t sceneId, const KapEngine::Tools::Vector3 &position, const std::function< void(const std::shared_ptr< KapEngine::GameObject > &)> &playload, std::shared_ptr< KapEngine::GameObject > &gameObject)
Spawn new GameObject on specifics Scene for all clients. (only Prefab)
Definition: NetworkServer.hpp:143
void sendToAll(T &message)
Send a message to all clients which have joined the world (are ready).
Definition: NetworkServer.hpp:59
void spawnObject(const std::string &prefabName, const KapEngine::Tools::Vector3 &position, std::shared_ptr< KapEngine::GameObject > &gameObject)
Spawn new GameObject on current Scene for all clients. (only Prefab)
Definition: NetworkServer.hpp:163
void sendToClient(T &message, unsigned int networkId)
Send a message to a specific client.
Definition: NetworkServer.hpp:74
void unregisterHandler(T &message)
Unregister a message handler of type T.
Definition: NetworkServer.hpp:126
void spawnObject(const std::string &prefabName, const KapEngine::Tools::Vector3 &position, const std::function< void(const std::shared_ptr< KapEngine::GameObject > &)> &playload, std::shared_ptr< KapEngine::GameObject > &gameObject)
Spawn new GameObject on current Scene for all clients. (only Prefab)
Definition: NetworkServer.hpp:153
std::shared_ptr< SceneManagement::SceneManager > getSceneManager() const
Get the Scene Manager of game.
Definition: Engine.hpp:200
Definition: Messages.hpp:8
Definition: NetworkServer.hpp:18
Definition: Dictionary.hpp:16
static void warning(std::string _msg, std::string prefix="")
display a warning message
Definition: Debug.cpp:31
void networkEarlyUpdate() const
NetworkEarlyUpdate. (we add this to the KapEngine in OnFixedUpdate)
Definition: NetworkServer.cpp:59
void updateObject(unsigned int id)
Update GameObject for all clients.
Definition: NetworkServer.cpp:347
void shutdown()
Shuts down the server and disconnects all clients.
Definition: NetworkServer.cpp:42
void spawnObject(const std::string &prefabName, KapEngine::SceneManagement::Scene &scene, const KapEngine::Tools::Vector3 &position, const std::function< void(const std::shared_ptr< KapEngine::GameObject > &)> &playload, std::shared_ptr< KapEngine::GameObject > &gameObject)
Spawn new GameObject on specifics Scene for all clients. (only Prefab)
Definition: NetworkServer.cpp:224
void destroyObject(const std::shared_ptr< KapEngine::GameObject > &gameObject)
Destroy GameObject for all clients.
Definition: NetworkServer.hpp:183
Definition: NetworkManager.hpp:10
Definition: ArraySegment.hpp:9
Definition: Action.hpp:10
void unSpawn(const std::shared_ptr< KapEngine::GameObject > &gameObject)
This takes an object that has been spawned and un-spawns it. The object will be removed from clients.
Definition: NetworkServer.cpp:308
Class of engine.
Definition: Engine.hpp:60
void disconnectAll()
Disconnect all connections.
Definition: NetworkServer.hpp:91