354d022967
commit f44d146e4ac906ff898e8968c6857fd2280f6d20 Author: project-bo4 <127137346+project-bo4@users.noreply.github.com> Date: Thu May 11 13:39:29 2023 -0700 remove lpc package from repository commit 29fb0f63e50de468ab0b9db35f7e8fdadf58afc3 Author: project-bo4 <themanwithantidote@gmail.com> Date: Thu May 11 13:06:13 2023 -0700 generic improvements + added identity configuration + objectstore improvements + added battlenet 'US' servers to blocklist + some other minor improvements commit 5d5e31099ebcce5a637b9a02d4936a97fb0802a7 Author: project-bo4 <themanwithantidote@gmail.com> Date: Sat Mar 25 16:32:52 2023 -0700 lpc improvements + fix lpc issue with foreign languages(non-english) not being considered in listing + check lpc files pre-start and warn user if missing any of core items commit 2de1a54b6f4cc5c44dc906871021cfbc85057ca9 Author: project-bo4 <themanwithantidote@gmail.com> Date: Thu Mar 23 12:45:56 2023 -0700 demonware improvements + handle object store uploadUserObject + silence bdUNK125 commit 710dcc3ec6178071d67c27e5bf6705f08cabe7e2 Author: project-bo4 <themanwithantidote@gmail.com> Date: Mon Mar 20 13:43:56 2023 -0700 forgot to update names commit 217682dfb07b35f7a09399fb2698924bb7fe8b77 Author: project-bo4 <themanwithantidote@gmail.com> Date: Mon Mar 20 11:09:18 2023 -0700 upload lpc and update readme commit 83f812b33b90791a8d13b9468f27da51e0a4f2b9 Author: project-bo4 <themanwithantidote@gmail.com> Date: Mon Mar 20 10:53:43 2023 -0700 demonware emulator + demonware emulator + platform name and id + xxhash and picoproto - remove g_runframe hook -disable discovery(save time) + improvements to utils + add new resources
63 lines
1.4 KiB
C++
63 lines
1.4 KiB
C++
#pragma once
|
|
|
|
#include "base_server.hpp"
|
|
#include <utils/concurrency.hpp>
|
|
|
|
namespace demonware
|
|
{
|
|
class udp_server : public base_server
|
|
{
|
|
public:
|
|
struct endpoint_data
|
|
{
|
|
SOCKET socket{};
|
|
sockaddr_in address{};
|
|
|
|
endpoint_data() = default;
|
|
|
|
endpoint_data(const SOCKET sock, const sockaddr* addr, const int size)
|
|
{
|
|
if (size != sizeof(this->address))
|
|
{
|
|
throw std::runtime_error("Invalid size");
|
|
}
|
|
|
|
this->socket = sock;
|
|
std::memcpy(&this->address, addr, sizeof(this->address));
|
|
}
|
|
};
|
|
|
|
using base_server::base_server;
|
|
|
|
void handle_input(const char* buf, size_t size, endpoint_data endpoint);
|
|
size_t handle_output(SOCKET socket, char* buf, size_t size, sockaddr* address, int* addrlen);
|
|
bool pending_data(SOCKET socket);
|
|
|
|
void frame() override;
|
|
|
|
protected:
|
|
virtual void handle(const endpoint_data& endpoint, const std::string& data) = 0;
|
|
void send(const endpoint_data& endpoint, std::string data);
|
|
|
|
private:
|
|
struct in_packet
|
|
{
|
|
std::string data;
|
|
endpoint_data endpoint;
|
|
};
|
|
|
|
struct out_packet
|
|
{
|
|
std::string data;
|
|
sockaddr_in address;
|
|
};
|
|
|
|
using in_queue = std::queue<in_packet>;
|
|
using out_queue = std::queue<out_packet>;
|
|
using socket_queue_map = std::unordered_map<SOCKET, out_queue>;
|
|
|
|
utils::concurrency::container<in_queue> in_queue_;
|
|
utils::concurrency::container<socket_queue_map> out_queue_;
|
|
};
|
|
}
|