inline WinChannel* create_named_pipe(const char* name, DWORD openMode,std::size_t bufferSize,uint8_t maxInstances) { std::string pipeName = prepare_name(name); DWORD createMode = openMode | FILE_FLAG_FIRST_PIPE_INSTANCE; ::HANDLE hPipe = ::CreateNamedPipeA(pipeName.c_str(), createMode, PIPE_TYPE_BYTE | PIPE_WAIT, maxInstances, bufferSize, bufferSize, 0, NULL); validate<std::runtime_error>(INVALID_HANDLE_VALUE != hPipe, "Can not create pipe"); validate<std::runtime_error>(::ConnectNamedPipe(hPipe,NULL),"Can't listen clients"); return new WinChannel(hPipe, createMode ); }
tstring CreateFilePath(const tstring& rsName) { TCHAR szPath[_MAX_PATH]; ::GetModuleFileName(g_hInstance, szPath, _MAX_PATH); TCHAR* p = _tcsrchr(szPath, _T('\\')); if (p) { *p = 0; } tstring s(rsName); prepare_name(s); tostringstream o; o << szPath << _T("\\Quotes\\") << s; return o.str(); }
inline WinChannel* connect_named_pipe(const char* name, DWORD connectMode) { std::string pipeName = prepare_name(name); ::HANDLE hPipe = ::CreateFileA(pipeName.c_str(), connectMode, 0, NULL, OPEN_EXISTING, 0, NULL); validate<std::runtime_error>(INVALID_HANDLE_VALUE != hPipe, std::string("Can not connect to")+name); return new WinChannel(hPipe,connectMode); }