#include "asteroid/game.h" #include "glfw/glfw_initialization.h" #include "glfw/glfw_monitor.h" #include "glfw/glfw_window.h" #include "socket/iocp.h" #include "socket/packet.h" #include "socket/tcp_socket.h" #include "socket/udp_socket.h" #include "socket/wsa_manager.h" #include "utils/log.h" #include "utils/snowflake.h" #include "vulkan_engine/vulkan/engine.h" #include "vulkan_engine/vulkan/graphics.h" std::uint8_t CLIENTID = 0; 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); Network::Address addr; in6_addr in6addr; addr.set(AF_INET6, "::1", 9010); Network::Socket sock; Network::TCPSocket TCPSock; TCPSock.init(AF_INET6); sock = TCPSock; if (sock.connect(addr) == INVALID_SOCKET) { spdlog::error("connect()"); std::exit(EXIT_FAILURE); } iocp.registerTCPSocket(sock, 16 * 1024); while (iocp.GetRecvedBytes(sock.sock) < 6); std::vector header_serialized(6); iocp.recv(sock, header_serialized); Packet::Header header; header.Deserialize(header_serialized); while (iocp.GetRecvedBytes(sock.sock) < header.body_length); std::vector data(header.body_length); iocp.recv(sock, data); ::memcpy(&CLIENTID, data.data(), 1); //id 받기 const veng::GlfwInitialization _glfw; veng::Window window("Vulkan Engine", {800, 600}); window.TryMoveToMonitor(0); veng::Graphics graphics(&window); veng::Engine engine(&graphics, &tp, &iocp); 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(); engine.NetUpdate(std::make_shared(sock)); } return EXIT_SUCCESS; }