feat: server, client 디렉토리 조정 및 client 헤더 파일 추가. 시나리오
혹은 대화형 클라이언트로 수정
This commit is contained in:
parent
b887f15662
commit
1d103d7f16
12 changed files with 281 additions and 112 deletions
37
server/SessionManager.cpp
Normal file
37
server/SessionManager.cpp
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
#include "SessionManager.h"
|
||||
#include "Logger.h"
|
||||
|
||||
SessionManager &SessionManager::GetInstance() {
|
||||
static SessionManager instance;
|
||||
return instance;
|
||||
}
|
||||
|
||||
void SessionManager::Join(std::shared_ptr<Session> session) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
sessions_.insert(session);
|
||||
Logger::Log("클라이언트[", session->GetNickname(),
|
||||
"]가 입장했습니다. 총 세션 수: ", sessions_.size());
|
||||
}
|
||||
|
||||
void SessionManager::Leave(std::shared_ptr<Session> session) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
if (sessions_.erase(session) > 0) {
|
||||
Logger::Log("클라이언트[", session->GetNickname(),
|
||||
"]가 퇴장했습니다. 총 세션 수: ", sessions_.size());
|
||||
}
|
||||
}
|
||||
|
||||
void SessionManager::Broadcast(PacketHeader header,
|
||||
std::span<const uint8_t> body) {
|
||||
std::lock_guard<std::mutex> lock(mutex_);
|
||||
|
||||
std::vector<uint8_t> 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);
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue