enderalse/source/fs.dll/common/IPipeClient.cpp

61 lines
1.1 KiB
C++

#include "IPipeClient.h"
IPipeClient::IPipeClient()
:m_pipe(INVALID_HANDLE_VALUE)
{
//
}
IPipeClient::~IPipeClient()
{
Close();
}
bool IPipeClient::Open(const char * name)
{
Close();
m_pipe = CreateFile(
name,
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
0,
NULL);
return m_pipe != INVALID_HANDLE_VALUE;
}
void IPipeClient::Close(void)
{
if(m_pipe != INVALID_HANDLE_VALUE)
{
CloseHandle(m_pipe);
m_pipe = INVALID_HANDLE_VALUE;
}
}
bool IPipeClient::ReadMessage(UInt8 * buf, UInt32 length)
{
UInt32 bytesRead;
ReadFile(m_pipe, buf, length, &bytesRead, NULL);
IPipeServer::MessageHeader * header = (IPipeServer::MessageHeader *)buf;
return
(bytesRead >= sizeof(IPipeServer::MessageHeader)) && // has a valid header
(bytesRead >= (sizeof(IPipeServer::MessageHeader) + header->length));
}
bool IPipeClient::WriteMessage(IPipeServer::MessageHeader * msg)
{
UInt32 bytesWritten;
UInt32 length = sizeof(IPipeServer::MessageHeader) + msg->length;
WriteFile(m_pipe, msg, length, &bytesWritten, NULL);
return bytesWritten >= length;
}