Jelajahi Sumber

Add socket initialization

Patrick-Christopher Mattulat 2 tahun lalu
induk
melakukan
b202c258ab

+ 10 - 2
include/ls_std/network/socket/Socket.hpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-11-16
+ * Changed:         2022-11-17
  *
  * */
 
@@ -23,9 +23,17 @@ namespace ls::std::network
       explicit Socket(const ls::std::network::SocketParameter& _parameter);
       ~Socket() override = default;
 
+      [[nodiscard]] bool isInitialized() const;
+
     private:
 
-      ls::std::network::SocketParameter parameter;
+      bool initialized{};
+      ls::std::network::SocketParameter parameter{};
+
+      [[nodiscard]] static bool _init(const ls::std::network::SocketParameter& _parameter);
+      #if defined(unix) || defined(__APPLE__)
+      [[nodiscard]] static bool _initUnix(const ls::std::network::SocketParameter& _parameter);
+      #endif
   };
 }
 

+ 33 - 4
source/ls_std/network/socket/Socket.cpp

@@ -3,12 +3,41 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2022-11-16
- * Changed:         2022-11-16
+ * Changed:         2022-11-17
  *
  * */
 
 #include <ls_std/network/socket/Socket.hpp>
+#if defined(unix) || defined(__APPLE__)
+#include <sys/socket.h>
+#endif
+#include <ls_std/network/core/ProtocolFamilyMapper.hpp>
+#include <ls_std/network/core/ProtocolMapper.hpp>
 
-ls::std::network::Socket::Socket(const ls::std::network::SocketParameter &_parameter) : ls::std::core::Class("Socket"),
-                                                                                        parameter(_parameter)
-{}
+ls::std::network::Socket::Socket(const ls::std::network::SocketParameter& _parameter) : ls::std::core::Class("Socket"),
+parameter(_parameter)
+{
+  this->initialized = ls::std::network::Socket::_initUnix(_parameter);
+}
+
+bool ls::std::network::Socket::isInitialized() const
+{
+  return this->initialized;
+}
+
+bool ls::std::network::Socket::_init(const ls::std::network::SocketParameter &_parameter)
+{
+  #if defined(unix) || defined(__APPLE__)
+  return ls::std::network::Socket::_initUnix(_parameter);
+  #endif
+}
+
+#if defined(unix) || defined(__APPLE__)
+bool ls::std::network::Socket::_initUnix(const ls::std::network::SocketParameter &_parameter)
+{
+  ls::std::network::ProtocolFamily protocolFamily = ls::std::network::ProtocolFamilyMapper::from(_parameter.protocolFamilyType);
+  ls::std::network::Protocol protocol = ls::std::network::ProtocolMapper::from(_parameter.socketAddress.protocolType);
+
+  return socket(protocolFamily.unixDomain, protocol.unixProtocol, 0);
+}
+#endif

+ 20 - 2
test/cases/network/socket/SocketTest.cpp

@@ -3,7 +3,7 @@
  * Company:         Lynar Studios
  * E-Mail:          webmaster@lynarstudios.com
  * Created:         2020-11-16
- * Changed:         2022-11-16
+ * Changed:         2022-11-17
  *
  * */
 
@@ -26,10 +26,28 @@ namespace
 
       void TearDown() override
       {}
+
+      static SocketParameter generateSocketParameter()
+      {
+        SocketParameter socketParameter{};
+        socketParameter.protocolFamilyType = ProtocolFamilyType::PROTOCOL_FAMILY_TYPE_IPV4;
+
+        SocketAddress socketAddress{};
+        socketAddress.protocolType = ProtocolType::PROTOCOL_TYPE_TCP;
+        socketParameter.socketAddress = socketAddress;
+
+        return socketParameter;
+      }
   };
 
   TEST_F(SocketTest, getClassName)
   {
-    ASSERT_STREQ("Socket", Socket{SocketParameter{}}.getClassName().c_str());
+    ASSERT_STREQ("Socket", Socket{generateSocketParameter()}.getClassName().c_str());
+  }
+
+  TEST_F(SocketTest, isInitialized)
+  {
+    Socket socket{generateSocketParameter()};
+    ASSERT_TRUE(socket.isInitialized());
   }
 }