TcpServer's OnMessage is now an vector called OnMessageFunctions, each plugin will occupy an index in this vector
Readded receive_data method to VoidNetClient.hpp Minor fixes
This commit is contained in:
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -7,6 +7,7 @@
|
||||
|
||||
#include "Defs.hpp"
|
||||
#include "TcpClient.hpp"
|
||||
#include "Handshake.hpp"
|
||||
|
||||
#include <functional>
|
||||
|
||||
@ -38,7 +39,7 @@ public:
|
||||
|
||||
const TcpClient &GetClientByID(uint16 id);
|
||||
|
||||
std::function<void(const NetworkMessage &message)> OnMessage; // this is going to be used for plugins
|
||||
std::vector<std::function<void(const NetworkMessage &message)>> OnMessageFunctions; // this is going to be used for plugins
|
||||
|
||||
private:
|
||||
static void process_client_messages(TcpServer *server, TcpClient &client);
|
||||
|
||||
@ -30,9 +30,10 @@ struct VoidNetClientAPI
|
||||
static void Receive();
|
||||
|
||||
private:
|
||||
static void receive_data();
|
||||
|
||||
static TcpClient client;
|
||||
static uint16 id;
|
||||
static bool receive;
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -55,8 +55,8 @@ void TcpClient::Shutdown()
|
||||
{
|
||||
NetworkMessage message;
|
||||
message.sender = id;
|
||||
message.distribution_mode = static_cast<byte>(Server);
|
||||
message.tag = static_cast<byte>(DISCONNECT);
|
||||
message.distribution_mode = Server;
|
||||
message.tag = DISCONNECT;
|
||||
SendMessage(message);
|
||||
uint16 code = closesocket(tcp_socket);
|
||||
if (code == SOCKET_ERROR)
|
||||
|
||||
@ -60,7 +60,8 @@ void TcpServer::SendMessage(const NetworkMessage & message)
|
||||
if (message.sender != client.GetID())
|
||||
client.SendMessage(message);
|
||||
}
|
||||
OnMessage(message);
|
||||
for (uint16 i = 0; i < OnMessageFunctions.size(); i++)
|
||||
OnMessageFunctions[i](message);
|
||||
break;
|
||||
}
|
||||
case AllAndMe: // this will send the message to EVERYONE including the user that sent it
|
||||
@ -70,14 +71,16 @@ void TcpServer::SendMessage(const NetworkMessage & message)
|
||||
TcpClient client = *it;
|
||||
client.SendMessage(message);
|
||||
}
|
||||
OnMessage(message);
|
||||
for (uint16 i = 0; i < OnMessageFunctions.size(); i++)
|
||||
OnMessageFunctions[i](message);
|
||||
break;
|
||||
}
|
||||
case Server: // this will only send the message to the server
|
||||
{
|
||||
if (message.tag == DISCONNECT)
|
||||
CloseSocket(message.sender);
|
||||
OnMessage(message);
|
||||
for (uint16 i = 0; i < OnMessageFunctions.size(); i++)
|
||||
OnMessageFunctions[i](message);
|
||||
break;
|
||||
}
|
||||
case Others: // this will send the message to others, excluding server and the user that sent it
|
||||
@ -106,7 +109,7 @@ void TcpServer::SendMessage(const NetworkMessage & message)
|
||||
}
|
||||
}
|
||||
|
||||
void TcpServer::SendHandshake(const Handshake &handshake)
|
||||
void TcpServer::SendHandshake(const Handshake & handshake)
|
||||
{
|
||||
switch (handshake.distribution_mode)
|
||||
{
|
||||
|
||||
@ -52,11 +52,15 @@ void VoidNetClientAPI::SendMessage(byte distribution_mode, uint16 destination_id
|
||||
|
||||
void VoidNetClientAPI::Receive()
|
||||
{
|
||||
std::async(std::launch::async, &client.ReceiveMessages);
|
||||
std::async(std::launch::async, &receive_data);
|
||||
}
|
||||
|
||||
void VoidNetClientAPI::receive_data()
|
||||
{
|
||||
client.ReceiveMessages();
|
||||
}
|
||||
|
||||
void VoidNetClientAPI::Disconnect()
|
||||
{
|
||||
receive = false;
|
||||
SendMessageToServer
|
||||
client.Shutdown();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user