diff --git a/server/etc/snapserver.conf b/server/etc/snapserver.conf index 991da8d7..cbb4977f 100644 --- a/server/etc/snapserver.conf +++ b/server/etc/snapserver.conf @@ -82,8 +82,12 @@ # stream URI of the PCM input stream, can be configured multiple times # Format: TYPE://host/path?name=NAME[&codec=CODEC][&sampleformat=SAMPLEFORMAT] +# Available types are: +# pipe: pipe:///?name= +# tcp server: tcp://:?name=[&mode=server] +# tcp client: tcp://:?name=&mode=client stream = pipe:///tmp/snapfifo?name=default -#stream = experimental.tcp://127.0.0.1?name=mopidy_tcp +#stream = tcp://127.0.0.1?name=mopidy_tcp # Default sample format #sampleformat = 48000:16:2 diff --git a/server/streamreader/asio_stream.hpp b/server/streamreader/asio_stream.hpp index be153c9a..349250b5 100644 --- a/server/streamreader/asio_stream.hpp +++ b/server/streamreader/asio_stream.hpp @@ -96,6 +96,7 @@ template void AsioStream::start() { encoder_->init(this, sampleFormat_); + active_ = true; check_state(); connect(); } @@ -104,6 +105,7 @@ void AsioStream::start() template void AsioStream::stop() { + active_ = false; timer_.cancel(); idle_timer_.cancel(); disconnect(); diff --git a/server/streamreader/stream_manager.cpp b/server/streamreader/stream_manager.cpp index 09fd5f2b..424e20ca 100644 --- a/server/streamreader/stream_manager.cpp +++ b/server/streamreader/stream_manager.cpp @@ -79,7 +79,7 @@ PcmStreamPtr StreamManager::addStream(const std::string& uri) { stream = make_shared(pcmListener_, ioc_, streamUri); } - else if (streamUri.scheme == "experimental.tcp") + else if (streamUri.scheme == "tcp") { stream = make_shared(pcmListener_, ioc_, streamUri); } diff --git a/server/streamreader/tcp_stream.cpp b/server/streamreader/tcp_stream.cpp index f0479744..72f0dcdc 100644 --- a/server/streamreader/tcp_stream.cpp +++ b/server/streamreader/tcp_stream.cpp @@ -64,6 +64,9 @@ TcpStream::TcpStream(PcmListener* pcmListener, boost::asio::io_context& ioc, con void TcpStream::connect() { + if (!active_) + return; + auto self = shared_from_this(); if (is_server_) @@ -109,4 +112,7 @@ void TcpStream::disconnect() { if (stream_) stream_->close(); + if (acceptor_) + acceptor_->cancel(); + reconnect_timer_.cancel(); }