MPD: event/FullyBufferedSocket.hxx Source File

MPD 0.20.15

FullyBufferedSocket.hxx
Go to the documentation of this file.
1 /*
2 * Copyright 2003-2017 The Music Player Daemon Project
3 * http://www.musicpd.org
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License along
16 * with this program; if not, write to the Free Software Foundation, Inc.,
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18 */
19
20 #ifndef MPD_FULLY_BUFFERED_SOCKET_HXX
21 #define MPD_FULLY_BUFFERED_SOCKET_HXX
22
23 #include "check.h"
24 #include "BufferedSocket.hxx"
25 #include "IdleMonitor.hxx"
26 #include "util/PeakBuffer.hxx"
27
31 class FullyBufferedSocket : protected BufferedSocket, private IdleMonitor {
32 PeakBuffer output;
33
34 public:
35 FullyBufferedSocket(int _fd, EventLoop &_loop,
36 size_t normal_size, size_t peak_size=0)
37 :BufferedSocket(_fd, _loop), IdleMonitor(_loop),
38 output(normal_size, peak_size) {
39 }
40
41 using BufferedSocket::IsDefined;
42
43 void Close() {
44 IdleMonitor::Cancel();
45 BufferedSocket::Close();
46 }
47
48 private:
49 ssize_t DirectWrite(const void *data, size_t length);
50
51 protected:
57 bool Flush();
58
62 bool Write(const void *data, size_t length);
63
64 virtual bool OnSocketReady(unsigned flags) override;
65 virtual void OnIdle() override;
66 };
67
68 #endif
check.h
BufferedSocket.hxx
FullyBufferedSocket::Close
void Close()
Definition: FullyBufferedSocket.hxx:43
PeakBuffer
A FIFO-like buffer that will allocate more memory on demand to allow large peaks. ...
Definition: PeakBuffer.hxx:36
IdleMonitor
An event that runs when the EventLoop has become idle, before waiting for more events.
Definition: IdleMonitor.hxx:35
FullyBufferedSocket::OnIdle
virtual void OnIdle() override
EventLoop
An event loop that polls for events on file/socket descriptors.
Definition: Loop.hxx:51
FullyBufferedSocket::FullyBufferedSocket
FullyBufferedSocket(int _fd, EventLoop &_loop, size_t normal_size, size_t peak_size=0)
Definition: FullyBufferedSocket.hxx:35
SocketMonitor::ssize_t
std::make_signed< size_t >::type ssize_t
Definition: SocketMonitor.hxx:69
PeakBuffer.hxx
SocketMonitor::IsDefined
bool IsDefined() const
Definition: SocketMonitor.hxx:83
IdleMonitor::Cancel
void Cancel()
BufferedSocket
A SocketMonitor specialization that adds an input buffer.
Definition: BufferedSocket.hxx:37
FullyBufferedSocket::Flush
bool Flush()
Send data from the output buffer to the socket.
IdleMonitor.hxx
FullyBufferedSocket::Write
bool Write(const void *data, size_t length)
SocketMonitor::Close
void Close()
FullyBufferedSocket
A BufferedSocket specialization that adds an output buffer.
Definition: FullyBufferedSocket.hxx:31
FullyBufferedSocket::OnSocketReady
virtual bool OnSocketReady(unsigned flags) override