browser wasm
This commit is contained in:
parent
28fab2509b
commit
e8630528af
24 changed files with 2490 additions and 100 deletions
|
|
@ -280,6 +280,18 @@ std::vector<char> QUICStream::RecieveUntilFullSync(std::uint32_t bufferSize) {
|
|||
return out;
|
||||
}
|
||||
|
||||
void QUICStream::SendAsync(const void* buffer, std::uint32_t size, bool finish,
|
||||
std::function<void()> onSent) {
|
||||
// Copy now: the caller's buffer may not outlive the enqueued task.
|
||||
std::vector<char> copy(static_cast<const char*>(buffer),
|
||||
static_cast<const char*>(buffer) + size);
|
||||
ThreadPool::Enqueue([this, copy = std::move(copy), finish, onSent = std::move(onSent)]() mutable {
|
||||
try { this->SendSync(copy.data(), static_cast<std::uint32_t>(copy.size()), finish); }
|
||||
catch (...) { /* swallowed — callback still fires so the caller can move on */ }
|
||||
if (onSent) onSent();
|
||||
});
|
||||
}
|
||||
|
||||
void QUICStream::RecieveAsync(std::function<void(std::vector<char>)> cb) {
|
||||
ThreadPool::Enqueue([this, cb]{ cb(this->RecieveSync()); });
|
||||
}
|
||||
|
|
@ -290,6 +302,27 @@ void QUICStream::RecieveUntilFullAsync(std::uint32_t bufferSize, std::function<v
|
|||
ThreadPool::Enqueue([this, bufferSize, cb]{ cb(this->RecieveUntilFullSync(bufferSize)); });
|
||||
}
|
||||
|
||||
void QUICStream::PrependReceived(std::vector<char> bytes) {
|
||||
if (bytes.empty() || !impl) return;
|
||||
{
|
||||
std::lock_guard lk(impl->mtx);
|
||||
impl->pending.push_front(std::move(bytes));
|
||||
}
|
||||
impl->cv.notify_all();
|
||||
}
|
||||
|
||||
std::uint64_t QUICStream::GetStreamId() const {
|
||||
if (!handle) throw QUICException("GetStreamId: stream is not open");
|
||||
QUIC_UINT62 id = 0;
|
||||
std::uint32_t size = sizeof(id);
|
||||
QUIC_STATUS s = Runtime().api->GetParam(handle, QUIC_PARAM_STREAM_ID, &size, &id);
|
||||
if (QUIC_FAILED(s)) {
|
||||
throw QUICException(std::format("GetParam(QUIC_PARAM_STREAM_ID) failed: 0x{:x}",
|
||||
static_cast<unsigned>(s)));
|
||||
}
|
||||
return static_cast<std::uint64_t>(id);
|
||||
}
|
||||
|
||||
// ---------------- ClientQUIC::Impl ----------------
|
||||
struct ClientQUIC::Impl {
|
||||
HQUIC connection = nullptr;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue