mirror of
https://github.com/open-goal/jak-project.git
synced 2024-10-20 00:57:44 -04:00
eb703ee96e
Motivated by - https://github.com/open-goal/opengoal-vscode/pull/358 This addresses the following: - Fixes #2939 spam edge-case - Stop picking a different nREPL port based on the game mode by default, this causes friction for tools in the average usecase (having a REPL open for a single game, and wanting to connect to it). `goalc` spins up fine even if the port is already bound to. - For people that need/want this behaviour, adding per-game configuration to the `repl-config.json` is on my todo list. - Allows `goalc` to permit redefining symbols, including functions. This is defaulted to off via the `repl-config.json` but it allows you to for example, change the definition of a function without having to restart and rebuild the entire game. ![Screenshot 2024-06-02 124558](https://github.com/open-goal/jak-project/assets/13153231/28f81f6e-b7b8-4172-9787-f96e4ab1305b) - Updates the welcome message to include a bunch of useful metadata up-front. Cleaned up all the startup logs that appear when starting goalc, many of whom's information is now included in the welcome message. - Before: ![image](https://github.com/open-goal/jak-project/assets/13153231/814c2374-4808-408e-9ed6-67114902a1d9) - After: ![Screenshot 2024-06-01 235954](https://github.com/open-goal/jak-project/assets/13153231/f3f459fb-2cbb-46ba-a90f-318243d4b3b3)
40 lines
986 B
C++
40 lines
986 B
C++
#pragma once
|
|
|
|
#include <functional>
|
|
#include <mutex>
|
|
#include <thread>
|
|
#include <vector>
|
|
|
|
#include "common/common_types.h"
|
|
#include "common/cross_sockets/XSocket.h"
|
|
|
|
/// @brief A cross platform generic socket server implementation
|
|
class XSocketServer {
|
|
public:
|
|
static constexpr int DEF_BUFFER_SIZE = 32 * 1024 * 1024;
|
|
XSocketServer(std::function<bool()> shutdown_callback,
|
|
int _tcp_port,
|
|
int _buffer_size = DEF_BUFFER_SIZE);
|
|
virtual ~XSocketServer();
|
|
|
|
XSocketServer(const XSocketServer&) = delete;
|
|
XSocketServer& operator=(const XSocketServer&) = delete;
|
|
|
|
bool init_server(bool failure_may_occur = false);
|
|
void shutdown_server();
|
|
void close_server_socket();
|
|
|
|
// Abstract methods -- use-case dependent
|
|
virtual void post_init() = 0;
|
|
|
|
protected:
|
|
int tcp_port;
|
|
struct sockaddr_in addr = {};
|
|
int listening_socket = -1;
|
|
std::vector<char> buffer;
|
|
|
|
bool server_initialized = false;
|
|
|
|
std::function<bool()> want_exit_callback;
|
|
};
|