2023-12-23 06:32:27 +00:00
|
|
|
/***
|
|
|
|
Copyright (C) 2023 J Reece Wilson (a/k/a "Reece"). All rights reserved.
|
|
|
|
|
|
|
|
File: OutputOf.hpp
|
|
|
|
Date: 2023-12-23
|
|
|
|
Author: Reece
|
|
|
|
***/
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include "StartupParameters.hpp"
|
|
|
|
|
|
|
|
namespace Aurora::Processes
|
|
|
|
{
|
|
|
|
AUKN_INTERFACE(IAsyncCallbacks,
|
|
|
|
AUI_METHOD(void, OnPipeData, ()),
|
|
|
|
AUI_METHOD(void, OnExit, ())
|
|
|
|
);
|
|
|
|
|
|
|
|
struct OutputOfResult
|
|
|
|
{
|
2024-09-05 17:20:12 +00:00
|
|
|
// Lockable object for reading strStdout and strStderr between threads.
|
|
|
|
/*AuFutexMutex*/ Aurora::Threading::Waitables::FutexWaitableNoVTblMovable lock;
|
|
|
|
bool bFailed { };
|
|
|
|
bool bNoStart { };
|
|
|
|
bool bPipeOutOOM { };
|
|
|
|
bool bPipeErrOOM { };
|
|
|
|
AuString strStdout { };
|
|
|
|
AuString strStderr { };
|
|
|
|
AuUInt uExitCode { };
|
|
|
|
AuSInt sExitCode { };
|
2023-12-23 06:32:27 +00:00
|
|
|
};
|
|
|
|
|
|
|
|
struct IAsyncOutputOf
|
|
|
|
{
|
|
|
|
virtual OutputOfResult *GetResult() = 0;
|
|
|
|
virtual bool BlockUntilFinished() = 0;
|
|
|
|
virtual bool BlockUntilFinishedMS(AuUInt32 uRelMS) = 0;
|
|
|
|
virtual bool HasFinished() = 0;
|
|
|
|
virtual IProcess *GetProcess() = 0;
|
2024-01-06 01:32:03 +00:00
|
|
|
virtual bool TryAttachProcessExitToCompletionGroup(const AuSPtr<IO::CompletionGroup::ICompletionGroup> &pCompletionGroup) = 0;
|
|
|
|
virtual IO::CompletionGroup::ICompletionGroupWorkHandle *ToCompletionGroupHandle() = 0;
|
2024-02-24 22:15:20 +00:00
|
|
|
|
|
|
|
AURT_ADD_USR_DATA_EXP(this->ToCompletionGroupHandle());
|
2023-12-23 06:32:27 +00:00
|
|
|
};
|
|
|
|
|
2024-09-05 17:20:12 +00:00
|
|
|
// Thread-local blocking
|
2023-12-23 06:32:27 +00:00
|
|
|
AUKN_SYM OutputOfResult OutputOf(StartupParameters &¶meters,
|
2024-09-05 17:20:12 +00:00
|
|
|
AuOptional<Memory::MemoryViewRead> toSend /* TODO: not yet implemented */);
|
2023-12-23 06:32:27 +00:00
|
|
|
|
2024-09-05 17:20:12 +00:00
|
|
|
// Thread-local async
|
|
|
|
// See: IOSleep.hpp, other ILoopSource yields to enter an alertable state, ILoopQueue to enter an alertable state, et al.
|
|
|
|
// Will attach to a async worker thread, if under an AuAsync thread.
|
2023-12-23 06:32:27 +00:00
|
|
|
AUKN_SYM AuSPtr<IAsyncOutputOf> OutputOfAsync(StartupParameters &¶meters,
|
|
|
|
const AuSPtr<IAsyncCallbacks> &pCallbacks);
|
|
|
|
}
|