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;