Kaynağa Gözat

Moved Transport class implementation to cpp file

Paul-Louis Ageneau 3 yıl önce
ebeveyn
işleme
e6a938554e
3 değiştirilmiş dosya ile 102 ekleme ve 51 silme
  1. 2 0
      CMakeLists.txt
  2. 86 0
      src/impl/transport.cpp
  3. 14 51
      src/impl/transport.hpp

+ 2 - 0
CMakeLists.txt

@@ -124,6 +124,7 @@ set(LIBDATACHANNEL_IMPL_SOURCES
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tcpserver.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tcptransport.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tlstransport.cpp
+	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/transport.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/verifiedtlstransport.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/websocket.cpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/websocketserver.cpp
@@ -155,6 +156,7 @@ set(LIBDATACHANNEL_IMPL_HEADERS
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tcpserver.hpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tcptransport.hpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/tlstransport.hpp
+	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/transport.hpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/verifiedtlstransport.hpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/websocket.hpp
 	${CMAKE_CURRENT_SOURCE_DIR}/src/impl/websocketserver.hpp

+ 86 - 0
src/impl/transport.cpp

@@ -0,0 +1,86 @@
+/**
+ * Copyright (c) 2019-2022 Paul-Louis Ageneau
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include "transport.hpp"
+
+namespace rtc::impl {
+
+Transport::Transport(shared_ptr<Transport> lower, state_callback callback)
+    : mLower(std::move(lower)), mStateChangeCallback(std::move(callback)) {}
+
+Transport::~Transport() { stop(); }
+
+void Transport::start() { mStopped = false; }
+
+bool Transport::stop() {
+	if (mStopped.exchange(true))
+		return false;
+
+	// We don't want incoming() to be called by the lower layer anymore
+	if (mLower) {
+		PLOG_VERBOSE << "Unregistering incoming callback";
+		mLower->onRecv(nullptr);
+	}
+	return true;
+}
+
+void Transport::registerIncoming() {
+	if (mLower) {
+		PLOG_VERBOSE << "Registering incoming callback";
+		mLower->onRecv(std::bind(&Transport::incoming, this, std::placeholders::_1));
+	}
+}
+
+Transport::State Transport::state() const { return mState; }
+
+void Transport::onRecv(message_callback callback) { mRecvCallback = std::move(callback); }
+
+void Transport::onStateChange(state_callback callback) {
+	mStateChangeCallback = std::move(callback);
+}
+
+bool Transport::send(message_ptr message) { return outgoing(message); }
+
+void Transport::recv(message_ptr message) {
+	try {
+		mRecvCallback(message);
+	} catch (const std::exception &e) {
+		PLOG_WARNING << e.what();
+	}
+}
+
+void Transport::changeState(State state) {
+	try {
+		if (mState.exchange(state) != state)
+			mStateChangeCallback(state);
+	} catch (const std::exception &e) {
+		PLOG_WARNING << e.what();
+	}
+}
+
+void Transport::incoming(message_ptr message) { recv(message); }
+
+bool Transport::outgoing(message_ptr message) {
+	if (mLower)
+		return mLower->send(message);
+	else
+		return false;
+}
+
+} // namespace rtc::impl
+

+ 14 - 51
src/impl/transport.hpp

@@ -1,5 +1,5 @@
 /**
- * Copyright (c) 2019 Paul-Louis Ageneau
+ * Copyright (c) 2019-2022 Paul-Louis Ageneau
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -34,62 +34,25 @@ public:
 	enum class State { Disconnected, Connecting, Connected, Completed, Failed };
 	using state_callback = std::function<void(State state)>;
 
-	Transport(shared_ptr<Transport> lower = nullptr, state_callback callback = nullptr)
-	    : mLower(std::move(lower)), mStateChangeCallback(std::move(callback)) {}
+	Transport(shared_ptr<Transport> lower = nullptr, state_callback callback = nullptr);
+	virtual ~Transport();
 
-	virtual ~Transport() { stop(); }
+	virtual void start();
+	virtual bool stop();
 
-	virtual void start() { mStopped = false; }
+	void registerIncoming();
+	State state() const;
 
-	virtual bool stop() {
-		if (mStopped.exchange(true))
-			return false;
+	void onRecv(message_callback callback);
+	void onStateChange(state_callback callback);
 
-		// We don't want incoming() to be called by the lower layer anymore
-		if (mLower) {
-			PLOG_VERBOSE << "Unregistering incoming callback";
-			mLower->onRecv(nullptr);
-		}
-		return true;
-	}
-
-	void registerIncoming() {
-		if (mLower) {
-			PLOG_VERBOSE << "Registering incoming callback";
-			mLower->onRecv(std::bind(&Transport::incoming, this, std::placeholders::_1));
-		}
-	}
-
-	void onRecv(message_callback callback) { mRecvCallback = std::move(callback); }
-	void onStateChange(state_callback callback) { mStateChangeCallback = std::move(callback); }
-	State state() const { return mState; }
-
-	virtual bool send(message_ptr message) { return outgoing(message); }
+	virtual bool send(message_ptr message);
 
 protected:
-	void recv(message_ptr message) {
-		try {
-			mRecvCallback(message);
-		} catch (const std::exception &e) {
-			PLOG_WARNING << e.what();
-		}
-	}
-	void changeState(State state) {
-		try {
-			if (mState.exchange(state) != state)
-				mStateChangeCallback(state);
-		} catch (const std::exception &e) {
-			PLOG_WARNING << e.what();
-		}
-	}
-
-	virtual void incoming(message_ptr message) { recv(message); }
-	virtual bool outgoing(message_ptr message) {
-		if (mLower)
-			return mLower->send(message);
-		else
-			return false;
-	}
+	void recv(message_ptr message);
+	void changeState(State state);
+	virtual void incoming(message_ptr message);
+	virtual bool outgoing(message_ptr message);
 
 private:
 	const shared_ptr<Transport> mLower;