mirror of
https://github.com/hyblocker/OpenVR-SpaceCalibrator.git
synced 2026-10-29 04:01:43 +01:00
54 lines
1.1 KiB
C++
54 lines
1.1 KiB
C++
#pragma once
|
|
|
|
#include "../Protocol.h"
|
|
|
|
#include <thread>
|
|
#include <set>
|
|
#include <mutex>
|
|
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#include <windows.h>
|
|
|
|
class ServerTrackedDeviceProvider;
|
|
|
|
class IPCServer
|
|
{
|
|
public:
|
|
IPCServer(ServerTrackedDeviceProvider *driver) : driver(driver) { }
|
|
~IPCServer();
|
|
|
|
void Run();
|
|
void Stop();
|
|
|
|
private:
|
|
void HandleRequest(const protocol::Request &request, protocol::Response &response);
|
|
|
|
struct PipeInstance
|
|
{
|
|
OVERLAPPED overlap; // Used by the API
|
|
HANDLE pipe;
|
|
IPCServer *server;
|
|
|
|
protocol::Request request;
|
|
protocol::Response response;
|
|
};
|
|
|
|
PipeInstance *CreatePipeInstance(HANDLE pipe);
|
|
void ClosePipeInstance(PipeInstance *pipeInst);
|
|
|
|
static void RunThread(IPCServer *_this);
|
|
static BOOL CreateAndConnectInstance(LPOVERLAPPED overlap, HANDLE &pipe);
|
|
static void WINAPI CompletedReadCallback(DWORD err, DWORD bytesRead, LPOVERLAPPED overlap);
|
|
static void WINAPI CompletedWriteCallback(DWORD err, DWORD bytesWritten, LPOVERLAPPED overlap);
|
|
|
|
std::thread mainThread;
|
|
|
|
bool running = false;
|
|
bool stop = false;
|
|
|
|
std::set<PipeInstance *> pipes;
|
|
HANDLE connectEvent;
|
|
|
|
ServerTrackedDeviceProvider *driver;
|
|
};
|