#include "SessionManager.h" #include "Logger.h" SessionManager &SessionManager::GetInstance() { static SessionManager instance; return instance; } void SessionManager::Join(std::shared_ptr session) { std::lock_guard lock(mutex_); sessions_.insert(session); Logger::Log("클라이언트[", session->GetNickname(), "]가 입장했습니다. 총 세션 수: ", sessions_.size()); } void SessionManager::Leave(std::shared_ptr session) { std::lock_guard lock(mutex_); if (sessions_.erase(session) > 0) { Logger::Log("클라이언트[", session->GetNickname(), "]가 퇴장했습니다. 총 세션 수: ", sessions_.size()); } } void SessionManager::Broadcast(PacketHeader header, std::span body) { std::lock_guard lock(mutex_); std::vector buffer(sizeof(PacketHeader) + body.size()); std::memcpy(buffer.data(), &header, sizeof(PacketHeader)); std::memcpy(buffer.data() + sizeof(PacketHeader), body.data(), body.size()); for (auto &session : sessions_) { // session::send에 span을 전달해야 함. 벡터 자체를 전달할 수도 있지만 우리 // Send는 span을 인자로 받음. Session::Send는 span을 받아 복사본을 생성함. session->Send(buffer); } }