WinptyShellSession constructor
WinptyShellSession({})
Implementation
WinptyShellSession({
required WinptyLib winpty,
required Pointer<Void> winptyPtr,
required Pointer<Void> childHandle,
required String coninName,
required String conoutName,
}) : _winpty = winpty,
_wp = winptyPtr,
_child = childHandle {
// Open conin for writing (single client per pipe; the reader isolate opens
// conout). A failure leaves an invalid handle and writes become no-ops.
final namePtr = coninName.toNativeUtf16();
try {
_conin = _k.createFileW(
namePtr,
kGenericWrite,
0,
nullptr,
kOpenExisting,
0,
nullptr,
);
} finally {
calloc.free(namePtr);
}
_readerPort.listen((msg) {
if (msg is Uint8List) {
if (!_stdout.isClosed) _stdout.add(msg);
} else {
// Sentinel: conout reached EOF (child exited / pipe broke).
if (!_stdout.isClosed) _stdout.close();
_readerPort.close();
}
});
_waiterPort.listen((msg) {
if (msg is int && !_exit.isCompleted) _exit.complete(msg);
_waiterPort.close();
_dispose();
});
Isolate.spawn(_readerMain, (_readerPort.sendPort, conoutName));
Isolate.spawn(_waiterMain, (_waiterPort.sendPort, _child.address));
}