summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2025-06-15 14:19:35 +0800
committerlittleblack111 <littleblack11111@gmail.com>2025-06-16 22:22:10 +0800
commit82b6612418908654a61b7947550b796ce4ed57d6 (patch)
tree436dcba871bfad2dcc2bc90a51e59fde86dc33f8
parent08688972ae56b474e2e2fd954c5caaeb1233a1be (diff)
fix(cmake): linking
-rw-r--r--CMakeLists.txt24
-rw-r--r--include/libsock/server/client.hpp5
-rw-r--r--include/libsock/server/server.hpp7
-rw-r--r--include/libsock/types.hpp16
-rw-r--r--src/misc/FileDescriptor.cpp2
-rw-r--r--src/misc/FileDescriptor.hpp5
-rw-r--r--src/server/client.cpp5
-rw-r--r--src/server/clients.cpp4
-rw-r--r--src/server/server.cpp7
9 files changed, 55 insertions, 20 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 727108f..5937aa0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -1,7 +1,7 @@
cmake_minimum_required(VERSION 3.19)
project(
- libsock
+ sock
VERSION 1.0.0
DESCRIPTION "Minimal C++ socket library")
@@ -36,17 +36,23 @@ else()
message(STATUS "Configuring libsock in Release")
endif()
-file(GLOB_RECURSE SRCFILES CONFIGURE_DEPENDS "src/*.cpp" "include/*.hpp")
+# Separate source files and headers
+file(GLOB_RECURSE PRIVATE_SOURCES CONFIGURE_DEPENDS "src/*.cpp")
+file(GLOB_RECURSE PRIVATE_HEADERS CONFIGURE_DEPENDS "src/*.hpp")
file(GLOB_RECURSE PUBLIC_HEADERS CONFIGURE_DEPENDS "include/*.hpp")
+# Create list of all source files (private sources + public headers)
+set(ALL_SOURCES ${PRIVATE_SOURCES} ${PUBLIC_HEADERS})
+
find_package(PkgConfig REQUIRED)
-add_library(libsock SHARED ${SRCFILES})
+add_library(sock SHARED ${ALL_SOURCES})
target_include_directories(
- libsock
+ sock
PUBLIC "./include"
- PRIVATE "./src")
-set_target_properties(libsock PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1)
+ PRIVATE "./src"
+ PRIVATE "./src/misc") # Add this so FileDescriptor.hpp can be found
+set_target_properties(sock PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1)
# tests add_custom_target(tests)
#
@@ -61,7 +67,9 @@ set_target_properties(libsock PROPERTIES VERSION ${PROJECT_VERSION} SOVERSION 1)
# libsock_connection "connection") add_dependencies(tests libsock_connection)
#
# Installation
-install(TARGETS libsock)
-install(DIRECTORY "include/libsock" DESTINATION ${CMAKE_INSTALL_INCLUDEDIR})
+install(TARGETS sock)
+install(DIRECTORY "include/libsock"
+ DESTINATION ${CMAKE_INSTALL_INCLUDEDIR}
+ PATTERN "misc" EXCLUDE)
install(FILES ${CMAKE_BINARY_DIR}/libsock.pc
DESTINATION ${CMAKE_INSTALL_LIBDIR}/pkgconfig)
diff --git a/include/libsock/server/client.hpp b/include/libsock/server/client.hpp
index b86b440..ec5c6bc 100644
--- a/include/libsock/server/client.hpp
+++ b/include/libsock/server/client.hpp
@@ -1,7 +1,6 @@
#pragma once
-#include "misc/FileDescriptor.hpp"
-#include "misc/memory.hpp"
+#include "../types.hpp"
#include <format>
#include <functional>
#include <netinet/in.h>
@@ -51,7 +50,7 @@ class Client {
private:
WP<Client> self;
- SP<CFileDescriptor> m_sockfd;
+ SP<LibSock::CFileDescriptor> m_sockfd;
sockaddr_in m_addr;
socklen_t m_addrLen = sizeof(m_addr);
std::string m_name;
diff --git a/include/libsock/server/server.hpp b/include/libsock/server/server.hpp
index c97c945..d831fd8 100644
--- a/include/libsock/server/server.hpp
+++ b/include/libsock/server/server.hpp
@@ -1,6 +1,5 @@
#pragma once
-#include "misc/FileDescriptor.hpp"
-#include "misc/memory.hpp"
+#include "../types.hpp"
#include <mutex>
#include <netinet/in.h>
@@ -11,10 +10,10 @@ class Server {
public:
Server(uint16_t port, bool reuseaddr = true, bool keepalive = false);
~Server();
- SP<CFileDescriptor> getSocket() const;
+ SP<LibSock::CFileDescriptor> getSocket() const;
private:
- SP<CFileDescriptor> m_sockfd;
+ SP<LibSock::CFileDescriptor> m_sockfd;
sockaddr_in m_addr;
uint16_t m_port;
diff --git a/include/libsock/types.hpp b/include/libsock/types.hpp
new file mode 100644
index 0000000..f8116ab
--- /dev/null
+++ b/include/libsock/types.hpp
@@ -0,0 +1,16 @@
+#pragma once
+
+#include <memory>
+
+template <typename T>
+using SP = std::shared_ptr<T>;
+
+template <typename T>
+using WP = std::weak_ptr<T>;
+
+template <typename T>
+using UP = std::unique_ptr<T>;
+
+namespace LibSock {
+class CFileDescriptor;
+}
diff --git a/src/misc/FileDescriptor.cpp b/src/misc/FileDescriptor.cpp
index 92505f5..59fa688 100644
--- a/src/misc/FileDescriptor.cpp
+++ b/src/misc/FileDescriptor.cpp
@@ -5,6 +5,8 @@
#include <unistd.h>
#include <utility>
+using namespace LibSock;
+
CFileDescriptor::CFileDescriptor(int const fd)
: m_fd(fd) {}
diff --git a/src/misc/FileDescriptor.hpp b/src/misc/FileDescriptor.hpp
index 75aeb73..dd9f8fe 100644
--- a/src/misc/FileDescriptor.hpp
+++ b/src/misc/FileDescriptor.hpp
@@ -1,6 +1,9 @@
#pragma once
#include <fcntl.h>
+
+namespace LibSock {
+
class CFileDescriptor {
public:
CFileDescriptor() = default;
@@ -33,3 +36,5 @@ class CFileDescriptor {
private:
int m_fd = -1;
};
+
+} // namespace LibSock
diff --git a/src/server/client.cpp b/src/server/client.cpp
index f99cb97..9efad18 100644
--- a/src/server/client.cpp
+++ b/src/server/client.cpp
@@ -1,5 +1,6 @@
#include "libsock/server/client.hpp"
-#include "../misc/memory.hpp"
+#include "libsock/types.hpp"
+#include "misc/FileDescriptor.hpp"
// #include "chatManager.hpp"
#include "libsock/server/server.hpp"
// #include "sessionManager.hpp"
@@ -14,7 +15,7 @@
using namespace LibSock::Client;
Client::Client(bool track, bool oneShot) : m_track(track), m_oneShot(oneShot) {
- m_sockfd = std::make_shared<CFileDescriptor>(
+ m_sockfd = std::make_shared<LibSock::CFileDescriptor>(
accept(LibSock::Server::pServer->getSocket()->get(),
reinterpret_cast<sockaddr *>(&m_addr),
&m_addrLen)); // if this is in the init list, it will run before
diff --git a/src/server/clients.cpp b/src/server/clients.cpp
index 0327ea3..e42579c 100644
--- a/src/server/clients.cpp
+++ b/src/server/clients.cpp
@@ -99,6 +99,10 @@ std::vector<SP<Client>> Clients::getClients() const {
return m_vClients | std::views::transform([](const auto &s) { return s.second; }) | std::ranges::to<std::vector>();
}
+std::vector<SData> Clients::getDatas() const {
+ return m_vDatas;
+}
+
void Clients::kick(WP<Client> clientWeak, const bool kill, const std::string &reason) {
auto client = clientWeak.lock();
if (!client)
diff --git a/src/server/server.cpp b/src/server/server.cpp
index 0692a74..2e07809 100644
--- a/src/server/server.cpp
+++ b/src/server/server.cpp
@@ -1,5 +1,6 @@
#include "libsock/server/server.hpp"
-#include "misc/memory.hpp"
+#include "libsock/types.hpp"
+#include "misc/FileDescriptor.hpp"
#include <cstring>
#include <mutex>
#include <sys/socket.h>
@@ -8,7 +9,7 @@ using namespace LibSock::Server;
Server::Server(uint16_t port, bool reuseaddr, bool keepalive)
: m_sockfd(
- std::make_shared<CFileDescriptor>(socket(AF_INET, SOCK_STREAM, 0))) {
+ std::make_shared<LibSock::CFileDescriptor>(socket(AF_INET, SOCK_STREAM, 0))) {
std::lock_guard<std::mutex> lk(m_mutex);
if (!m_sockfd->isValid() || m_sockfd->get() < 0)
throw std::runtime_error("Failed to create socket");
@@ -35,4 +36,4 @@ Server::Server(uint16_t port, bool reuseaddr, bool keepalive)
Server::~Server() { m_sockfd.reset(); }
-std::shared_ptr<CFileDescriptor> Server::getSocket() const { return m_sockfd; }
+std::shared_ptr<LibSock::CFileDescriptor> Server::getSocket() const { return m_sockfd; }