TCPServer impl
This commit is contained in:
277
main.cpp
277
main.cpp
@@ -7,6 +7,8 @@
|
||||
#include "Sockets/UdpSocket.hpp"
|
||||
#include <Sockets/Endianness.hpp>
|
||||
#include <jlog/Logger.hpp>
|
||||
#include <Event.h>
|
||||
#include <EventConnection.h>
|
||||
|
||||
class ServerLogger {
|
||||
private:
|
||||
@@ -38,107 +40,218 @@ public:
|
||||
|
||||
using namespace Socket;
|
||||
|
||||
/// Spins up a TCP server, listens for connections, and echoes input directly back to the client.
|
||||
/// While running this function, use the terminal program netcat to connect and send messages:
|
||||
/// nc localhost 40269
|
||||
void TCP_ReceiveTest()
|
||||
{
|
||||
ServerLogger TCPLogger;
|
||||
class TCPServer {
|
||||
public:
|
||||
ServerLogger logger;
|
||||
using Socket_p = std::shared_ptr<TcpSocket>;
|
||||
|
||||
Socket_p sock(new TcpSocket);
|
||||
//Event<Socket_p> OnServe;
|
||||
Event<Socket_p> OnAccept;
|
||||
Event<Socket_p> OnRX;
|
||||
Event<Socket_p> OnTX;
|
||||
Socket_p sock {new TcpSocket};
|
||||
Socket_p client;
|
||||
public:
|
||||
TCPServer() {};
|
||||
public:
|
||||
virtual void Serve() {
|
||||
try {
|
||||
sock->Bind(42069);
|
||||
sock->Listen(5);
|
||||
client = sock->Accept();
|
||||
Accept();
|
||||
} catch(std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
try {
|
||||
sock->Bind(42069);
|
||||
sock->Listen(5);
|
||||
client = sock->Accept();
|
||||
} catch(std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
// Welcoming the new users
|
||||
std::string payload = "Welcome!\n\f";
|
||||
// Welcoming the new users
|
||||
//std::string payload = "Welcome!\n\f";
|
||||
|
||||
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
|
||||
// Closing the listening socket, we want nobody else.
|
||||
sock->Close();
|
||||
//client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
|
||||
// Closing the listening socket, we want nobody else.
|
||||
//sock->Close();
|
||||
|
||||
u8 data[512];
|
||||
memset(&data, 0, 512);
|
||||
while (client->Receive(data, sizeof data, 0))
|
||||
{
|
||||
//std::cout << "[Recv] " << data << std::endl;
|
||||
|
||||
//std::string datastr = reinterpret_cast<char*>(data);
|
||||
|
||||
TCPLogger.RX(reinterpret_cast<char*>(data));
|
||||
client->Send(data, sizeof data, 0);
|
||||
TCPLogger.TX(reinterpret_cast<char*>(data));
|
||||
/*
|
||||
u8 data[512];
|
||||
memset(&data, 0, 512);
|
||||
while (client->Receive(data, sizeof data, 0))
|
||||
{
|
||||
logger.RX(reinterpret_cast<char*>(data));
|
||||
client->Send(data, sizeof data, 0);
|
||||
logger.TX(reinterpret_cast<char*>(data));
|
||||
memset(&data, 0, 512);
|
||||
}
|
||||
*/
|
||||
//OnRX(client);
|
||||
//OnTX(client);
|
||||
//client->Close();
|
||||
};
|
||||
virtual void Accept() { OnAccept(client); }
|
||||
virtual void RX() { OnRX(client); };
|
||||
virtual void TX() { OnTX(client); };
|
||||
};
|
||||
|
||||
class MProtoServer : public TCPServer {
|
||||
public:
|
||||
enum MsgID : uint8_t {
|
||||
THandShake = 100,
|
||||
RHandShake = 101,
|
||||
};
|
||||
|
||||
MProtoServer() : TCPServer() {};
|
||||
|
||||
void Accept() {
|
||||
sock->Close();
|
||||
u8 data[7];
|
||||
memset(&data, 0, 1);
|
||||
while (client->Receive(data, sizeof data, 0)) {
|
||||
//logger.RX(reinterpret_cast<char *>(data));
|
||||
//client->Send(data, sizeof data, 0);
|
||||
//logger.TX(reinterpret_cast<char *>(data));
|
||||
std::cout << std::to_string(data[7]) << std::endl;
|
||||
if (uint8_t(data[1]) == THandShake) {
|
||||
logger.RX("THandShake");
|
||||
}
|
||||
memset(&data, 0, 1);
|
||||
|
||||
}
|
||||
|
||||
|
||||
client->Close();
|
||||
|
||||
//uint16_t wd = (data[2] << 8) | data[1];
|
||||
|
||||
};
|
||||
|
||||
/// Spins up a TCP server, listens for connections, and echoes input directly back to the client.
|
||||
/// While running this function, use the terminal program netcat to connect and send messages:
|
||||
/// nc localhost 40269
|
||||
void TCP_ReceiveTest() {
|
||||
ServerLogger TCPLogger;
|
||||
using Socket_p = std::shared_ptr<TcpSocket>;
|
||||
|
||||
Socket_p sock(new TcpSocket);
|
||||
Socket_p client;
|
||||
|
||||
try {
|
||||
sock->Bind(42069);
|
||||
sock->Listen(5);
|
||||
client = sock->Accept();
|
||||
} catch (std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
// Welcoming the new users
|
||||
std::string payload = "Welcome!\n\f";
|
||||
|
||||
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
|
||||
// Closing the listening socket, we want nobody else.
|
||||
sock->Close();
|
||||
|
||||
u8 data[512];
|
||||
memset(&data, 0, 512);
|
||||
while (client->Receive(data, sizeof data, 0)) {
|
||||
//std::cout << "[Recv] " << data << std::endl;
|
||||
|
||||
//std::string datastr = reinterpret_cast<char*>(data);
|
||||
|
||||
TCPLogger.RX(reinterpret_cast<char *>(data));
|
||||
client->Send(data, sizeof data, 0);
|
||||
TCPLogger.TX(reinterpret_cast<char *>(data));
|
||||
memset(&data, 0, 512);
|
||||
}
|
||||
client->Close();
|
||||
}
|
||||
client->Close();
|
||||
}
|
||||
|
||||
void UDP_ReceiveTest()
|
||||
{
|
||||
using UdpSocket_p = std::shared_ptr<UdpSocket>;
|
||||
void UDP_ReceiveTest() {
|
||||
using UdpSocket_p = std::shared_ptr<UdpSocket>;
|
||||
|
||||
UdpSocket_p sock (new UdpSocket);
|
||||
UdpSocket_p sock(new UdpSocket);
|
||||
|
||||
try
|
||||
try {
|
||||
sock->Open();
|
||||
sock->Bind(42575);
|
||||
|
||||
} catch (const std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
UdpSocket_p client(new UdpSocket);
|
||||
|
||||
try {
|
||||
client->Open();
|
||||
client->Connect(42575);
|
||||
std::string payload = "bruh";
|
||||
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size());
|
||||
//client->SendTo(IPAddress::Loopback(42575), reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
|
||||
//client->BindAny();
|
||||
//client->Open();
|
||||
//client->Connect(sock->GetSelfIP());
|
||||
|
||||
} catch (const std::exception &e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
client->Close();
|
||||
|
||||
|
||||
sock->Close();
|
||||
}
|
||||
};
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
sock->Open();
|
||||
sock->Bind(42575);
|
||||
|
||||
} catch(const std::exception& e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
if (Socket::Endianness::IsBigEndian())
|
||||
std::cout << "Big Endian" << std::endl;
|
||||
|
||||
|
||||
UdpSocket_p client (new UdpSocket);
|
||||
|
||||
try {
|
||||
client->Open();
|
||||
client->Connect(42575);
|
||||
std::string payload = "bruh";
|
||||
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size());
|
||||
//client->SendTo(IPAddress::Loopback(42575), reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
|
||||
//client->BindAny();
|
||||
//client->Open();
|
||||
//client->Connect(sock->GetSelfIP());
|
||||
|
||||
} catch(const std::exception& e) {
|
||||
std::cout << e.what() << std::endl;
|
||||
return;
|
||||
}
|
||||
client->Close();
|
||||
if (Socket::Endianness::IsLittleEndian())
|
||||
std::cout << "Little Endian" << std::endl;
|
||||
|
||||
|
||||
sock->Close();
|
||||
}
|
||||
float val = 420.5f;
|
||||
float a = Socket::Endianness::HostToNetworkOrder(val);
|
||||
a = Socket::Endianness::NetworkToHostOrder(a);
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
|
||||
if (Socket::Endianness::IsBigEndian())
|
||||
std::cout << "Big Endian" << std::endl;
|
||||
std::cout << a << std::endl;
|
||||
|
||||
|
||||
if (Socket::Endianness::IsLittleEndian())
|
||||
std::cout << "Little Endian" << std::endl;
|
||||
//TCP_ReceiveTest();
|
||||
//UDP_ReceiveTest();
|
||||
TCPServer server;
|
||||
|
||||
server.OnAccept += [&] (TCPServer::Socket_p s) {
|
||||
server.logger.RX("Accepted client");
|
||||
server.RX();
|
||||
};
|
||||
|
||||
float val = 420.5f;
|
||||
float a = Socket::Endianness::HostToNetworkOrder(val);
|
||||
a = Socket::Endianness::NetworkToHostOrder(a);
|
||||
|
||||
std::cout << a << std::endl;
|
||||
|
||||
|
||||
TCP_ReceiveTest();
|
||||
//UDP_ReceiveTest();
|
||||
return 0;
|
||||
}
|
||||
server.OnRX += [&] (TCPServer::Socket_p s) {
|
||||
u8 data[512];
|
||||
memset(&data, 0, 512);
|
||||
while (s->Receive(data, sizeof data, 0))
|
||||
{
|
||||
server.logger.RX(reinterpret_cast<char*>(data));
|
||||
//s->Send(data, sizeof data, 0);
|
||||
//server.logger.TX(reinterpret_cast<char*>(data));
|
||||
server.TX();
|
||||
memset(&data, 0, 512);
|
||||
}
|
||||
};
|
||||
|
||||
server.OnTX += [&] (TCPServer::Socket_p s) {
|
||||
std::string pong = "Message recieved";
|
||||
u8 data[512];
|
||||
memset(&data, 0, 512);
|
||||
std::copy(pong.begin(), pong.end(), std::begin(data));
|
||||
s->Send(data, sizeof(data), 0);
|
||||
server.logger.TX(pong);
|
||||
memset(&data, 0, 512);
|
||||
};
|
||||
server.Serve();
|
||||
//MProtoServer ms;
|
||||
//ms.Serve();
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user