buidl fix

This commit is contained in:
Andrei Yankovich 2017-11-13 23:05:59 +03:00
parent b7b4e3182b
commit 3acfbb5a10
4 changed files with 61 additions and 52 deletions

View File

@ -3,38 +3,39 @@
#include "song.h" #include "song.h"
#include <QDataStream> #include <QDataStream>
namespace syncLib{
syncLib::package::package(){ package::package(){
type = syncLib::package::t_void; type = package::t_void;
source.clear(); source.clear();
playdata.run = 0; playdata.run = 0;
playdata.seek = 0; playdata.seek = 0;
size = 0; size = 0;
} }
syncLib::package::package(const QByteArray &array): package::package(const QByteArray &array):
syncLib::package::package(){ package::package(){
parseFrom(array); parseFrom(array);
} }
const Song& syncLib::package::getSong(){ const Song& package::getSong() const{
return source; return source;
} }
Syncer syncLib::package::getPlayData(){ Syncer package::getPlayData() const{
return playdata; return playdata;
} }
syncLib::package::TypePackage syncLib::package::getType(){ package::TypePackage package::getType() const{
return type; return type;
} }
bool syncLib::package::isValid(){ bool package::isValid() const{
switch (type) { switch (type) {
case package::t_void: case package::t_void:
return false; return false;
case package::t_close: case package::t_close:
return true; return true;
case package::t_sync: case package::t_sync:
return Syncer.run > 0 && Syncer.seek > 0; return playdata.run > 0 && playdata.seek > 0;
case package::t_song: case package::t_song:
return source.size > 0; return source.size > 0;
case package::t_stop: case package::t_stop:
@ -44,9 +45,9 @@ bool syncLib::package::isValid(){
} }
} }
QByteArray syncLib::package::parseTo(){ QByteArray package::parseTo(){
QByteArray temp; QByteArray temp;
QDataStream stream(&temp); QDataStream stream(temp);
temp.clear(); temp.clear();
if(isValid()){ if(isValid()){
switch (type) { switch (type) {
@ -82,13 +83,13 @@ QByteArray syncLib::package::parseTo(){
default: default:
break; break;
} }
return temp;
} }
return temp;
} }
bool syncLib::package::parseFrom(const QByteArray &array){ bool package::parseFrom(const QByteArray &array){
type = t_void; type = t_void;
QDataStream stream(&array); QDataStream stream(array);
switch (type) { switch (type) {
case package::t_void: case package::t_void:
return false; return false;
@ -108,51 +109,51 @@ bool syncLib::package::parseFrom(const QByteArray &array){
} }
} }
syncLib::Node::Node():QTcpServer(){ Node::Node():QTcpServer(){
connect(this,SIGNAL(acceptError(QAbstractSocket::SocketError)),SLOT(acceptError_(QAbstractSocket::SocketError))); connect(this,SIGNAL(acceptError(QAbstractSocket::SocketError)),SLOT(acceptError_(QAbstractSocket::SocketError)));
connect(this,SIGNAL(newConnection()),SLOT(newConnection_())); connect(this,SIGNAL(newConnection()),SLOT(newConnection_()));
} }
void syncLib::Node::acceptError_(QTcpSocket*c){ void Node::acceptError_(QTcpSocket*c){
c->close(); c->close();
clients.removeOne(c); clients.removeOne(c);
emit ClientDisconnected(c); emit ClientDisconnected(c);
delete c; delete c;
} }
QList<QTcpSocket*>* syncLib::Node::getClients(){ QList<QTcpSocket*>* Node::getClients(){
return &clients; return &clients;
} }
void syncLib::Node::newConnection_(){ void Node::newConnection_(){
QTcpSocket *newClient=new QTcpSocket(nextPendingConnection()); QTcpSocket *newClient=new QTcpSocket(nextPendingConnection());
clients.push_back(newClient); clients.push_back(newClient);
connect(newClient,SIGNAL(Disconnected(ETcpSocket*)),this,SLOT(acceptError_(QTcpSocket*))); connect(newClient,SIGNAL(Disconnected(ETcpSocket*)),this,SLOT(acceptError_(QTcpSocket*)));
connect(newClient,SIGNAL(Message(ETcpSocket*)),this,SLOT(readData(QTcpSocket*))); connect(newClient,SIGNAL(Message(ETcpSocket*)),this,SLOT(readData(QTcpSocket*)));
emit ClientConnected(newClient); emit ClientConnected(newClient);
} }
void syncLib::Node::readData(QTcpSocket *c){ void Node::readData(QTcpSocket *c){
emit Message(c); emit Message(c);
} }
void syncLib::Node::WriteAll(const QByteArray &data){ void Node::WriteAll(const QByteArray &data){
for(QTcpSocket*i:clients){ for(QTcpSocket*i:clients){
i->write(data); i->write(data);
} }
} }
void syncLib::Node::disconnectClient(QTcpSocket *c){ void Node::disconnectClient(QTcpSocket *c){
c->close(); c->close();
clients.removeOne(c); clients.removeOne(c);
delete c; delete c;
} }
bool syncLib::Node::addNode(const QString &node,int port){ bool Node::addNode(const QString &node,int port){
QTcpSocket *temp = new QTcpSocket; QTcpSocket *temp = new QTcpSocket;
if(temp->bind(node,port) && temp->open(QIODevice::ReadWrite)){ if(temp->bind(QHostAddress(node),port) && temp->open(QIODevice::ReadWrite)){
clients.append(temp); clients.append(temp);
return true; return true;
} }
return false; return false;
} }
bool syncLib::Node::addNode(QTcpSocket *node){ bool Node::addNode(QTcpSocket *node){
if(node->isOpen()){ if(node->isOpen()){
clients.append(node); clients.append(node);
return true; return true;
@ -160,10 +161,14 @@ bool syncLib::Node::addNode(QTcpSocket *node){
return false; return false;
} }
syncLib::Node::~Node(){ Node::~Node(){
for(QTcpSocket *i:clients){ for(QTcpSocket *i:clients){
i->abort(); i->abort();
delete i; delete i;
} }
this->close(); this->close();
} }
}

View File

@ -1,8 +1,7 @@
#ifndef NODE_H #ifndef NODE_H
#define NODE_H #define NODE_H
#include <QTcpServer> #include <QTcpServer>
#include "config.h" #include <song.h>
class Song;
class Syncer; class Syncer;
namespace syncLib { namespace syncLib {
@ -57,9 +56,9 @@ public:
* @return time of playning media data * @return time of playning media data
*/ */
Syncer getPlayData() const; Syncer getPlayData() const;
unsigned char getType() const; TypePackage getType() const;
bool isValid() const; bool isValid() const;
QByteArray parseTo() const; QByteArray parseTo();
bool parseFrom(const QByteArray& array); bool parseFrom(const QByteArray& array);
}; };

View File

@ -1,76 +1,81 @@
#include "song.h" #include "song.h"
#include "config.h"
syncLib::SongHeader::SongHeader() namespace syncLib{
SongHeader::SongHeader()
{ {
this->id = 0; this->id = 0;
this->name = ""; this->name = "";
this->size = 0; this->size = 0;
} }
syncLib::SongHeader& syncLib::SongHeader::operator =(const syncLib::SongHeader& right){ SongHeader& SongHeader::operator =(const SongHeader& right){
this->id = right.id; this->id = right.id;
this->name = right.name; this->name = right.name;
this->size = right.size; this->size = right.size;
return *this; return *this;
} }
bool syncLib::SongHeader::operator ==(const syncLib::SongHeader& right){ bool SongHeader::operator ==(const SongHeader& right){
return this->name == right.name && this->size == right.size; return this->name == right.name && this->size == right.size;
} }
syncLib::SongHeader::getSize(){ unsigned int SongHeader::getSize() const{
QByteArray size; QByteArray size;
QDataStream stream(&size); QDataStream stream(size);
stream << id << name << this->size; stream << id << name << this->size;
return size.size(); return size.size();
} }
syncLib::Song::Song(): Song::Song():
syncLib::SongHeader() SongHeader()
{ {
source.clear(); source.clear();
} }
friend QDataStream& operator << (QDataStream& stream, const syncLib::SongHeader& song){ QDataStream& operator << (QDataStream& stream, const SongHeader& song){
stream << song.id; stream << song.id;
stream << song.name; stream << song.name;
stream << song.size; stream << song.size;
return stream; return stream;
} }
friend QDataStream& operator >> (QDataStream& stream, syncLib::SongHeader& song){ QDataStream& operator >> (QDataStream& stream, SongHeader& song){
stream >> song.id; stream >> song.id;
stream >> song.name; stream >> song.name;
stream >> song.size; stream >> song.size;
return stream; return stream;
} }
syncLib::Song::Song(const SongHeader& from) Song::Song(const SongHeader& from)
:syncLib::Song::Song() :Song::Song()
{ {
this->id = from.id; this->id = from.id;
this->name = from.name; this->name = from.name;
this->size = from.size; this->size = from.size;
} }
syncLib::Song::clear(){ void Song::clear(){
source.clear(); source.clear();
} }
syncLib::Song::~Song(){ Song::~Song(){
source.clear(); source.clear();
} }
syncLib::Song::getSize(){ unsigned int Song::getSize() const{
return syncLib::SongHeader::getSize() + source.size(); return SongHeader::getSize() + source.size();
} }
QDataStream operator << (QDataStream& stream,const syncLib::Song& song){ QDataStream& operator << (QDataStream& stream,const Song& song){
stream << (syncLib::SongHeader)(*this); stream << static_cast<const SongHeader&>(song);
stream << song.source; stream << song.source;
return stream;
} }
QDataStream operator << (QDataStream& stream, syncLib::Song& song){ QDataStream& operator >> (QDataStream& stream, Song& song){
stream >> (syncLib::SongHeader)(*this); stream >> static_cast<SongHeader&>(song);
stream >> song.source; stream >> song.source;
return stream;
}
} }

View File

@ -3,11 +3,11 @@
#include <QString> #include <QString>
#include <QByteArray> #include <QByteArray>
#include <QDataStream> #include <QDataStream>
#include <config.h>
/** /**
* @brief Time_point on nanosecunds (uint64_t) * @brief Time_point on nanosecunds (uint64_t)
*/ */
typedef uint64_t microseconds; typedef quint64 microseconds;
namespace syncLib { namespace syncLib {
@ -40,7 +40,7 @@ public:
SongHeader(); SongHeader();
SongHeader& operator = (const SongHeader& right); SongHeader& operator = (const SongHeader& right);
bool operator == (const SongHeader& right); bool operator == (const SongHeader& right);
virtual unsigned int getSize(); virtual unsigned int getSize()const;
virtual ~SongHeader(); virtual ~SongHeader();
friend QDataStream& operator << (QDataStream& stream, const SongHeader& song); friend QDataStream& operator << (QDataStream& stream, const SongHeader& song);
friend QDataStream& operator >> (QDataStream& stream, SongHeader& song); friend QDataStream& operator >> (QDataStream& stream, SongHeader& song);