diff --git a/Runtime/Scripts/DataStreams/ByteDataStream.cs b/Runtime/Scripts/DataStreams/ByteDataStream.cs index d3072700..e5185e6f 100644 --- a/Runtime/Scripts/DataStreams/ByteDataStream.cs +++ b/Runtime/Scripts/DataStreams/ByteDataStream.cs @@ -83,9 +83,14 @@ public ReadIncrementalInstruction ReadIncremental() using var request = FFIBridge.Instance.NewRequest(); var readIncReq = request.request; readIncReq.ReaderHandle = (ulong)_handle.DangerousGetHandle(); - request.Send(); - return new ReadIncrementalInstruction(_handle); + // Subscribe before sending: chunk events are delivered directly on the FFI + // callback thread, and the FFI server emits already-buffered chunks as soon + // as it receives the request. Sending first loses any chunk emitted before + // the subscription exists. + var instruction = new ReadIncrementalInstruction(_handle); + request.Send(); + return instruction; } /// diff --git a/Runtime/Scripts/DataStreams/TextDataStream.cs b/Runtime/Scripts/DataStreams/TextDataStream.cs index 4587a5c0..f6181a2c 100644 --- a/Runtime/Scripts/DataStreams/TextDataStream.cs +++ b/Runtime/Scripts/DataStreams/TextDataStream.cs @@ -122,9 +122,14 @@ public ReadIncrementalInstruction ReadIncremental() using var request = FFIBridge.Instance.NewRequest(); var readIncReq = request.request; readIncReq.ReaderHandle = (ulong)_handle.DangerousGetHandle(); - request.Send(); - return new ReadIncrementalInstruction(_handle); + // Subscribe before sending: chunk events are delivered directly on the FFI + // callback thread, and the FFI server emits already-buffered chunks as soon + // as it receives the request. Sending first loses any chunk emitted before + // the subscription exists. + var instruction = new ReadIncrementalInstruction(_handle); + request.Send(); + return instruction; } ///