switched to standalone asio

This commit is contained in:
badaix 2015-12-03 22:23:43 +01:00
parent 75179cc936
commit 5cc7285a87
14 changed files with 42 additions and 42 deletions

View file

@ -3,7 +3,7 @@ TARGET = snapclient
SHELL = /bin/bash SHELL = /bin/bash
CXX = /usr/bin/g++ CXX = /usr/bin/g++
CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. -I../externals/asio/asio/include
#CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. -static-libgcc -static-libstdc++ #CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. -static-libgcc -static-libstdc++
LDFLAGS = -lrt -lboost_system -lboost_program_options -lasound -logg -lvorbis -lvorbisenc -lFLAC -lavahi-client -lavahi-common LDFLAGS = -lrt -lboost_system -lboost_program_options -lasound -logg -lvorbis -lvorbisenc -lFLAC -lavahi-client -lavahi-common

View file

@ -47,7 +47,7 @@ void ClientConnection::socketRead(void* _to, size_t _bytes)
do do
{ {
// boost::system::error_code error; // boost::system::error_code error;
len += socket_->read_some(boost::asio::buffer((char*)_to + len, toRead)); len += socket_->read_some(asio::buffer((char*)_to + len, toRead));
//cout << "len: " << len << ", error: " << error << endl; //cout << "len: " << len << ", error: " << error << endl;
toRead = _bytes - len; toRead = _bytes - len;
} }
@ -58,7 +58,7 @@ void ClientConnection::socketRead(void* _to, size_t _bytes)
void ClientConnection::start() void ClientConnection::start()
{ {
tcp::resolver resolver(io_service_); tcp::resolver resolver(io_service_);
tcp::resolver::query query(tcp::v4(), host_, std::to_string(port_), boost::asio::ip::resolver_query_base::numeric_service); tcp::resolver::query query(tcp::v4(), host_, std::to_string(port_), asio::ip::resolver_query_base::numeric_service);
auto iterator = resolver.resolve(query); auto iterator = resolver.resolve(query);
logO << "Connecting\n"; logO << "Connecting\n";
socket_.reset(new tcp::socket(io_service_)); socket_.reset(new tcp::socket(io_service_));
@ -86,10 +86,10 @@ void ClientConnection::stop()
active_ = false; active_ = false;
try try
{ {
boost::system::error_code ec; std::error_code ec;
if (socket_) if (socket_)
{ {
socket_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); socket_->shutdown(asio::ip::tcp::socket::shutdown_both, ec);
if (ec) logE << "Error in socket shutdown: " << ec << endl; if (ec) logE << "Error in socket shutdown: " << ec << endl;
socket_->close(ec); socket_->close(ec);
if (ec) logE << "Error in socket close: " << ec << endl; if (ec) logE << "Error in socket close: " << ec << endl;
@ -116,12 +116,12 @@ bool ClientConnection::send(const msg::BaseMessage* message) const
if (!connected()) if (!connected())
return false; return false;
//logD << "send: " << message->type << ", size: " << message->getSize() << "\n"; //logD << "send: " << message->type << ", size: " << message->getSize() << "\n";
boost::asio::streambuf streambuf; asio::streambuf streambuf;
std::ostream stream(&streambuf); std::ostream stream(&streambuf);
tv t; tv t;
message->sent = t; message->sent = t;
message->serialize(stream); message->serialize(stream);
boost::asio::write(*socket_.get(), streambuf); asio::write(*socket_.get(), streambuf);
return true; return true;
} }

View file

@ -24,14 +24,14 @@
#include <atomic> #include <atomic>
#include <mutex> #include <mutex>
#include <memory> #include <memory>
#include <boost/asio.hpp> #include <asio.hpp>
#include <condition_variable> #include <condition_variable>
#include <set> #include <set>
#include "message/message.h" #include "message/message.h"
#include "common/timeDefs.h" #include "common/timeDefs.h"
using boost::asio::ip::tcp; using asio::ip::tcp;
class ClientConnection; class ClientConnection;
@ -105,7 +105,7 @@ protected:
void socketRead(void* to, size_t bytes); void socketRead(void* to, size_t bytes);
void getNextMessage(); void getNextMessage();
boost::asio::io_service io_service_; asio::io_service io_service_;
std::shared_ptr<tcp::socket> socket_; std::shared_ptr<tcp::socket> socket_;
std::atomic<bool> active_; std::atomic<bool> active_;
std::atomic<bool> connected_; std::atomic<bool> connected_;

2
externals/tclap vendored

@ -1 +1 @@
Subproject commit f41dcb5ce3d063c9fe95623193bba693338f3edb Subproject commit 3627d9402e529770df9b0edf2aa8c0e0d6c6bb41

View file

@ -3,7 +3,7 @@ TARGET = snapserver
SHELL = /bin/bash SHELL = /bin/bash
CXX = /usr/bin/g++ CXX = /usr/bin/g++
CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. CFLAGS = -std=c++0x -Wall -Wno-unused-function -O3 -pthread -DVERSION=\"$(VERSION)\" -I.. -I../externals/asio/asio/include
LDFLAGS = -lrt -lboost_system -lboost_program_options -lvorbis -lvorbisenc -logg -lFLAC -lavahi-client -lavahi-common LDFLAGS = -lrt -lboost_system -lboost_program_options -lvorbis -lvorbisenc -logg -lFLAC -lavahi-client -lavahi-common
OBJ = snapServer.o config.o controlServer.o controlSession.o streamServer.o streamSession.o json/jsonrpc.o pcmreader/pcmReader.o pcmreader/pipeReader.o encoder/encoderFactory.o encoder/flacEncoder.o encoder/pcmEncoder.o encoder/oggEncoder.o publishAvahi.o ../common/log.o ../message/pcmChunk.o ../message/sampleFormat.o OBJ = snapServer.o config.o controlServer.o controlSession.o streamServer.o streamSession.o json/jsonrpc.o pcmreader/pcmReader.o pcmreader/pipeReader.o encoder/encoderFactory.o encoder/flacEncoder.o encoder/pcmEncoder.o encoder/oggEncoder.o publishAvahi.o ../common/log.o ../message/pcmChunk.o ../message/sampleFormat.o

View file

@ -33,7 +33,7 @@ using namespace std;
using json = nlohmann::json; using json = nlohmann::json;
ControlServer::ControlServer(boost::asio::io_service* io_service, size_t port, ControlMessageReceiver* controlMessageReceiver) : io_service_(io_service), port_(port), controlMessageReceiver_(controlMessageReceiver) ControlServer::ControlServer(asio::io_service* io_service, size_t port, ControlMessageReceiver* controlMessageReceiver) : io_service_(io_service), port_(port), controlMessageReceiver_(controlMessageReceiver)
{ {
} }

View file

@ -19,7 +19,7 @@
#ifndef CONTROL_SERVER_H #ifndef CONTROL_SERVER_H
#define CONTROL_SERVER_H #define CONTROL_SERVER_H
#include <boost/asio.hpp> #include <asio.hpp>
#include <vector> #include <vector>
#include <thread> #include <thread>
#include <memory> #include <memory>
@ -35,7 +35,7 @@
#include "message/serverSettings.h" #include "message/serverSettings.h"
using boost::asio::ip::tcp; using asio::ip::tcp;
typedef std::shared_ptr<tcp::socket> socket_ptr; typedef std::shared_ptr<tcp::socket> socket_ptr;
@ -46,7 +46,7 @@ typedef std::shared_ptr<tcp::socket> socket_ptr;
class ControlServer : public ControlMessageReceiver class ControlServer : public ControlMessageReceiver
{ {
public: public:
ControlServer(boost::asio::io_service* io_service, size_t port, ControlMessageReceiver* controlMessageReceiver = NULL); ControlServer(asio::io_service* io_service, size_t port, ControlMessageReceiver* controlMessageReceiver = NULL);
virtual ~ControlServer(); virtual ~ControlServer();
void start(); void start();
@ -67,7 +67,7 @@ private:
std::shared_ptr<tcp::acceptor> acceptor_; std::shared_ptr<tcp::acceptor> acceptor_;
Queue<std::shared_ptr<msg::BaseMessage>> messages_; Queue<std::shared_ptr<msg::BaseMessage>> messages_;
boost::asio::io_service* io_service_; asio::io_service* io_service_;
size_t port_; size_t port_;
ControlMessageReceiver* controlMessageReceiver_; ControlMessageReceiver* controlMessageReceiver_;
}; };

View file

@ -52,10 +52,10 @@ void ControlSession::stop()
active_ = false; active_ = false;
try try
{ {
boost::system::error_code ec; std::error_code ec;
if (socket_) if (socket_)
{ {
socket_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); socket_->shutdown(asio::ip::tcp::socket::shutdown_both, ec);
if (ec) logE << "Error in socket shutdown: " << ec << "\n"; if (ec) logE << "Error in socket shutdown: " << ec << "\n";
socket_->close(ec); socket_->close(ec);
if (ec) logE << "Error in socket close: " << ec << "\n"; if (ec) logE << "Error in socket close: " << ec << "\n";
@ -96,10 +96,10 @@ bool ControlSession::send(const std::string& message) const
std::unique_lock<std::mutex> mlock(mutex_); std::unique_lock<std::mutex> mlock(mutex_);
if (!socket_ || !active_) if (!socket_ || !active_)
return false; return false;
boost::asio::streambuf streambuf; asio::streambuf streambuf;
std::ostream request_stream(&streambuf); std::ostream request_stream(&streambuf);
request_stream << message << "\r\n"; request_stream << message << "\r\n";
boost::asio::write(*socket_.get(), streambuf); asio::write(*socket_.get(), streambuf);
// logO << "done: " << message->type << ", size: " << message->size << ", id: " << message->id << ", refers: " << message->refersTo << "\n"; // logO << "done: " << message->type << ", size: " << message->size << ", id: " << message->id << ", refers: " << message->refersTo << "\n";
return true; return true;
} }
@ -112,8 +112,8 @@ void ControlSession::reader()
{ {
while (active_) while (active_)
{ {
boost::asio::streambuf response; asio::streambuf response;
boost::asio::read_until(*socket_, response, "\r\n"); asio::read_until(*socket_, response, "\r\n");
std::string s((istreambuf_iterator<char>(&response)), istreambuf_iterator<char>()); std::string s((istreambuf_iterator<char>(&response)), istreambuf_iterator<char>());
s.resize(s.length() - 2); s.resize(s.length() - 2);
@ -133,7 +133,7 @@ void ControlSession::writer()
{ {
try try
{ {
boost::asio::streambuf streambuf; asio::streambuf streambuf;
std::ostream stream(&streambuf); std::ostream stream(&streambuf);
string message; string message;
while (active_) while (active_)

View file

@ -24,14 +24,14 @@
#include <atomic> #include <atomic>
#include <mutex> #include <mutex>
#include <memory> #include <memory>
#include <boost/asio.hpp> #include <asio.hpp>
#include <condition_variable> #include <condition_variable>
#include <set> #include <set>
#include "message/message.h" #include "message/message.h"
#include "common/queue.h" #include "common/queue.h"
using boost::asio::ip::tcp; using asio::ip::tcp;
class ControlSession; class ControlSession;

View file

@ -127,11 +127,11 @@ int main(int argc, char* argv[])
settings.bufferMs = 400; settings.bufferMs = 400;
settings.sampleFormat = sampleFormat; settings.sampleFormat = sampleFormat;
boost::asio::io_service io_service; asio::io_service io_service;
std::unique_ptr<StreamServer> streamServer(new StreamServer(&io_service, settings)); std::unique_ptr<StreamServer> streamServer(new StreamServer(&io_service, settings));
streamServer->start(); streamServer->start();
auto func = [](boost::asio::io_service* ioservice)->void{ioservice->run();}; auto func = [](asio::io_service* ioservice)->void{ioservice->run();};
std::thread t(func, &io_service); std::thread t(func, &io_service);
while (!g_terminated) while (!g_terminated)

View file

@ -32,7 +32,7 @@ using namespace std;
using json = nlohmann::json; using json = nlohmann::json;
StreamServer::StreamServer(boost::asio::io_service* io_service, const StreamServerSettings& streamServerSettings) : io_service_(io_service), settings_(streamServerSettings), sampleFormat_(streamServerSettings.sampleFormat) StreamServer::StreamServer(asio::io_service* io_service, const StreamServerSettings& streamServerSettings) : io_service_(io_service), settings_(streamServerSettings), sampleFormat_(streamServerSettings.sampleFormat)
{ {
} }

View file

@ -19,7 +19,7 @@
#ifndef STREAM_SERVER_H #ifndef STREAM_SERVER_H
#define STREAM_SERVER_H #define STREAM_SERVER_H
#include <boost/asio.hpp> #include <asio.hpp>
#include <vector> #include <vector>
#include <thread> #include <thread>
#include <memory> #include <memory>
@ -37,7 +37,7 @@
#include "controlServer.h" #include "controlServer.h"
using boost::asio::ip::tcp; using asio::ip::tcp;
typedef std::shared_ptr<tcp::socket> socket_ptr; typedef std::shared_ptr<tcp::socket> socket_ptr;
@ -73,7 +73,7 @@ struct StreamServerSettings
class StreamServer : public MessageReceiver, ControlMessageReceiver, PcmListener class StreamServer : public MessageReceiver, ControlMessageReceiver, PcmListener
{ {
public: public:
StreamServer(boost::asio::io_service* io_service, const StreamServerSettings& streamServerSettings); StreamServer(asio::io_service* io_service, const StreamServerSettings& streamServerSettings);
virtual ~StreamServer(); virtual ~StreamServer();
void start(); void start();
@ -100,7 +100,7 @@ private:
mutable std::mutex mutex_; mutable std::mutex mutex_;
std::unique_ptr<PcmReader> pcmReader_; std::unique_ptr<PcmReader> pcmReader_;
std::set<std::shared_ptr<StreamSession>> sessions_; std::set<std::shared_ptr<StreamSession>> sessions_;
boost::asio::io_service* io_service_; asio::io_service* io_service_;
std::shared_ptr<tcp::acceptor> acceptor_; std::shared_ptr<tcp::acceptor> acceptor_;
StreamServerSettings settings_; StreamServerSettings settings_;

View file

@ -54,10 +54,10 @@ void StreamSession::stop()
setActive(false); setActive(false);
try try
{ {
boost::system::error_code ec; std::error_code ec;
if (socket_) if (socket_)
{ {
socket_->shutdown(boost::asio::ip::tcp::socket::shutdown_both, ec); socket_->shutdown(asio::ip::tcp::socket::shutdown_both, ec);
if (ec) logE << "Error in socket shutdown: " << ec << "\n"; if (ec) logE << "Error in socket shutdown: " << ec << "\n";
socket_->close(ec); socket_->close(ec);
if (ec) logE << "Error in socket close: " << ec << "\n"; if (ec) logE << "Error in socket close: " << ec << "\n";
@ -90,8 +90,8 @@ void StreamSession::socketRead(void* _to, size_t _bytes)
size_t read = 0; size_t read = 0;
do do
{ {
boost::system::error_code error; std::error_code error;
read += socket_->read_some(boost::asio::buffer((char*)_to + read, _bytes - read)); read += socket_->read_some(asio::buffer((char*)_to + read, _bytes - read));
} }
while (active_ && (read < _bytes)); while (active_ && (read < _bytes));
} }
@ -114,12 +114,12 @@ bool StreamSession::send(const msg::BaseMessage* message) const
std::unique_lock<std::mutex> mlock(mutex_); std::unique_lock<std::mutex> mlock(mutex_);
if (!socket_ || !active_) if (!socket_ || !active_)
return false; return false;
boost::asio::streambuf streambuf; asio::streambuf streambuf;
std::ostream stream(&streambuf); std::ostream stream(&streambuf);
tv t; tv t;
message->sent = t; message->sent = t;
message->serialize(stream); message->serialize(stream);
boost::asio::write(*socket_.get(), streambuf); asio::write(*socket_.get(), streambuf);
// logO << "done: " << message->type << ", size: " << message->size << ", id: " << message->id << ", refers: " << message->refersTo << "\n"; // logO << "done: " << message->type << ", size: " << message->size << ", id: " << message->id << ", refers: " << message->refersTo << "\n";
return true; return true;
} }
@ -165,7 +165,7 @@ void StreamSession::writer()
{ {
try try
{ {
boost::asio::streambuf streambuf; asio::streambuf streambuf;
std::ostream stream(&streambuf); std::ostream stream(&streambuf);
shared_ptr<const msg::BaseMessage> message; shared_ptr<const msg::BaseMessage> message;
while (active_) while (active_)

View file

@ -24,14 +24,14 @@
#include <atomic> #include <atomic>
#include <mutex> #include <mutex>
#include <memory> #include <memory>
#include <boost/asio.hpp> #include <asio.hpp>
#include <condition_variable> #include <condition_variable>
#include <set> #include <set>
#include "message/message.h" #include "message/message.h"
#include "common/queue.h" #include "common/queue.h"
using boost::asio::ip::tcp; using asio::ip::tcp;
class StreamSession; class StreamSession;