Sane C++ Libraries
C++ Platform Abstraction Libraries
Loading...
Searching...
No Matches
AsyncRequestStreams.h
1// Copyright (c) Stefano Cristiano
2// SPDX-License-Identifier: MIT
3#pragma once
4#include "../Async/Async.h"
5#include "AsyncStreams.h"
6
9namespace SC
10{
11template <typename AsyncRequestType>
13{
15
17 void setAutoCloseDescriptor(bool value) { autoCloseDescriptor = value; }
18
19 AsyncRequestType request;
20 protected:
21 struct Internal;
22 AsyncEventLoop* eventLoop = nullptr;
23
24 bool autoCloseDescriptor = false;
25 bool justUnrefBuffer = false;
26
27 Result read();
28
29 void afterRead(typename AsyncRequestType::Result& result, AsyncBufferView::ID bufferID);
30 void onCloseStopRequest();
31};
32
33template <typename AsyncRequestType>
35{
37
38 template <typename DescriptorType>
39 Result init(AsyncBuffersPool& buffersPool, Span<Request> requests, AsyncEventLoop& eventLoop,
40 const DescriptorType& descriptor);
41
43 void setAutoCloseDescriptor(bool value) { autoCloseDescriptor = value; }
44
45 AsyncRequestType request;
46
47 protected:
48 struct Internal;
49 AsyncEventLoop* eventLoop = nullptr;
50
51 bool autoCloseDescriptor = false;
52 bool justUnrefBuffer = false;
53
54 Function<void(AsyncBufferView::ID)> callback;
55
56 Result write(AsyncBufferView::ID bufferID, Function<void(AsyncBufferView::ID)> cb);
57
58 void onFinishStopRequest();
59};
60
62struct ReadableFileStream : public AsyncRequestReadableStream<AsyncFileRead>
63{
64 Result init(AsyncBuffersPool& buffersPool, Span<Request> requests, AsyncEventLoop& eventLoop,
65 const FileDescriptor& descriptor);
66};
67
69struct WritableFileStream : public AsyncRequestWritableStream<AsyncFileWrite>
70{
71 Result init(AsyncBuffersPool& buffersPool, Span<Request> requests, AsyncEventLoop& eventLoop,
72 const FileDescriptor& descriptor);
73};
74
76struct ReadableSocketStream : public AsyncRequestReadableStream<AsyncSocketReceive>
77{
78 Result init(AsyncBuffersPool& buffersPool, Span<Request> requests, AsyncEventLoop& eventLoop,
79 const SocketDescriptor& descriptor);
80};
81
83struct WritableSocketStream : public AsyncRequestWritableStream<AsyncSocketSend>
84{
85 Result init(AsyncBuffersPool& buffersPool, Span<Request> requests, AsyncEventLoop& eventLoop,
86 const SocketDescriptor& descriptor);
87};
88
89} // namespace SC
Definition AsyncStreams.h:51
Holds a Span of AsyncBufferView (allocated by user) holding available memory for the streams.
Definition AsyncStreams.h:139
Asynchronous I/O (files, sockets, timers, processes, fs events, threads wake-up) (see Async) AsyncEve...
Definition Async.h:1198
Async source abstraction emitting data events in caller provided byte buffers.
Definition AsyncStreams.h:176
Definition AsyncRequestStreams.h:13
void setAutoCloseDescriptor(bool value)
Automatically closes descriptor during read stream close event.
Definition AsyncRequestStreams.h:17
Definition AsyncRequestStreams.h:35
void setAutoCloseDescriptor(bool value)
Automatically closes descriptor during write stream finish event.
Definition AsyncRequestStreams.h:43
Async destination abstraction where bytes can be written to.
Definition AsyncStreams.h:266
[UniqueHandleDeclaration2Snippet]
Definition File.h:78
Wraps function pointers, member functions and lambdas without ever allocating.
Definition Function.h:19
Uses an SC::AsyncFileRead to stream data from a file.
Definition AsyncRequestStreams.h:63
Uses an SC::AsyncFileWrite to stream data from a socket.
Definition AsyncRequestStreams.h:77
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:12
Low-level OS socket handle.
Definition Socket.h:153
View over a contiguous sequence of items (pointer + size in elements).
Definition Span.h:29
Uses an SC::AsyncFileWrite to stream data to a file.
Definition AsyncRequestStreams.h:70
Uses an SC::AsyncFileWrite to stream data to a socket.
Definition AsyncRequestStreams.h:84