Sayonara Player
StreamWriter.h
1 /* StreamWriter.h */
2 
3 /* Copyright (C) 2011-2020 Michael Lugmair (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/Engine/AudioDataReceiverInterface.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 sigNewConnection(const QString& ip);
49  void sigDisconnected(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() override;
70 
75  QString ip() const;
76 
81  void changeTrack(const MetaData& md);
82 
83 
88  bool sendPlaylist();
89 
94  bool sendFavicon();
95 
100  bool sendMetadata();
101 
107 
112  bool sendHtml5();
113 
119  bool sendHeader(bool reject);
120 
121  StreamHttpParser::HttpAnswer parseMessage();
122 
126  void disconnect();
127 
131  void dismiss();
132 
138  void writeAudioData(const QByteArray& data) override;
139 
140  private:
141  void reset();
142 
143  private slots:
144  void socketDisconnected();
145  void dataAvailble();
146  void clearSocket();
147 };
148 
149 using StreamWriterPtr=std::shared_ptr<StreamWriter>;
150 #endif
StreamWriter::sendMetadata
bool sendMetadata()
Send track information (see StreamDataSender)
StreamWriter::sendFavicon
bool sendFavicon()
Send the http favicon (see StreamDataSender)
Engine::RawSoundReceiverInterface
The RawSoundReceiver interface.
Definition: AudioDataReceiverInterface.h:67
StreamWriter::dismiss
void dismiss()
stop sending sound over the client socket
StreamWriter::disconnect
void disconnect()
disconnect a client socket
StreamDataSender
The StreamDataSender class. This class is used for sending the raw bytes.
Definition: StreamDataSender.h:33
StreamWriter::changeTrack
void changeTrack(const MetaData &md)
send new icy data to clients, and send new metadata to remote controls.
StreamWriter::sendBackground
bool sendBackground()
Send website background (see StreamDataSender)
StreamHttpParser::HttpAnswer
HttpAnswer
The HttpAnswer enum.
Definition: StreamHttpParser.h:39
StreamWriter::ip
QString ip() const
get client ip address
StreamWriter::sendHeader
bool sendHeader(bool reject)
send a appropriate header based on the type of request (see StreamDataSender)
MetaData
The MetaData class.
Definition: MetaData.h:47
StreamWriter::sendPlaylist
bool sendPlaylist()
Send a m3u playlist (see StreamDataSender)
StreamWriter::sendHtml5
bool sendHtml5()
send a html5 website (see StreamDataSender)
StreamWriter::writeAudioData
void writeAudioData(const QByteArray &data) override
new audio data has arrived and has to be forwarded to the socket
StreamWriter::StreamWriter
StreamWriter(QTcpSocket *socket, const QString &ip, const MetaData &md)
StreamWriter.
StreamWriter
The StreamWriter class. This class is the interface between StreamDataSender and StreamServer....
Definition: StreamWriter.h:43