| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | #pragma once#include <stdint.h>  // for uint8_t, uint32_t#include <memory>    // for shared_ptr#include <string>    // for string#include <vector>    // for vector#include "TrackReference.h"#include "protobuf/spirc.pb.h"  // for Frame, TrackRef, CapabilityType, Mess...namespace cspot {struct Context;class PlaybackState { private:  std::shared_ptr<cspot::Context> ctx;  uint32_t seqNum = 0;  uint8_t capabilityIndex = 0;  std::vector<uint8_t> frameData;  void addCapability(      CapabilityType typ, int intValue = -1,      std::vector<std::string> stringsValue = std::vector<std::string>()); public:  Frame innerFrame;  Frame remoteFrame;  std::vector<TrackReference> remoteTracks;  enum class State { Playing, Stopped, Loading, Paused };  /**     * @brief Player state represents the current state of player.     *     * Responsible for keeping track of player's state. Doesn't control the playback itself.     *     * @param timeProvider synced time provider     */  PlaybackState(std::shared_ptr<cspot::Context> ctx);  ~PlaybackState();  /**     * @brief Updates state according to current playback state.     *     * @param state playback state     */  void setPlaybackState(const PlaybackState::State state);  /**     * @brief Sets player activity     *     * @param isActive activity status     */  void setActive(bool isActive);  /**     * @brief Simple getter     *     * @return true player is active     * @return false player is inactive     */  bool isActive();  /**     * @brief Updates local track position.     *     * @param position position in milliseconds     */  void updatePositionMs(uint32_t position);  /**     * @brief Sets local volume on internal state.     *     * @param volume volume between 0 and UINT16 max     */  void setVolume(uint32_t volume);  /**   * @brief Updates local track queue from remote data.     */  void syncWithRemote();  /**     * @brief Encodes current frame into binary data via protobuf.     *     * @param typ message type to include in frame type     * @return std::vector<uint8_t> binary frame data     */  std::vector<uint8_t> encodeCurrentFrame(MessageType typ);  bool decodeRemoteFrame(std::vector<uint8_t>& data);};}  // namespace cspot
 |