snapcast/common/message.h
(no author) b61c6f0217 send sample format
git-svn-id: svn://elaine/murooma/trunk@238 d8a302eb-03bc-478d-80e4-98257eca68ef
2014-09-06 12:54:15 +00:00

82 lines
1.3 KiB
C++

#ifndef MESSAGE_H
#define MESSAGE_H
#include <cstring>
#include <iostream>
#include <streambuf>
#include <vector>
template<typename CharT, typename TraitsT = std::char_traits<CharT> >
class vectorwrapbuf : public std::basic_streambuf<CharT, TraitsT> {
public:
vectorwrapbuf(std::vector<CharT> &vec) {
this->setg(vec.data(), vec.data(), vec.data() + vec.size());
}
};
enum message_type
{
header = 0,
payload = 1,
sampleformat = 2
};
struct BaseMessage
{
BaseMessage()
{
}
BaseMessage(message_type type_)
{
type = type_;
};
virtual ~BaseMessage()
{
}
virtual void read(std::istream& stream)
{
stream.read(reinterpret_cast<char*>(&type), sizeof(uint16_t));
stream.read(reinterpret_cast<char*>(&size), sizeof(uint32_t));
}
virtual void readVec(std::vector<char>& stream)
{
vectorwrapbuf<char> databuf(stream);
std::istream is(&databuf);
read(is);
}
virtual void serialize(std::ostream& stream)
{
stream.write(reinterpret_cast<char*>(&type), sizeof(uint16_t));
size = getSize();
stream.write(reinterpret_cast<char*>(&size), sizeof(uint32_t));
doserialize(stream);
}
virtual uint32_t getSize()
{
return sizeof(uint16_t) + sizeof(uint32_t);
};
uint16_t type;
uint32_t size;
protected:
virtual void doserialize(std::ostream& stream)
{
};
};
#endif