todo: iocp recv안되는 문제 해결하기
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user