Sayonara Player
StreamWriter.h
1 /* StreamWriter.h */
2 
3 /* Copyright (C) 2011-2017 Lucio Carreras
4  *
5  * This file is part of sayonara player
6  *
7  * This program is free software: you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation, either version 3 of the License, or
10  * (at your option) any later version.
11 
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16 
17  * You should have received a copy of the GNU General Public License
18  * along with this program. If not, see <http://www.gnu.org/licenses/>.
19  */
20 
21 #ifndef STREAM_WRITER_H
22 #define STREAM_WRITER_H
23 
24 #include "StreamHttpParser.h"
25 #include "Interfaces/RawSoundReceiver/RawSoundReceiverInterface.h"
26 #include "Utils/Pimpl.h"
27 
28 #include <QObject>
29 
30 class StreamDataSender;
31 class MetaData;
32 class QTcpSocket;
33 
39 class StreamWriter :
40  public QObject,
42 
43 {
44  Q_OBJECT
45  PIMPL(StreamWriter)
46 
47  signals:
48  void sig_new_connection(const QString& ip);
49  void sig_disconnected(StreamWriter* sw);
50 
51 
52  public:
53  enum class Type : uint8_t
54  {
55  Undefined,
56  Standard,
57  Invalid,
58  Streaming
59  };
60 
61 
68  StreamWriter(QTcpSocket* socket, const QString& ip, const MetaData& md);
69  ~StreamWriter();
70 
75  QString get_ip() const;
76 
81  void change_track(const MetaData& md);
82 
83 
88  bool send_playlist();
89 
94  bool send_favicon();
95 
100  bool send_metadata();
101 
106  bool send_bg();
107 
112  bool send_html5();
113 
119  bool send_header(bool reject);
120 
121  StreamHttpParser::HttpAnswer parse_message();
122 
126  void disconnect();
127 
131  void dismiss();
132 
138  void new_audio_data(const Byte* data, uint64_t size) override;
139 
140  private:
141  void reset();
142 
143  private slots:
144  void socket_disconnected();
145  void data_available();
146 };
147 
148 using StreamWriterPtr=std::shared_ptr<StreamWriter>;
149 #endif
The StreamWriter class. This class is the interface between StreamDataSender and StreamServer. It watches the client socket and spreads data to its client.
Definition: StreamWriter.h:39
StreamWriter(QTcpSocket *socket, const QString &ip, const MetaData &md)
StreamWriter.
QString get_ip() const
get client ip address
The StreamDataSender class. This class is used for sending the raw bytes.
Definition: StreamDataSender.h:32
void new_audio_data(const Byte *data, uint64_t size) override
new audio data has arrived and has to be forwarded to the socket
The MetaData class.
Definition: MetaData.h:44
bool send_playlist()
Send a m3u playlist (see StreamDataSender)
void dismiss()
stop sending sound over the client socket
void disconnect()
disconnect a client socket
The RawSoundReceiver interface.
Definition: RawSoundReceiverInterface.h:30
bool send_html5()
send a html5 website (see StreamDataSender)
void change_track(const MetaData &md)
send new icy data to clients, and send new metadata to remote controls.
bool send_header(bool reject)
send a appropriate header based on the type of request (see StreamDataSender)
bool send_bg()
Send website background (see StreamDataSender)
HttpAnswer
The HttpAnswer enum.
Definition: StreamHttpParser.h:38
bool send_favicon()
Send the http favicon (see StreamDataSender)
bool send_metadata()
Send track information (see StreamDataSender)