diff --git a/.gitmodules b/.gitmodules
index 3167aa9..1749696 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -4,3 +4,6 @@
[submodule "ext/glm"]
path = ext/glm
url = https://github.com/g-truc/glm.git
+[submodule "ext/pthreads4w-code"]
+ path = ext/pthreads4w-code
+ url = https://git.code.sf.net/p/pthreads4w/code
diff --git a/LivePlotter.vcxproj b/LivePlotter.vcxproj
index d42a03b..e443c38 100644
--- a/LivePlotter.vcxproj
+++ b/LivePlotter.vcxproj
@@ -71,8 +71,8 @@
- $(SolutionDir)ext\glfw\build\src\Debug;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
- $(SolutionDir)ext\glm;$(SolutionDir)ext\glfw\include;$(SolutionDir)inc;$(IncludePath)
+ $(SolutionDir)ext\pthreads4w-code\build\Debug;$(SolutionDir)ext\glfw\build\src\Debug;$(VC_LibraryPath_x64);$(WindowsSDK_LibraryPath_x64)
+ $(SolutionDir)ext\pthreads4w-code;$(SolutionDir)ext\glm;$(SolutionDir)ext\glfw\include;$(SolutionDir)inc;$(IncludePath)
$(SolutionDir)bin\$(Platform)\$(Configuration)\
$(SolutionDir)obj\$(Platform)\$(Configuration)\
$(SolutionDir)src;$(SourcePath)
@@ -116,7 +116,7 @@
Console
true
- glfw3.lib;opengl32.lib;%(AdditionalDependencies)
+ pthreadVC3d.lib;glfw3.lib;opengl32.lib;%(AdditionalDependencies)
@@ -140,9 +140,10 @@
+
-
\ No newline at end of file
+
diff --git a/compile_commands.json b/compile_commands.json
index 490054d..58d3b2f 100644
--- a/compile_commands.json
+++ b/compile_commands.json
@@ -1,31 +1,37 @@
[
{
- "directory": "C:/Users/seth/Documents/repos/LivePlotter/",
- "command": "\"C:/Users/seth/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/seth/Documents/repos/LivePlotter/src/main.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/atlmfc/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/cppwinrt\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/inc\"",
- "file": "C:/Users/seth/Documents/repos/LivePlotter/src/main.cpp"
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/sethh/Documents/repos/LivePlotter/src/shaders.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/shaders.cpp"
}
,
{
- "directory": "C:/Users/seth/Documents/repos/LivePlotter/",
- "command": "\"C:/Users/seth/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/seth/Documents/repos/LivePlotter/src/shaders.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/atlmfc/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/cppwinrt\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/inc\"",
- "file": "C:/Users/seth/Documents/repos/LivePlotter/src/shaders.cpp"
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/sethh/Documents/repos/LivePlotter/src/main.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/main.cpp"
}
,
{
- "directory": "C:/Users/seth/Documents/repos/LivePlotter/",
- "command": "\"C:/Users/seth/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c \"C:/Users/seth/Documents/repos/LivePlotter/src/glad.c\" -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/atlmfc/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/cppwinrt\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/inc\"",
- "file": "C:/Users/seth/Documents/repos/LivePlotter/src/glad.c"
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/sethh/Documents/repos/LivePlotter/src/util.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/util.cpp"
}
,
{
- "directory": "C:/Users/seth/Documents/repos/LivePlotter/",
- "command": "\"C:/Users/seth/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/seth/Documents/repos/LivePlotter/src/util.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/atlmfc/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/cppwinrt\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/inc\"",
- "file": "C:/Users/seth/Documents/repos/LivePlotter/src/util.cpp"
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/sethh/Documents/repos/LivePlotter/src/tcp_server.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/tcp_server.cpp"
}
,
{
- "directory": "C:/Users/seth/Documents/repos/LivePlotter/",
- "command": "\"C:/Users/seth/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/seth/Documents/repos/LivePlotter/src/body.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/atlmfc/include\" -isystem\"C:/Program Files (x86)/Microsoft Visual Studio/2022/BuildTools/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.26100.0/cppwinrt\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/seth/Documents/repos/LivePlotter/inc\"",
- "file": "C:/Users/seth/Documents/repos/LivePlotter/src/body.cpp"
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c \"C:/Users/sethh/Documents/repos/LivePlotter/src/glad.c\" -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/glad.c"
+ }
+ ,
+ {
+ "directory": "C:/Users/sethh/Documents/repos/LivePlotter/",
+ "command": "\"C:/Users/sethh/AppData/Roaming/ClangPowerTools/LLVM_Lite/Bin/clang++.exe\" -x c++ \"C:/Users/sethh/Documents/repos/LivePlotter/src/body.cpp\" -std=c++20 -Wall -fms-compatibility-version=19.10 -Wmicrosoft -Wno-invalid-token-paste -Wno-unknown-pragmas -Wno-unused-value -fsyntax-only \"-DUNICODE\" \"-D_UNICODE\" \"-D_MT\" \"-D_DLL\" \"-D_DEBUG\" \"-D_CONSOLE\" \"-D_DEBUG_FUNCTIONAL_MACHINERY\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/atlmfc/include\" -isystem\"C:/Program Files/Microsoft Visual Studio/2022/Community/VC/Auxiliary/VS/include\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/ucrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/um\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/shared\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/winrt\" -isystem\"C:/Program Files (x86)/Windows Kits/10/Include/10.0.22621.0/cppwinrt\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/pthreads4w-code\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glm\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/ext/glfw/include\" -isystem\"C:/Users/sethh/Documents/repos/LivePlotter/inc\"",
+ "file": "C:/Users/sethh/Documents/repos/LivePlotter/src/body.cpp"
}
]
diff --git a/ext/pthreads4w-code b/ext/pthreads4w-code
new file mode 160000
index 0000000..8e467a6
--- /dev/null
+++ b/ext/pthreads4w-code
@@ -0,0 +1 @@
+Subproject commit 8e467a62a14fd9de15af33beec0a913d23f4d2f9
diff --git a/inc/tcp_server.hpp b/inc/tcp_server.hpp
new file mode 100644
index 0000000..1d8675e
--- /dev/null
+++ b/inc/tcp_server.hpp
@@ -0,0 +1,25 @@
+#pragma once
+
+#include
+#include
+#include "util.hpp"
+
+typedef void (*data_received_cb_t)(SOCKET client, array data);
+
+struct tcpserver {
+ SOCKET sock;
+ array client_socks;
+ int max_connections;
+ addrinfo *addr;
+ array cbs;
+
+ pthread_mutex_t lock;
+ pthread_cond_t connection_ended;
+ pthread_cond_t stop_requested;
+};
+
+bool create_server(tcpserver *server_out, const char* hostname, int port);
+void start_server(tcpserver &s);
+void stop_server(tcpserver &s);
+void send_data(tcpserver &s, SOCKET client, array data);
+void register_recv_cb(tcpserver &s, data_received_cb_t cb);
diff --git a/inc/util.hpp b/inc/util.hpp
index 72cfe09..1e6654a 100644
--- a/inc/util.hpp
+++ b/inc/util.hpp
@@ -1,13 +1,18 @@
#pragma once
+#include
#include
+typedef unsigned int uint;
+
template struct array {
T* data;
size_t len;
+ size_t cap;
inline T& operator[](int i) { return data[i]; }
};
-typedef unsigned int uint;
-
+template void append(array& a, T el);
+template T pop(array& a);
+template void resize(array& a, size_t new_size);
bool read_file(array* out, const char* filepath);
diff --git a/src/main.cpp b/src/main.cpp
index d779adb..132e927 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -80,7 +80,7 @@ void scroll_callback(GLFWwindow* window, double xoffset, double yoffset)
glm::vec4 k = camera_t[2];
float d = yoffset;
- camera_loc += k * (d/10 * std::max(glm::length(camera_loc), 1.0f));
+ camera_loc += k * (d/10 * glm::max(glm::length(camera_loc), 1.0f));
camera_t = glm::lookAt(camera_loc, focal_point, up);
}
@@ -163,8 +163,8 @@ int main() {
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
set_uniform(shader, "camera_t", camera_t);
set_uniform(shader, "projection_t", projection_t);
-
- draw_body(b);
+
+ draw_body(b);
draw_body(b2);
glfwSwapBuffers(window);
diff --git a/src/tcp_server.cpp b/src/tcp_server.cpp
new file mode 100644
index 0000000..4421d6a
--- /dev/null
+++ b/src/tcp_server.cpp
@@ -0,0 +1,102 @@
+#include
+#include
+#pragma comment(lib, "pthreadVC3d.lib")
+
+// I hate windows. I hate windows. I hate windows.
+
+#include
+#include
+
+#include
+#include
+
+#include "tcp_server.hpp"
+
+static WSADATA wsadata;
+static bool winsock_initialized = false; // First tcp server created will initialize this
+static int init_result;
+
+void _server_loop(void* args);
+void _conn_loop(void* args);
+void _start_conn_loop(SOCKET client_s);
+
+bool create_server(tcpserver* server_out, const char* hostname, int port, int max_connections = 1) {
+ if (!winsock_initialized && (init_result = WSAStartup(MAKEWORD(2, 2), &wsadata)) != 0) {
+ printf("WSAStartup failed: %d\n", init_result);
+ winsock_initialized = true;
+ return false;
+ }
+
+ // ********** Addr Info Creation **********
+ addrinfo *result, *ptr, hints;
+ char port_str[16];
+ _itoa_s(port, port_str, 10);
+ // TODO: Ensure hostname is null-terminated
+ int status = getaddrinfo(hostname, port_str, &hints, result);
+ if (status != 0) {
+ printf("Error at getaddrinfo(): %d\n", status);
+ goto fail_cleanup;
+ }
+
+ // *********** Socket Creation ************
+ SOCKET sock = socket(result->ai_family, result->ai_socktype, result->ai_protocol);
+ if (sock == INVALID_SOCKET) {
+ printf("Error at socket(): %d\n", WSAGetLastError());
+ freeaddrinfo(result);
+ goto fail_cleanup;
+ }
+
+ // *********** Socket Binding ************
+ status = bind(sock, result->ai_addr, (int)result->ai_addrlen);
+ if (status == SOCKET_ERROR) {
+ printf("Error at bind(): %d\n", WSAGetLastError());
+ freeaddrinfo(result);
+ goto fail_cleanup;
+ }
+
+ return true;
+
+fail_cleanup:
+ WSACleanup();
+ winsock_initialized = false;
+ return false;
+}
+
+void start_server(tcpserver& s) { }
+void stop_server(tcpserver& s) { }
+void send_data(tcpserver& s, SOCKET client, array data) { }
+void register_cb(tcpserver& s, data_received_cb_t cb) { append(s.cbs, cb); }
+
+void _server_loop(void* args) {
+ tcpserver* s = static_cast(args);
+
+ int num_connections = 0;
+ int slots[s->max_connections];
+ array open_slots
+ = { .data = slots, .len = (size_t)s->max_connections, .cap = (size_t)s->max_connections };
+ for (int i = 0; i < open_slots.len; i++) {
+ open_slots[i] = open_slots.len - (i + 1);
+ }
+
+ SOCKET clients[s->max_connections];
+ memset(clients, INVALID_SOCKET, sizeof(SOCKET));
+ while (true) {
+ while (num_connections < s->max_connections) {
+ int slot = pop(open_slots);
+ clients[slot] = accept(s->sock, NULL, NULL);
+ // TODO: More robust handling of bad client sockets
+ if (clients[slot] == INVALID_SOCKET) {
+ printf("Error at accept(): %d\n", WSAGetLastError());
+ stop_server(*s);
+ return;
+ }
+ _start_conn_loop(clients[slot]);
+ }
+ }
+}
+
+void _start_conn_loop(SOCKET client_s) {
+
+}
+
+void _conn_loop(void* args) { }
diff --git a/src/util.cpp b/src/util.cpp
index c69b6c5..bde2143 100644
--- a/src/util.cpp
+++ b/src/util.cpp
@@ -1,9 +1,33 @@
#include
#include
+#include
#include
#include "util.hpp"
+template void append(array& a, T el) {
+ if (a.len == a.cap) {
+ resize(a, a.cap*2);
+ }
+ a[a.len] = el;
+ a.len++;
+}
+
+
+template T pop(array& a) {
+ assert(a.len >= 1);
+ a.len--;
+ return a.data[a.len+1];
+}
+
+template void resize(array &a, size_t new_cap) {
+ T* new_data = (T*)malloc(new_cap);
+ memcpy(new_data, a.data, min(a.len, new_cap));
+ free(a.data);
+ a.len = min(a.len, new_cap);
+ a.cap = new_cap;
+}
+
bool read_file(array* out, const char* filepath) {
FILE* fp = NULL;
if (fopen_s(&fp, filepath, "rb") != 0) {
@@ -15,7 +39,7 @@ bool read_file(array* out, const char* filepath) {
size_t sz = ftell(fp);
fseek(fp, 0, SEEK_SET);
- char *data = (char*)malloc(sizeof(char)*sz);
+ char* data = (char*)malloc(sizeof(char) * sz);
fread(data, sizeof(char), sz, fp);
fclose(fp);
out->data = data;