1129202Scognet// AppRunner.h 2141379Sdas 3129202Scognet#ifndef APP_RUNNER_H 4129202Scognet#define APP_RUNNER_H 5129202Scognet 6129202Scognet#include <stdio.h> 7129202Scognet 8129202Scognet#include <DataIO.h> 9129202Scognet#include <Entry.h> 10129202Scognet#include <Locker.h> 11129202Scognet 12129202Scognetclass AppRunner { 13129202Scognetpublic: 14129202Scognet AppRunner(bool requestQuitOnDestruction = false); 15129202Scognet ~AppRunner(); 16129202Scognet 17129202Scognet status_t Run(const char *command, const char *args = NULL, 18129202Scognet bool findCommand = true); 19129202Scognet bool HasQuitted(); 20129202Scognet void WaitFor(bool requestQuit = false); 21129202Scognet team_id Team(); 22129202Scognet port_id AppLooperPort(); 23129202Scognet status_t GetRef(entry_ref *ref); 24129202Scognet status_t RequestQuit(); 25129202Scognet 26129202Scognet status_t GetOutput(BString *buffer); 27129202Scognet ssize_t ReadOutput(void *buffer, size_t size); 28129202Scognet ssize_t ReadOutputAt(off_t position, void *buffer, size_t size); 29186461Smarcel 30186461Smarcelprivate: 31186461Smarcel static int32 _ReaderEntry(void *data); 32186461Smarcel int32 _ReaderLoop(); 33186461Smarcel 34186461Smarcel static bool _LockTeamPort(); 35129202Scognet static void _UnlockTeamPort(); 36129202Scognet static port_id _ReadPortID(BMessenger &messenger); 37129202Scognet 38186461Smarcelprivate: 39186461Smarcel BLocker fOutputLock; 40129202Scognet port_id fRemotePort; 41186461Smarcel BMallocIO fOutput; 42143858Scognet thread_id fReader; 43143858Scognet team_id fTeam; 44129202Scognet entry_ref fRef; 45186461Smarcel BMessenger fMessenger; 46186461Smarcel bool fRequestQuitOnDestruction; 47186461Smarcel 48186461Smarcel static port_id fTeamPort; 49143858Scognet static BLocker fTeamPortLock; 50143858Scognet}; 51143858Scognet 52143858Scognetstatus_t find_test_app(const char *testApp, BString *path); 53143858Scognetstatus_t find_test_app(const char *testApp, entry_ref *ref); 54129202Scognet 55129202Scognet#endif // APP_RUNNER_H 56129202Scognet