diff --git a/TODO b/TODO
new file mode 100644
index 0000000..d91ec20
--- /dev/null
+++ b/TODO
@@ -0,0 +1,2 @@
+initialization code for other operating systems - currently VoidNet only supports windows
+initialization code for tcp client for other operating systems - "
\ No newline at end of file
diff --git a/VoidNet/VoidNet.sln b/VoidNet/VoidNet.sln
deleted file mode 100644
index e1a04a4..0000000
--- a/VoidNet/VoidNet.sln
+++ /dev/null
@@ -1,28 +0,0 @@
-
-Microsoft Visual Studio Solution File, Format Version 12.00
-# Visual Studio 14
-VisualStudioVersion = 14.0.24720.0
-MinimumVisualStudioVersion = 10.0.40219.1
-Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoidNet", "VoidNet\VoidNet.vcxproj", "{DC4D9247-92B6-4C52-B47C-41C34CF5D611}"
-EndProject
-Global
- GlobalSection(SolutionConfigurationPlatforms) = preSolution
- Debug|x64 = Debug|x64
- Debug|x86 = Debug|x86
- Release|x64 = Release|x64
- Release|x86 = Release|x86
- EndGlobalSection
- GlobalSection(ProjectConfigurationPlatforms) = postSolution
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Debug|x64.ActiveCfg = Debug|x64
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Debug|x64.Build.0 = Debug|x64
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Debug|x86.ActiveCfg = Debug|Win32
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Debug|x86.Build.0 = Debug|Win32
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Release|x64.ActiveCfg = Release|x64
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Release|x64.Build.0 = Release|x64
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Release|x86.ActiveCfg = Release|Win32
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}.Release|x86.Build.0 = Release|Win32
- EndGlobalSection
- GlobalSection(SolutionProperties) = preSolution
- HideSolutionNode = FALSE
- EndGlobalSection
-EndGlobal
diff --git a/VoidNet/VoidNet/VoidNet.vcxproj.filters b/VoidNet/VoidNet/VoidNet.vcxproj.filters
deleted file mode 100644
index 9cd8510..0000000
--- a/VoidNet/VoidNet/VoidNet.vcxproj.filters
+++ /dev/null
@@ -1,2 +0,0 @@
-
-
\ No newline at end of file
diff --git a/VoidNetVS/VoidNetVS.sln b/VoidNetVS/VoidNetVS.sln
new file mode 100644
index 0000000..d18a210
--- /dev/null
+++ b/VoidNetVS/VoidNetVS.sln
@@ -0,0 +1,28 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+# Visual Studio 14
+VisualStudioVersion = 14.0.25123.0
+MinimumVisualStudioVersion = 10.0.40219.1
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "VoidNetVS", "VoidNetVS\VoidNetVS.vcxproj", "{5172321E-CCB0-4A77-9F3D-FAAF0084F434}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|x64 = Debug|x64
+ Debug|x86 = Debug|x86
+ Release|x64 = Release|x64
+ Release|x86 = Release|x86
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Debug|x64.ActiveCfg = Debug|x64
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Debug|x64.Build.0 = Debug|x64
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Debug|x86.ActiveCfg = Debug|Win32
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Debug|x86.Build.0 = Debug|Win32
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Release|x64.ActiveCfg = Release|x64
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Release|x64.Build.0 = Release|x64
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Release|x86.ActiveCfg = Release|Win32
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}.Release|x86.Build.0 = Release|Win32
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/VoidNetVS/VoidNetVS/Debug/VoidNetVS.tlog/VoidNetVS.lastbuildstate b/VoidNetVS/VoidNetVS/Debug/VoidNetVS.tlog/VoidNetVS.lastbuildstate
new file mode 100644
index 0000000..c34c192
--- /dev/null
+++ b/VoidNetVS/VoidNetVS/Debug/VoidNetVS.tlog/VoidNetVS.lastbuildstate
@@ -0,0 +1,2 @@
+#TargetFrameworkVersion=v4.0:PlatformToolSet=v140:EnableManagedIncrementalBuild=false:VCToolArchitecture=Native32Bit:WindowsTargetPlatformVersion=8.1
+Debug|Win32|F:\VoidNet\VoidNetVS\|
diff --git a/VoidNet/VoidNet/VoidNet.vcxproj b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
similarity index 79%
rename from VoidNet/VoidNet/VoidNet.vcxproj
rename to VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
index f57844b..ba417c9 100644
--- a/VoidNet/VoidNet/VoidNet.vcxproj
+++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj
@@ -18,14 +18,34 @@
x64
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
- {DC4D9247-92B6-4C52-B47C-41C34CF5D611}
- VoidNet
+ {5172321E-CCB0-4A77-9F3D-FAAF0084F434}
+ VoidNetVS
8.1
- Application
+ StaticLibrary
true
v140
MultiByte
@@ -74,6 +94,7 @@
Level3
Disabled
true
+ F:\VoidNet\include
@@ -90,14 +111,16 @@
true
true
true
+ AnySuitable
+ Speed
+ MultiThreaded
+ F:\VoidNet\include;F:\VoidNet\src
true
true
+ false
-
- ws2_32.lib;%(AdditionalDependencies)
-
diff --git a/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters
new file mode 100644
index 0000000..13b2038
--- /dev/null
+++ b/VoidNetVS/VoidNetVS/VoidNetVS.vcxproj.filters
@@ -0,0 +1,57 @@
+
+
+
+
+ {a0077c03-a272-4e35-99ef-6011b4489da3}
+
+
+ {4c99f44e-3ff9-4d5c-a3a1-27d1f02b0b7f}
+
+
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+ include
+
+
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+ src
+
+
+
+
+
+
\ No newline at end of file
diff --git a/include/Config.hpp b/include/Config.hpp
new file mode 100644
index 0000000..5e6c3a7
--- /dev/null
+++ b/include/Config.hpp
@@ -0,0 +1,17 @@
+#ifndef CONFIG_HPP
+#define CONFIG_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+struct Config
+{
+ static void SetUsingConsole(bool value);
+ static bool GetUsingConsole();
+
+private:
+ static bool using_console;
+};
+
+#endif
\ No newline at end of file
diff --git a/include/Defs.hpp b/include/Defs.hpp
new file mode 100644
index 0000000..ac3de2d
--- /dev/null
+++ b/include/Defs.hpp
@@ -0,0 +1,188 @@
+#ifndef DEFS_HPP
+#define DEFS_HPP
+
+#ifdef _MSC_VER
+ #pragma once
+#endif
+
+#ifdef _MSC_VER
+#define WIN32_LEAN_AND_MEAN
+#define _WINSOCKAPI_
+#include
+#include
+#include
+
+#pragma comment(lib, "ws2_32.lib")
+
+WSADATA wsa_data;
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef _WIN64
+typedef signed __int64 int_ptr;
+typedef unsigned __int64 uint_ptr;
+#else
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+#endif // win64
+
+#elif defined(__GNUC__) || defined(__clang__)
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+
+#ifdef _WIN64
+typedef signed long long int_ptr, int64;
+typedef unsigned long long uint_ptr, uint64;
+#else
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+
+#ifdef __LP64__
+typedef signed long int64;
+typedef unsigned long uint64;
+#else
+typedef signed long long int64;
+typedef unsigned long long uint64;
+#endif // __LP64__
+
+#endif // win64
+
+#elif defined(__DECCXX)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed __int64 int64;
+typedef unsigned __int64 uint64;
+
+#ifdef __VMS
+#ifdef __32BITS
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+#else
+typedef signed __int64 int_ptr;
+typedef unsigned __int64 uint_ptr;
+#endif // __32BITS
+#else
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr
+#endif // __VMS
+
+#elif defined(__HP_aCC)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+
+#ifdef __LP64__
+typedef signed long int64;
+typedef unsigned long uint64;
+#else
+typedef signed long long int64;
+typedef unsigned long long uint64;
+#endif // __LP64__
+
+#elif defined(__SUNPRO_CC)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed long int_ptr;
+typedef unsigned long uint_otr
+
+#ifdef __sparcv9
+typedef signed long int64;
+typedef unsigned long uint64;
+#else
+typedef signed long long int64;
+typedef unsigned long long uint64;
+#endif // __sparcv9
+
+#elif defined(__IBMCPP__)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+
+#ifdef __64BIT__
+typedef signed long int64;
+typedef unsigned long uint64;
+#else
+typedef signed long long int64;
+typedef unsigned long long uint64;
+#endif // __64BIT__
+
+#elif defined(__sgi)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int int32;
+typedef unsigned int uint32;
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+
+#if _MIPS_SZLONG == 64
+typedef signed long int64;
+typedef unsigned long uint64;
+#else
+typedef signed long long int64;
+typedef unsigned long long uint64;
+#endif // _MIPS_SZLONG
+
+#elif defined(_DIAB_TOOL)
+
+typedef signed char int8, sbyte;
+typedef unsigned char uint8, byte;
+typedef signed short int16;
+typedef unsigned short uint16;
+typedef signed int in32;
+typedef unsigned int uint32;
+typedef signed long int_ptr;
+typedef unsigned long uint_ptr;
+typedef signed long long int64;
+typedef unsigned long long uint64;
+
+#endif // compiler data type defenitions
+
+const uint16 default_port = 60250;
+
+enum VoidCode
+{
+ VOID_SUCCESS,
+ VOID_WSA_INIT_FAILED,
+ VOID_TCP_INIT_FAILED,
+ VOID_INVALID_IP_ADDRESS,
+ VOID_INVALID_PORT,
+ VOID_COULDNT_CONNECT,
+};
+
+#endif // DEFS_HPP
\ No newline at end of file
diff --git a/include/Init.hpp b/include/Init.hpp
new file mode 100644
index 0000000..5c0b3da
--- /dev/null
+++ b/include/Init.hpp
@@ -0,0 +1,12 @@
+#ifndef INIT_HPP
+#define INIT_HPP
+
+#ifdef _MSC_VER
+ #pragma once
+#endif
+
+#include "Defs.hpp"
+
+VoidCode initialize();
+
+#endif
\ No newline at end of file
diff --git a/include/NetworkMessage.hpp b/include/NetworkMessage.hpp
new file mode 100644
index 0000000..57ebba5
--- /dev/null
+++ b/include/NetworkMessage.hpp
@@ -0,0 +1,16 @@
+#ifndef NETWORK_MESSAGE_HPP
+#define NETWORK_MESSAGE_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+class NetworkMessage
+{
+public:
+ NetworkMessage();
+
+private:
+};
+
+#endif
\ No newline at end of file
diff --git a/include/TcpClient.hpp b/include/TcpClient.hpp
new file mode 100644
index 0000000..4a9ed6f
--- /dev/null
+++ b/include/TcpClient.hpp
@@ -0,0 +1,47 @@
+#ifndef TCP_CLIENT_HPP
+#define TCP_CLIENT_HPP
+
+#include "Defs.hpp"
+#include "NetworkMessage.hpp"
+
+#include
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+class TcpClient
+{
+public:
+ TcpClient();
+ TcpClient(const std::string &ip, uint16 port = default_port);
+ ~TcpClient();
+
+ const std::string &GetIP();
+ void SetIP(const std::string &ip);
+
+ uint16 GetPort();
+ void SetPort(uint16 port);
+
+ VoidCode Connect(); // this function is used if Initialize was not called
+
+ char *ReceiveDataArray();
+ const NetworkMessage &ReceiveData();
+ bool SendData(const NetworkMessage &message);
+
+private:
+ VoidCode Initialize(const std::string &ip, uint16 port = default_port);
+
+ std::string ip;
+ uint16 port = 0;
+ bool initialized;
+
+#ifdef _MSC_VER
+ SOCKET socket = INVALID_SOCKET;
+ struct addrinfo *result = nullptr;
+ struct addrinfo *ptr = nullptr;
+ struct addrinfo hints;
+#endif
+};
+
+#endif
\ No newline at end of file
diff --git a/include/Utility.hpp b/include/Utility.hpp
new file mode 100644
index 0000000..ac55726
--- /dev/null
+++ b/include/Utility.hpp
@@ -0,0 +1,14 @@
+#ifndef UTILITY_HPP
+#define UTILITY_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+struct Utility
+{
+ static void Delete(void *pointer);
+ static void DeleteArray(void *pointer);
+};
+
+#endif
\ No newline at end of file
diff --git a/include/VoidNet.hpp b/include/VoidNet.hpp
new file mode 100644
index 0000000..ced8662
--- /dev/null
+++ b/include/VoidNet.hpp
@@ -0,0 +1,11 @@
+#ifndef VOID_NET_HPP
+#define VOID_NET_HPP
+
+#ifdef _MSC_VER
+#pragma once
+#endif
+
+#include
+#include
+
+#endif
diff --git a/src/Config.cpp b/src/Config.cpp
new file mode 100644
index 0000000..2d4dd36
--- /dev/null
+++ b/src/Config.cpp
@@ -0,0 +1,11 @@
+#include "Config.hpp"
+
+void Config::SetUsingConsole(bool value)
+{
+ using_console = value;
+}
+
+bool Config::GetUsingConsole()
+{
+ return using_console;
+}
diff --git a/src/Init.cpp b/src/Init.cpp
new file mode 100644
index 0000000..c022a35
--- /dev/null
+++ b/src/Init.cpp
@@ -0,0 +1,3 @@
+#ifdef _MSC_VER
+#include "InitWindows.cpp"
+#endif
\ No newline at end of file
diff --git a/src/InitWindows.cpp b/src/InitWindows.cpp
new file mode 100644
index 0000000..69de6bf
--- /dev/null
+++ b/src/InitWindows.cpp
@@ -0,0 +1,16 @@
+#include "Init.hpp"
+#include "Config.hpp"
+
+#include
+
+VoidCode initialize()
+{
+ uint16 code = WSAStartup(MAKEWORD(2, 2), &wsa_data);
+ if (code != 0)
+ {
+ if (Config::GetUsingConsole())
+ std::cerr << code << std::endl; // display some more information too
+ return VOID_WSA_INIT_FAILED;
+ }
+ return VOID_SUCCESS;
+}
\ No newline at end of file
diff --git a/src/TcpClient.cpp b/src/TcpClient.cpp
new file mode 100644
index 0000000..2b86fe3
--- /dev/null
+++ b/src/TcpClient.cpp
@@ -0,0 +1,3 @@
+#ifdef _MSC_VER
+#include "TcpClientWindows.cpp"
+#endif
\ No newline at end of file
diff --git a/src/TcpClientWindows.cpp b/src/TcpClientWindows.cpp
new file mode 100644
index 0000000..7e9fc65
--- /dev/null
+++ b/src/TcpClientWindows.cpp
@@ -0,0 +1,122 @@
+#include "TcpClient.hpp"
+#include "Utility.hpp"
+#include "Config.hpp"
+
+#include
+
+VoidCode TcpClient::Initialize(const std::string &ip, uint16 port)
+{
+ if (ip.size() == 0 || std::count(ip.begin(), ip.end(), '.') != 4)
+ return VOID_INVALID_IP_ADDRESS;
+ if (port == 0)
+ return VOID_INVALID_PORT;
+ ZeroMemory(&hints, sizeof(hints));
+ hints.ai_family = AF_UNSPEC;
+ hints.ai_socktype = SOCK_STREAM;
+ hints.ai_protocol = IPPROTO_TCP;
+
+ uint16 code = getaddrinfo(ip.c_str(), std::to_string(port).c_str(), &hints, &result);
+ if (code != 0)
+ {
+ if (Config::GetUsingConsole())
+ std::cerr << code << std::endl; // display more info
+ WSACleanup();
+ return VOID_TCP_INIT_FAILED;
+ }
+
+ ptr = result;
+ socket = ::socket(ptr->ai_family, ptr->ai_socktype, ptr->ai_protocol);
+
+ if (socket == INVALID_SOCKET)
+ {
+ if (Config::GetUsingConsole())
+ std::cerr << WSAGetLastError() << std::endl; // display more info
+ freeaddrinfo(result);
+ WSACleanup();
+ return VOID_TCP_INIT_FAILED;
+ }
+
+ initialized = true;
+ return VOID_SUCCESS;
+}
+
+TcpClient::TcpClient()
+{
+}
+
+TcpClient::TcpClient(const std::string &ip, uint16 port) :
+ ip(ip), port(port)
+{
+}
+
+TcpClient::~TcpClient()
+{
+ freeaddrinfo(result);
+ WSACleanup();
+ Utility::Delete(result);
+ Utility::Delete(ptr);
+}
+
+const std::string & TcpClient::GetIP()
+{
+ return ip;
+}
+
+void TcpClient::SetIP(const std::string & ip)
+{
+ this->ip = ip;
+}
+
+uint16 TcpClient::GetPort()
+{
+ return port;
+}
+
+void TcpClient::SetPort(uint16 port)
+{
+ this->port = port;
+}
+
+VoidCode TcpClient::Connect()
+{
+ if (!initialized)
+ {
+ if (ip.size() == 0 || std::count(ip.begin(), ip.end(), '.') != 4)
+ return VOID_INVALID_IP_ADDRESS;
+ if (port == 0)
+ return VOID_INVALID_PORT;
+ VoidCode code = Initialize(ip, port);
+ if (code != VOID_SUCCESS)
+ return code;
+ }
+ uint16 connect_code = ::connect(socket, ptr->ai_addr, ptr->ai_addrlen);
+ if (connect_code == SOCKET_ERROR)
+ return VOID_COULDNT_CONNECT;
+}
+
+char *TcpClient::ReceiveDataArray()
+{
+ char *header = new char[4]();
+
+ int remote_buffer_size;
+ do
+ {
+ remote_buffer_size = recv(socket, header, 4, 0);
+
+ if (WSAGetLastError() != 0)
+ {
+ // there was a problem receiving
+ }
+ }
+ while (remote_buffer_size > 0);
+}
+
+const NetworkMessage &TcpClient::ReceiveData()
+{
+
+}
+
+bool TcpClient::SendData(const NetworkMessage &message)
+{
+ return false;
+}
diff --git a/src/Utility.cpp b/src/Utility.cpp
new file mode 100644
index 0000000..dd56227
--- /dev/null
+++ b/src/Utility.cpp
@@ -0,0 +1,17 @@
+#include "Utility.hpp"
+
+void Utility::Delete(void *pointer)
+{
+ if (pointer == nullptr)
+ return;
+ delete pointer;
+ pointer = nullptr;
+}
+
+void Utility::DeleteArray(void *pointer)
+{
+ if (pointer == nullptr)
+ return;
+ delete[] pointer;
+ pointer = nullptr;
+}
\ No newline at end of file