mirror of https://github.com/AxioDL/jbus.git
45 lines
994 B
C++
45 lines
994 B
C++
#ifndef JBUS_LISTENER_HPP
|
|
#define JBUS_LISTENER_HPP
|
|
|
|
#include "Common.hpp"
|
|
#include "Socket.hpp"
|
|
#include <thread>
|
|
#include <queue>
|
|
#include <mutex>
|
|
|
|
namespace jbus
|
|
{
|
|
|
|
/** Server interface for accepting incoming connections from GBA emulator instances. */
|
|
class Listener
|
|
{
|
|
net::Socket m_dataServer = {false};
|
|
net::Socket m_clockServer = {false};
|
|
std::thread m_listenerThread;
|
|
std::mutex m_queueLock;
|
|
std::queue<std::unique_ptr<Endpoint>> m_endpointQueue;
|
|
bool m_running = false;
|
|
|
|
static const uint32_t DataPort = 0xd6ba;
|
|
static const uint32_t ClockPort = 0xc10c;
|
|
|
|
void listenerProc();
|
|
|
|
public:
|
|
/** @brief Start listener thread. */
|
|
void start();
|
|
|
|
/** @brief Request stop of listener thread and block until joined. */
|
|
void stop();
|
|
|
|
/** @brief Pop jbus::Endpoint off Listener's queue.
|
|
* @return Endpoint instance, ready to issue commands. */
|
|
std::unique_ptr<Endpoint> accept();
|
|
|
|
~Listener();
|
|
};
|
|
|
|
}
|
|
|
|
#endif // JBUS_LISTENER_HPP
|