// Copyright (c) 2014-2015, THUNDERBEAST GAMES LLC All rights reserved // Please see LICENSE.md in repository root for license information // https://github.com/AtomicGameEngine/AtomicGameEngine #include #include #include #include "SubprocessSystem.h" namespace ToolCore { SubprocessSystem::SubprocessSystem(Context* context) : Object(context), updateTimer_(0.0f) { SubscribeToEvent(E_UPDATE, HANDLER(SubprocessSystem, HandleUpdate)); } SubprocessSystem::~SubprocessSystem() { for (unsigned i = 0; i < processes_.Size(); i++) processes_[i]->Stop(); processes_.Clear(); } Subprocess* SubprocessSystem::Launch(const String& command, const Vector& args, const String& initialDirectory) { Poco::Process::Env env; return Launch(command, args, initialDirectory, env); } Subprocess* SubprocessSystem::Launch(const String& command, const Vector& args, const String& initialDirectory, const Poco::Process::Env& env) { SharedPtr process(new Subprocess(context_)); if (process->Launch(GetNativePath(command), args, GetNativePath(initialDirectory), env)) { processes_.Push(process); return process; } return 0; } void SubprocessSystem::HandleUpdate(StringHash eventType, VariantMap& eventData) { Vector remove; for (unsigned i = 0; i < processes_.Size(); i++) { Subprocess* process = processes_[i]; if (!process->Update(this)) { remove.Push(process); } } for (unsigned i = 0; i < remove.Size(); i++) { processes_.Remove(SharedPtr(remove[i])); } } }