blob: 60ebf7a00261b19b7abba375bd36dd96f92c93e6 [file] [log] [blame]
// ThriftCommon.cpp : Common functions for sample Thrift client and server
//
#include "ThriftCommon.h"
namespace thriftcommon
{
//----------------------------------------------------------------------------
//Launch child process and pass R/W anonymous pipe handles on cmd line.
//This is a simple example and does not include elevation or other
//advanced features.
//
bool LaunchAnonPipeChild(std::string app, boost::shared_ptr<TServerTransport> transport)
{
#ifdef _WIN32
PROCESS_INFORMATION pi;
STARTUPINFOA si;
GetStartupInfoA(&si); //set startupinfo for the spawned process
char handles[MAX_PATH]; //Stores pipe handles converted to text
sprintf(handles, "%s %d %d", app.c_str(),
(int)boost::shared_dynamic_cast<TPipeServer>(transport)->getClientRdPipeHandle(),
(int)boost::shared_dynamic_cast<TPipeServer>(transport)->getClientWrtPipeHandle());
//spawn the child process
if (!CreateProcessA(NULL, handles, NULL,NULL,TRUE,0,NULL,NULL,&si,&pi))
{
GlobalOutput.perror("TPipeServer CreateProcess failed, GLE=", GetLastError());
return false;
}
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
#endif
return true;
}
}