todo: iocp recv안되는 문제 해결하기

This commit is contained in:
2025-06-04 02:33:00 +09:00
parent 3f052a5f7f
commit c0e0279e5c
15 changed files with 363 additions and 157 deletions

View File

@@ -9,8 +9,9 @@ namespace veng {
class Engine {
public:
Engine(gsl::not_null<Graphics*> vulkan_graphics)
: vulkan_graphics(vulkan_graphics) {}
Engine(gsl::not_null<Graphics*> vulkan_graphics,
utils::ThreadPool* thread_pool)
: vulkan_graphics(vulkan_graphics), thread_pool_(thread_pool) {}
void init();
@@ -39,7 +40,7 @@ class Engine {
private:
Loader asset_loader_;
Physics physics_controller_;
utils::ThreadPool thread_pool_;
utils::ThreadPool* thread_pool_;
glm::ivec2 window_size_ = {0, 0};
std::double_t last_frame_time_ = 0.0;

View File

@@ -2,36 +2,79 @@
#include "glfw/glfw_initialization.h"
#include "glfw/glfw_monitor.h"
#include "glfw/glfw_window.h"
#include "socket/iocp.h"
#include "socket/tcp_socket.h"
#include "socket/wsa_manager.h"
#include "utils/log.h"
#include "vulkan_engine/vulkan/engine.h"
#include "vulkan_engine/vulkan/graphics.h"
#include "socket/iocp.h"
std::int32_t main(std::int32_t argc, gsl::zstring* argv) {
Network::IOCP iocp;
std::int32_t main(std::int32_t argc, gsl::zstring* argv) {
Network::WSAManager wsamanager;
#if !defined(NDEBUG)
utils::setDefaultLogger(spdlog::level::level_enum::debug, "log.log", 1024,
2);
#endif
utils::ThreadPool tp(0);
Network::IOCP iocp;
iocp.init(&tp, SessionProtocol::TCP);
const veng::GlfwInitialization _glfw;
Network::Address addr;
in6_addr in6addr;
veng::Window window("Vulkan Engine", {800, 600});
window.TryMoveToMonitor(0);
addr.set(AF_INET6, "::1", 9010);
veng::Graphics graphics(&window);
veng::Engine engine(&graphics);
Network::TCPSocket sock;
sock.init(AF_INET6);
if (sock.connect(addr) == INVALID_SOCKET) {
spdlog::error("connect()");
std::exit(EXIT_FAILURE);
}
engine.LoadModelAsset("assets/player.fbx", "player");
engine.LoadModelAsset("assets/player_flame.fbx", "player_flame");
engine.LoadModelAsset("assets/bullet.fbx", "bullet");
engine.LoadModelAsset("assets/background.fbx", "background");
Network::IOCPPASSINDATA* data = new Network::IOCPPASSINDATA(16 * 1024);
data->socket = std::make_shared<Network::TCPSocket>(sock);
data->IOCPInstance = &iocp;
iocp.registerSocket(data);
engine.BeginPlay = BeginPlay;
engine.Tick = Tick;
std::vector<Network::IOCPPASSINDATA*> send_data;
data->event = Network::IOCPEVENT::WRITE;
data->wsabuf.buf[0] = 'a';
data->wsabuf.buf[1] = 'b';
data->wsabuf.buf[2] = '\0';
data->wsabuf.len = 3;
send_data.push_back(data);
iocp.send(sock.sock, &send_data);
engine.init();
Sleep(10000);
while (!window.ShouldClose()) {
glfwPollEvents();
Network::IOCPPASSINDATA* recv_data = new Network::IOCPPASSINDATA(16 * 1024);
recv_data->socket = std::make_shared<Network::TCPSocket>(sock);
recv_data->IOCPInstance = &iocp;
iocp.recv(recv_data);
engine.Update();
}
const veng::GlfwInitialization _glfw;
return EXIT_SUCCESS;
}
veng::Window window("Vulkan Engine", {800, 600});
window.TryMoveToMonitor(0);
veng::Graphics graphics(&window);
veng::Engine engine(&graphics, &tp);
engine.LoadModelAsset("assets/player.fbx", "player");
engine.LoadModelAsset("assets/player_flame.fbx", "player_flame");
engine.LoadModelAsset("assets/bullet.fbx", "bullet");
engine.LoadModelAsset("assets/background.fbx", "background");
engine.BeginPlay = BeginPlay;
engine.Tick = Tick;
engine.init();
while (!window.ShouldClose()) {
glfwPollEvents();
engine.Update();
}
return EXIT_SUCCESS;
}

View File

@@ -168,7 +168,7 @@ void Engine::Update() {
vulkan_graphics->RenderModel(it);
}
physics_controller_.invokeOnColisionEvent(&thread_pool_, {models.data(), models.size()});
physics_controller_.invokeOnColisionEvent(thread_pool_, {models.data(), models.size()});
vulkan_graphics->EndFrame();
}