3 #include "Core/ArraySegment.hpp"
4 #include "Core/NetworkConnectionToServer.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"
33 ConnectState connectState;
34 std::shared_ptr<NetworkConnectionToServer> connection;
47 void connect(
const std::string& ip,
int port);
64 bool isActive()
const {
return connectState == ConnectState::Connecting || connectState == ConnectState::Connected; }
69 bool isConnecting()
const {
return connectState == ConnectState::Connecting; }
74 bool isConnected()
const {
return connectState == ConnectState::Connected; }
79 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
81 if (connection !=
nullptr) {
82 if (connectState == ConnectState::Connected) {
83 connection->send(message);
95 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
96 void registerHandler(std::function<
void(
const std::shared_ptr<NetworkConnectionToServer>&, T&)> handler) {
97 ushort msgType = MessagePacking::getId<T>();
98 if (handlers.containsKey(msgType)) {
100 "}, id={" + std::to_string(msgType) +
101 "}. If replacement is intentional, use replaceHandler instead to avoid this warning.");
104 auto messageHandler = [handler](std::shared_ptr<NetworkConnectionToServer> conn,
NetworkReader& reader) {
106 message.deserialize(reader);
107 handler(conn, message);
110 std::make_shared<std::function<void(std::shared_ptr<NetworkConnectionToServer>,
NetworkReader&)>>(messageHandler);
116 template <typename T, typename = std::enable_if<std::is_base_of<NetworkMessage, T>::value>>
118 ushort msgType = MessagePacking::getId<T>();
119 handlers.remove(msgType);
122 #pragma region KapEngine
133 bool getExistingObject(
unsigned int networkId, std::shared_ptr<KapEngine::GameObject>& gameObject) {
134 return networkObjects.tryGetValue(networkId, gameObject);
140 void addTransportHandlers();
141 void removeTransportHandlers();
142 void registerSystemHandlers();
144 void onTransportConnect();
145 void onTransportDisconnect();
void send(T &message)
Send a NetworkMessage to the server.
Definition: NetworkClient.hpp:80
void registerHandler(std::function< void(const std::shared_ptr< NetworkConnectionToServer > &, T &)> handler)
Register a handler for a message type T.
Definition: NetworkClient.hpp:96
void connect(const std::string &ip, int port)
Connect client to a NetworkServer by ip and port.
Definition: NetworkClient.cpp:17
bool isConnected() const
Check if client is connected (after isConnecting).
Definition: NetworkClient.hpp:74
bool getExistingObject(unsigned int networkId, std::shared_ptr< KapEngine::GameObject > &gameObject)
Get existing GameObject with networkId. (Spawned by server)
Definition: NetworkClient.hpp:133
Definition: NetworkClient.hpp:28
void disconnect()
Disconnect from server.
Definition: NetworkClient.cpp:34
bool isConnecting() const
Check if client is connecting (before isConnected).
Definition: NetworkClient.hpp:69
void unregisterHandler(T &message)
Unregister a message handler of type T.
Definition: NetworkClient.hpp:117
Definition: NetworkReader.hpp:10
Definition: Messages.hpp:66
void updateObject(unsigned int id)
Update GameObject for all clients.
Definition: NetworkClient.cpp:225
Definition: Messages.hpp:8
Definition: Dictionary.hpp:16
bool isActive() const
isActive is true while a client is isConnecting/isConnected. (= while the network is active)
Definition: NetworkClient.hpp:64
static void warning(std::string _msg, std::string prefix="")
display a warning message
Definition: Debug.cpp:31
Definition: NetworkManager.hpp:10
static void error(std::string _msg, std::string prefix="")
display an error message
Definition: Debug.cpp:45
Definition: ArraySegment.hpp:9
Definition: Action.hpp:10
void networkEarlyUpdate()
NetworkEarlyUpdate. (we add this to the KapEngine in OnFixedUpdate)
Definition: NetworkClient.cpp:47
Class of engine.
Definition: Engine.hpp:60