2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
20#ifndef CORE_DESCRIPTOREVENTRECEIVER_H
21#define CORE_DESCRIPTOREVENTRECEIVER_H
23#include "core/EventReceiver.h"
26 class DescriptorEventPublisher;
29#ifndef DOXYGEN_SHOULD_SKIP_THIS
31#include "utils/Timeval.h"
42 Observer(Observer&) =
delete;
43 Observer(Observer&&) =
delete;
51 virtual void unobservedEvent() = 0;
54 int observationCounter = 0;
57 class DescriptorEventReceiver
58 :
virtual protected Observer
59 ,
public EventReceiver {
62 static const utils::Timeval DEFAULT;
63 static const utils::Timeval DISABLE;
64 static const utils::Timeval MAX;
67 DescriptorEventReceiver(
const std::string& name,
68 DescriptorEventPublisher& descriptorEventPublisher,
69 const utils::Timeval& timeout = TIMEOUT::DISABLE);
71 int getRegisteredFd()
const;
81 bool isEnabled()
const;
82 bool isSuspended()
const;
84 void setTimeout(
const utils::Timeval& timeout);
85 utils::Timeval getTimeout(
const utils::Timeval& currentTime)
const;
87 void checkTimeout(
const utils::Timeval& currentTime);
90 void onEvent(
const utils::Timeval& currentTime)
final;
91 void onSignal(
int signum);
93 void triggered(
const utils::Timeval& currentTime);
94 void setEnabled(
const utils::Timeval& currentTime);
97 virtual void dispatchEvent() = 0;
98 virtual void timeoutEvent() = 0;
99 virtual void signalEvent(
int signum) = 0;
101 DescriptorEventPublisher& descriptorEventPublisher;
105 bool enabled =
false;
106 bool suspended =
false;
110 const utils::Timeval initialTimeout;
112 int eventCounter = 0;
114 friend class DescriptorEventPublisher;
SocketAddress localAddress
SocketAddress remoteAddress
void unobservedEvent() final
void onReadError(int errnum)
void shutdownRead() final
void onReceivedFromPeer(std::size_t available) final
void onWriteError(int errnum)
void setTimeout(const utils::Timeval &timeout) final
std::size_t readFromPeer(char *chunk, std::size_t chunkLen) final
bool onSignal(int signum) final
const SocketAddress & getRemoteAddress() const final
PhysicalSocket physicalSocket
SocketConnectionT(const std::string &instanceName, PhysicalSocket &&physicalSocket, const std::function< void()> &onDisconnect, const std::string &configuredServer, const SocketAddress &localAddress, const SocketAddress &remoteAddress, const utils::Timeval &readTimeout, const utils::Timeval &writeTimeout, std::size_t readBlockSize, std::size_t writeBlockSize, const utils::Timeval &terminateTimeout)
void doWriteShutdown(const std::function< void()> &onShutdown) override
bool streamToPeer(core::pipe::Source *source) final
SocketConnectionT()=delete
void shutdownWrite(bool forceClose) final
void sendToPeer(const char *chunk, std::size_t chunkLen) final
std::function< void()> onDisconnect
const SocketAddress & getLocalAddress() const final
void writeTimeout() final
~SocketConnectionT() override
std::string connectionName
virtual void shutdownRead()=0
const std::string & getConfiguredServer() const
virtual void sendToPeer(const char *chunk, std::size_t chunkLen)=0
core::socket::stream::SocketContext * newSocketContext
core::socket::stream::SocketContext * socketContext
void connectSocketContext(const std::shared_ptr< SocketContextFactory > &socketContextFactory)
void switchSocketContext(SocketContext *newSocketContext)
virtual const core::socket::SocketAddress & getLocalAddress() const =0
virtual ~SocketConnection()
virtual void setTimeout(const utils::Timeval &timeout)=0
void disconnectCurrentSocketContext()
void sentToPeer(const std::vector< uint8_t > &data)
const std::string & getConnectionName() const
void setSocketContext(SocketContext *socketContext)
std::string configuredServer
virtual const core::socket::SocketAddress & getRemoteAddress() const =0
virtual int getFd() const =0
virtual void streamEof()=0
void sendToPeer(const std::string &data)
virtual void shutdownWrite(bool forceClose)=0
virtual std::size_t readFromPeer(char *chunk, std::size_t chunkLen)=0
SocketConnection(const std::string &instanceName, int fd, const std::string &configuredServer)
virtual bool streamToPeer(core::pipe::Source *source)=0
const std::string & getInstanceName() const
SocketConnection(const std::string &instanceName, PhysicalSocket &&physicalSocket, const std::function< void(SocketConnection *)> &onDisconnect, const std::string &configuredServer, const SocketAddress &localAddress, const SocketAddress &remoteAddress, const utils::Timeval &readTimeout, const utils::Timeval &writeTimeout, std::size_t readBlockSize, std::size_t writeBlockSize, const utils::Timeval &terminateTimeout)
int main(int argc, char *argv[])