2015-12-31 07:37:25 -05:00
|
|
|
#define IPC_MAX_RECONNECTS 3
|
|
|
|
#define IPC_COMMAND_SIZE 100
|
|
|
|
#define IPC_BUFFER_SIZE 0x2000
|
|
|
|
|
|
|
|
#define IPC_PIPE_NAME_SERVER "IW4x-Server"
|
|
|
|
#define IPC_PIPE_NAME_CLIENT "IW4x-Client"
|
|
|
|
|
|
|
|
namespace Components
|
|
|
|
{
|
|
|
|
class Pipe
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
struct Packet
|
|
|
|
{
|
|
|
|
char Command[IPC_COMMAND_SIZE];
|
|
|
|
char Buffer[IPC_BUFFER_SIZE];
|
|
|
|
};
|
|
|
|
|
|
|
|
enum Type
|
|
|
|
{
|
|
|
|
IPCTYPE_NONE,
|
|
|
|
IPCTYPE_SERVER,
|
|
|
|
IPCTYPE_CLIENT
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef void(__cdecl* PacketCallback)(std::string data);
|
|
|
|
typedef void(__cdecl* Callback)();
|
|
|
|
|
|
|
|
Pipe();
|
|
|
|
~Pipe();
|
|
|
|
|
|
|
|
bool Connect(std::string name);
|
|
|
|
bool Create(std::string name);
|
|
|
|
|
|
|
|
bool Write(std::string command, std::string data);
|
|
|
|
void SetCallback(std::string command, PacketCallback callback);
|
|
|
|
void OnConnect(Callback callback);
|
|
|
|
|
|
|
|
private:
|
|
|
|
Callback ConnectCallback;
|
|
|
|
std::map<std::string, PacketCallback> PacketCallbacks;
|
|
|
|
|
|
|
|
HANDLE hPipe;
|
2016-06-02 09:11:31 -04:00
|
|
|
std::thread mThread;
|
2015-12-31 07:37:25 -05:00
|
|
|
bool mThreadAttached;
|
|
|
|
|
|
|
|
Type mType;
|
|
|
|
Packet mPacket;
|
|
|
|
|
|
|
|
char PipeName[MAX_PATH];
|
|
|
|
char PipeFile[MAX_PATH];
|
|
|
|
unsigned int ReconnectAttempt;
|
|
|
|
|
|
|
|
void Destroy();
|
|
|
|
void SetName(std::string name);
|
|
|
|
|
|
|
|
static void ReceiveThread(Pipe* pipe);
|
|
|
|
};
|
|
|
|
|
|
|
|
class IPCPipe : public Component
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
IPCPipe();
|
|
|
|
~IPCPipe();
|
|
|
|
const char* GetName() { return "IPCPipe"; };
|
|
|
|
|
|
|
|
static bool Write(std::string command, std::string data);
|
|
|
|
static void On(std::string command, Pipe::PacketCallback callback);
|
|
|
|
|
|
|
|
private:
|
|
|
|
static Pipe* ServerPipe;
|
|
|
|
static Pipe* ClientPipe;
|
|
|
|
|
|
|
|
static void ConnectClient();
|
|
|
|
};
|
|
|
|
}
|