project64/Source/Project64/UserInterface/Debugger/ScriptAPI/JSServerWorker.h

60 lines
1.5 KiB
C++

#pragma once
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#include "ScriptAPI.h"
class CJSServerWorker : public CScriptWorker
{
private:
enum { TIMEOUT_MS = 1 };
struct ServerQueue {
CriticalSection cs;
std::string listenAddress;
unsigned short listenPort;
bool bClosePending;
ServerQueue() : listenAddress(""), listenPort(0), bClosePending(false) {}
} m_Queue;
struct JSServerAddrInfo
{
char address[INET6_ADDRSTRLEN];
const char* family;
unsigned short port;
JSServerAddrInfo() :
address(""),
family(""),
port(0)
{
}
};
bool m_bWinsockOK;
SOCKET m_ServerSocket;
JSServerAddrInfo m_Address;
public:
CJSServerWorker(CScriptInstance* instance, void* dukObjectHeapPtr);
virtual ~CJSServerWorker();
void Init(const char* address, unsigned short port);
void WorkerProc();
std::string GetAddress();
unsigned short GetPort();
const char* GetFamily();
private:
void JSEmitConnection(SOCKET c);
void JSEmitClose();
void JSEmitListening();
void JSEmitError(const char* errMessage);
static duk_idx_t CbArgs_EmitConnection(duk_context* ctx, void* _env);
static duk_idx_t CbArgs_EmitClose(duk_context* ctx, void* _env);
static duk_idx_t CbArgs_EmitListening(duk_context* ctx, void* _env);
static duk_idx_t CbArgs_EmitError(duk_context* ctx, void* _env);
};