윈도우용 코드 완성

This commit is contained in:
2025-04-21 21:52:33 +09:00
parent c81197054d
commit a464fdfe82
11 changed files with 111 additions and 59 deletions

View File

@@ -1,29 +0,0 @@
#include "Socket/Error.hpp"
#include "spdlog/spdlog.h"
namespace Chattr::error {
void critical(gsl::czstring msg) {
#ifdef _WIN32
//TODO 윈도우에서 구현할 것
#elif __linux__
gsl::czstring msgbuf = strerror(errno);
#else
#error "이 플랫폼은 지원되지 않습니다."
#endif
spdlog::critical(msgbuf);
std::exit(EXIT_FAILURE);
}
void error(gsl::czstring msg) {
#ifdef _WIN32
//TODO 윈도우에서 구현할 것
#elif __linux__
gsl::czstring msgbuf = strerror(errno);
#else
#error "이 플랫폼은 지원되지 않습니다."
#endif
spdlog::error(msgbuf);
}
}

50
impl/Socket/Log.cpp Normal file
View File

@@ -0,0 +1,50 @@
#include "Socket/Log.hpp"
#include "precomp.hpp"
#include "spdlog/spdlog.h"
namespace Chattr::log {
void critical(gsl::czstring msg) {
#ifdef _WIN32
gsl::zstring msgbuf = nullptr;
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf,
0,
NULL);
spdlog::critical("[{}] {}", msg, msgbuf);
LocalFree(msgbuf);
#elif __linux__
gsl::czstring msgbuf = strerror(errno);
spdlog::critical("[{}] {}", msg, msgbuf);
#else
#error "이 플랫폼은 지원되지 않습니다."
#endif
std::exit(EXIT_FAILURE);
}
void error(gsl::czstring msg) {
#ifdef _WIN32
gsl::zstring msgbuf = nullptr;
FormatMessageA(
FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
WSAGetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
msgbuf,
0,
NULL);
spdlog::error("[{}] {}", msg, msgbuf);
LocalFree(msgbuf);
#elif __linux__
gsl::czstring msgbuf = strerror(errno);
spdlog::error("[{}] {}", msg, msgbuf);
#else
#error "이 플랫폼은 지원되지 않습니다."
#endif
}
}

View File

@@ -1,11 +1,29 @@
#include "Socket/Socket_Init.hpp"
#include "Socket/Log.hpp"
#include "precomp.hpp"
namespace Chattr {
Socket_Init::Socket_Init() {
Socket_Init::Socket_Init(std::int32_t domain, std::int32_t type, std::int32_t protocol) {
#ifdef _WIN32
WSADATA wsa;
if (WSAStartup(MAKEWORD(2, 2), &wsa) != 0)
log::critical("WSAStartup()");
#endif
sock_ = socket(domain, type, protocol);
if (sock_ == INVALID_SOCKET)
log::critical("socket()");
}
Socket_Init::~Socket_Init() {
#ifdef _WIN32
closesocket(sock_);
WSACleanup();
#elif __linux__
close(sock_);
#endif
}
SOCKET Socket_Init::get() const { return sock_; }
}