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>
12struct SC_COMPILER_EXPORT AsyncRequestReadableStream : public AsyncReadableStream
13{
15
17 void setAutoCloseDescriptor(bool value) { autoCloseDescriptor = value; }
18
19 AsyncRequestType request;
20
21 protected:
22 struct Internal;
23 AsyncEventLoop* eventLoop = nullptr;
24
25 AsyncBufferView::ID bufferID;
26
27 bool autoCloseDescriptor = false;
28
29 virtual Result asyncRead() override;
30 virtual Result asyncDestroyReadable() override;
31
32 void afterRead(typename AsyncRequestType::Result& result);
33 void finalizeReadableDestruction();
34
35 static void stopRedableCallback(AsyncResult&);
36
37 static Function<void(AsyncResult&)> onStopCallback;
38};
39
40template <typename AsyncRequestType>
41struct SC_COMPILER_EXPORT AsyncRequestWritableStream : public AsyncWritableStream
42{
44
45 template <typename DescriptorType>
46 Result init(AsyncBuffersPool& buffersPool, AsyncEventLoop& eventLoop, const DescriptorType& descriptor);
47
49 void setAutoCloseDescriptor(bool value) { autoCloseDescriptor = value; }
50
51 AsyncRequestType request;
52
53 protected:
54 struct Internal;
55 AsyncEventLoop* eventLoop = nullptr;
56
57 AsyncBufferView::ID bufferID;
58
59 bool autoCloseDescriptor = false;
60
61 Function<void(AsyncBufferView::ID)> callback;
62
63 virtual Result asyncWrite(AsyncBufferView::ID bufferID, Function<void(AsyncBufferView::ID)> cb) override;
64 virtual Result asyncDestroyWritable() override;
65 virtual bool canEndWritable() override;
66
67 void afterWrite(typename AsyncRequestType::Result& result);
68 void finalizeWritableDestruction();
69
70 static void stopWritableCallback(AsyncResult&);
71
72 static Function<void(AsyncResult&)> onStopCallback;
73};
74
76struct SC_COMPILER_EXPORT ReadableFileStream : public AsyncRequestReadableStream<AsyncFileRead>
77{
78 Result init(AsyncBuffersPool& buffersPool, AsyncEventLoop& eventLoop, const FileDescriptor& descriptor);
79};
80
82struct SC_COMPILER_EXPORT WritableFileStream : public AsyncRequestWritableStream<AsyncFileWrite>
83{
84 Result init(AsyncBuffersPool& buffersPool, AsyncEventLoop& eventLoop, const FileDescriptor& descriptor);
85};
86
88struct SC_COMPILER_EXPORT ReadableSocketStream : public AsyncRequestReadableStream<AsyncSocketReceive>
89{
90 Result init(AsyncBuffersPool& buffersPool, AsyncEventLoop& eventLoop, const SocketDescriptor& descriptor);
91};
92
94struct SC_COMPILER_EXPORT WritableSocketStream : public AsyncRequestWritableStream<AsyncSocketSend>
95{
96 Result init(AsyncBuffersPool& buffersPool, AsyncEventLoop& eventLoop, const SocketDescriptor& descriptor);
97};
98
99} // namespace SC
struct SC_COMPILER_EXPORT Function
Wraps function pointers, member functions and lambdas without ever allocating.
Definition Function.h:19
Definition AsyncStreams.h:52
Holds a Span of AsyncBufferView (allocated by user) holding available memory for the streams.
Definition AsyncStreams.h:163
Asynchronous I/O (files, sockets, timers, processes, fs events, threads wake-up) (see Async) AsyncEve...
Definition Async.h:1285
Async source abstraction emitting data events in caller provided byte buffers.
Definition AsyncStreams.h:214
Definition AsyncRequestStreams.h:13
virtual Result asyncRead() override
Function that every stream must define to implement its custom read operation.
virtual Result asyncDestroyReadable() override
Function that a readable stream can re-implement to release its internal resources.
void setAutoCloseDescriptor(bool value)
Automatically closes descriptor during read stream close event.
Definition AsyncRequestStreams.h:17
Definition AsyncRequestStreams.h:42
virtual Result asyncWrite(AsyncBufferView::ID bufferID, Function< void(AsyncBufferView::ID)> cb) override
Function that every stream must define to implement its custom write operation.
void setAutoCloseDescriptor(bool value)
Automatically closes descriptor during write stream finish event.
Definition AsyncRequestStreams.h:49
virtual bool canEndWritable() override
Allows keeping a writable in ENDING state until it has finished flushing all pending data.
virtual Result asyncDestroyWritable() override
Function that a writable stream can re-implement to release its internal resources.
Base class for all async results (argument of completion callbacks).
Definition Async.h:256
Async destination abstraction where bytes can be written to.
Definition AsyncStreams.h:337
[UniqueHandleDeclaration2Snippet]
Definition File.h:78
Uses an SC::AsyncFileRead to stream data from a file.
Definition AsyncRequestStreams.h:77
Uses an SC::AsyncFileWrite to stream data from a socket.
Definition AsyncRequestStreams.h:89
An ascii string used as boolean result. SC_TRY macro forwards errors to caller.
Definition Result.h:13
Low-level OS socket handle.
Definition Socket.h:153
Uses an SC::AsyncFileWrite to stream data to a file.
Definition AsyncRequestStreams.h:83
Uses an SC::AsyncFileWrite to stream data to a socket.
Definition AsyncRequestStreams.h:95