Update
NetworkMessage->GetData fixed Plugin -> Splitted message types PluginManager is now thread safe TcpConnection added list of events Properly handling disconnection now Fixed bug in Socket with error translation It crashes when it exits, i think it has something to do with shared ptrs or something
This commit is contained in:
@ -89,7 +89,9 @@ namespace std::net
|
||||
template<typename T>
|
||||
T *GetData() const
|
||||
{
|
||||
return (T*)m_data;
|
||||
if (m_data)
|
||||
return (T*)m_data;
|
||||
else return nullptr;
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <VoidNet_HL/NetworkMessage.hpp>
|
||||
#include <VoidNet_HL/InternalTags.hpp>
|
||||
#include <string>
|
||||
|
||||
namespace std::net
|
||||
{
|
||||
@ -11,6 +13,29 @@ namespace std::net
|
||||
{
|
||||
}
|
||||
|
||||
virtual void HandleMessage(const NetworkMessage& msg) = 0;
|
||||
void HandleMessage(const NetworkMessage& msg)
|
||||
{
|
||||
if (msg.GetTag() == (uint32_t)InternalTags::Disconnect)
|
||||
{
|
||||
OnDisconnect(*(msg.GetData<string>()));
|
||||
}
|
||||
else if (msg.GetTag() == (uint32_t)InternalTags::Connect)
|
||||
{
|
||||
OnNewConnection(msg.GetSenderID(), msg.GetData<void>());
|
||||
}
|
||||
else if (msg.GetTag() == (uint32_t)InternalTags::AssignID)
|
||||
{
|
||||
OnConnection();
|
||||
}
|
||||
else
|
||||
{
|
||||
OnDataReceived(msg.GetSenderID(), msg.GetDistributionMode(), msg.GetDestinationID(), msg.GetTag(), msg.GetData<void>());
|
||||
}
|
||||
}
|
||||
|
||||
virtual void OnDisconnect(string) abstract;
|
||||
virtual void OnNewConnection(uint32_t, void*) abstract;
|
||||
virtual void OnConnection() abstract;
|
||||
virtual void OnDataReceived(uint32_t, DistributionMode, uint32_t, uint32_t, void*) abstract;
|
||||
};
|
||||
}
|
||||
@ -1,6 +1,7 @@
|
||||
#pragma once
|
||||
|
||||
#include <vector>
|
||||
#include <mutex>
|
||||
|
||||
#include "VoidNet_HL/Plugin/Plugin.hpp"
|
||||
|
||||
@ -14,16 +15,24 @@ namespace std::net
|
||||
|
||||
void HandleMessage(const NetworkMessage& msg)
|
||||
{
|
||||
m_pluginsMutex.lock();
|
||||
|
||||
for (size_t i = 0; i < m_plugins.size(); i++)
|
||||
m_plugins.at(i)->HandleMessage(msg);
|
||||
|
||||
m_pluginsMutex.unlock();
|
||||
}
|
||||
|
||||
void AddPlugin(Plugin* p)
|
||||
{
|
||||
m_pluginsMutex.lock();
|
||||
m_plugins.emplace_back(p);
|
||||
m_pluginsMutex.unlock();
|
||||
}
|
||||
|
||||
private:
|
||||
vector<Plugin*> m_plugins;
|
||||
|
||||
mutex m_pluginsMutex;
|
||||
};
|
||||
}
|
||||
@ -21,30 +21,55 @@ namespace std::net
|
||||
|
||||
bool Connect(IPAddress addr);
|
||||
|
||||
bool Disconnect();
|
||||
|
||||
template<typename T>
|
||||
void SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag, void *data)
|
||||
bool SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag, void *data)
|
||||
{
|
||||
NetworkMessage msg(m_id, mode, destinationId, tag, data, sizeof(T));
|
||||
sendMessage(msg);
|
||||
return sendMessage(msg);
|
||||
}
|
||||
|
||||
void SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag)
|
||||
bool SendMessage(DistributionMode mode, uint32_t destinationId, uint32_t tag)
|
||||
{
|
||||
NetworkMessage msg(m_id, mode, destinationId, tag, nullptr, 0);
|
||||
sendMessage(msg);
|
||||
return sendMessage(msg);
|
||||
}
|
||||
|
||||
void ReceiveData();
|
||||
|
||||
function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)> DataReceivedEvent;
|
||||
function<void(string)> DisconnectedEvent;
|
||||
function<void(uint32_t, void*)> NewConnectionEvent;
|
||||
function<void()> OnConnectionEvent;
|
||||
bool IsConnected;
|
||||
|
||||
private:
|
||||
bool sendMessage(const NetworkMessage &msg);
|
||||
|
||||
shared_ptr<TcpClient> m_client;
|
||||
uint32_t m_id;
|
||||
|
||||
vector<function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)>> m_onDataReceived;
|
||||
vector<function<void(string)>> m_onDisconnect;
|
||||
vector<function<void(uint32_t, void*)>> m_onNewConnection;
|
||||
vector<function<void()>> m_onConnection;
|
||||
|
||||
public:
|
||||
void operator+=(const function<void(uint32_t, DistributionMode, uint32_t, uint32_t, void*)> &rhs)
|
||||
{
|
||||
m_onDataReceived.push_back(rhs);
|
||||
}
|
||||
|
||||
void operator+=(const function<void(string)>& rhs)
|
||||
{
|
||||
m_onDisconnect.push_back(rhs);
|
||||
}
|
||||
|
||||
void operator+=(const function<void(uint32_t, void*)> & rhs)
|
||||
{
|
||||
m_onNewConnection.push_back(rhs);
|
||||
}
|
||||
|
||||
void operator+=(const function<void()>& rhs)
|
||||
{
|
||||
m_onConnection.push_back(rhs);
|
||||
}
|
||||
};
|
||||
}
|
||||
@ -47,7 +47,6 @@ namespace std::net
|
||||
uint32_t m_maxConnections = 0;
|
||||
|
||||
thread m_receiveThread;
|
||||
thread m_sendThread;
|
||||
|
||||
atomic_bool m_run;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user