ProcessWindowsImpl(RuntimeRef runtime, LoggerRef logger, const std::string& dir) : Process(runtime, logger, dir), /* hStdInput(), hStdOutput(), hStdError), stdOutDone(false), stdErrDone(false), */ started(false) { ZeroMemory(&si, sizeof(si)); si.cb = sizeof(si); /* if(redirect) { // See http://support.microsoft.com/kb/190351 // TODO setup handles si.dwFlags = STARTF_USESTDHANDLES; si.hStdInput = hStdInput; si.hStdOutput = hStdOutout; si.hStdError = hStdError; } */ ZeroMemory(&pi, sizeof(pi)); TRACE_OBJECT_NEW("ProcessWin32"); }
LinkWindowsImpl(bool server, LinkGroupRef group, LoggerRef logger, const std::string& dir, const std::string& name, const std::string& alias) : Link(), logger(logger), group(group), name(name), full("\\\\.\\pipe\\" + name), alias(alias), server(server), pipe(INVALID_HANDLE_VALUE) { TRACE_OBJECT_NEW("LinkWindowsImpl"); if (server) { pipe = CreateNamedPipe(full.c_str(), PIPE_ACCESS_DUPLEX | FILE_FLAG_OVERLAPPED, PIPE_TYPE_BYTE | PIPE_WAIT, pipeInstances, bufferSize * sizeof(TCHAR), bufferSize * sizeof(TCHAR), pipeTimeout, NULL); if (pipe == INVALID_HANDLE_VALUE) { logger->systemError("CreateNamedPipe", full); return; } connectOverlap.hEvent = CreateEvent(NULL, TRUE, FALSE, NULL); BOOL error = ConnectNamedPipe(pipe, &connectOverlap); if (error) { logger->systemError("ConnectNamedPipe", full); CloseHandle(pipe); return; } } else { pipe = CreateFile(full.c_str(), GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_OVERLAPPED, NULL); if (pipe == INVALID_HANDLE_VALUE) { logger->systemError("CreateFile", full); return; } } }
LinkLinuxImpl(bool server, LinkGroupRef group, LoggerRef logger, const std::string& dir, const std::string& name, const std::string& alias) : Link(), logger(logger), group(group), pin(PipePosix::create(server, true, logger, dir, name + getExt(server), alias + getExt(server) + "In")), pout(PipePosix::create(server, false, logger, dir, name + getExt(!server), alias + getExt(!server) + "Out")), name(name), alias(alias) { TRACE_OBJECT_NEW("LinkLinuxImpl"); }
Process::Process(RuntimeRef runtime, LoggerRef logger, const std::string& dir) : name(Berkelium::Util::randomId()), group(getLinkGroup(runtime)), channels(Ipc::ChannelGroup::createGroup(logger, dir, Util::randomId(), "process", group, true)), ipc(channels ? channels->createChannel("process.ipc") : NULL), out(runtime, LogType::StdOut), err(runtime, LogType::StdErr), bufout(), buferr(), logger(logger) { TRACE_OBJECT_NEW("Process"); }
ChannelImpl(LoggerRef logger, int32_t id, ChannelGroupRef group, const std::string& alias) : Channel(), group(group), logger(logger), alias(alias), reverseRef(), reverseWRef(), self(), cb(), messages(), reading(false), id(id) { TRACE_OBJECT_NEW("ChannelImpl"); }
LogDelegateImpl() : LogDelegate() { TRACE_OBJECT_NEW("LogDelegateImpl"); }
Tab::Tab() { TRACE_OBJECT_NEW("Tab"); }
ChannelCallback::ChannelCallback() { TRACE_OBJECT_NEW("ChannelCallback"); }
Channel::Channel() { TRACE_OBJECT_NEW("Channel"); }
Instance::Instance() { TRACE_OBJECT_NEW("Instance"); }