[C++] 채팅서버에 DB 실장
·
Study/C++ & C#
하기는 금방 했는데, 인생 한 치 앞을 알 수가 없게 돼서 이제야 올린다.  1. DB 설치MariaDB를 사용하기로 했다.Sapphire 프로젝트에서 MariaDB를 사용하고 있기도 하고,나중에 샤딩을 위해서도 좋지 않을까 싶었다. C++에서 마리아 DB와 연동하기 위해선 MariaDB Connector/C++가 필요하다.설치 후 포함 및 라이브러리 경로를 프로젝트 설정에서 잡아주면 끝.  2. DB 구조 잡기유저들은 무작위 16진수 문자열 배열을 ID이자 닉네임으로 사용하게 된다.로그인도 필요 없고 서버에서 임의로 부여한다.오고 가는 것은 클라이언트가 접속했는지, 어떤 채팅을 쳤는지 정도일 뿐이다. 사용자 정보 - 부여받은 ID - IP 주소 - 최초/최근 접속 시간대화 정보 - 메시지를 보낸 사용자..
[C++] ChatRoom 구현
·
Study/C++ & C#
본격적으로 채팅 시스템을 만들어 보기 위한 기초 작업이라고 봐도 되겠다. 이전과의 차이점은 아래와 같다. Session 정의 변경 - 이제 세션은 서버와 클라이언트 간의 연결 상태를 나타낸다. - 기존 Room처럼 쓸 수 없고 단일 연결을 나타낸다. ChatServer 구현 - io_context를 가지고 전체 서버를 관리할 객체 - 이후에 io_context를 활용하는 객체들은 전부 이 객체로부터 레퍼런스를 받는다. ChatRoom 구현 - ChatServer 아래에서 실제 채팅방의 역할을 할 객체 핸들러 구현 - 메세지 핸들링을 분리해 코드 관리를 용이하게 할 목적으로 별도 클래스로 구현 1. Session #ifndef SESSION_H_ #define SESSION_H_ #include #incl..
[C++] Session 다중 접속
·
Study/C++ & C#
이전에 에코서버를 만들어 봤었는데, 그건 세션 당 하나의 소켓만 처리할 수 있었다. 이걸 하나의 세션에서 여러 개의 소켓을 처리할 수 있게 수정했다. 하물며 채팅에서도 1:1 채팅만 하는 것은 아니지 않은가. 1. Server Server 클래스 자체는 거의 원형을 유지하고 있다. class Server { public: Server(boost::asio::io_context& io_context, short port) : io_context_(io_context), acceptor_(io_context, tcp::endpoint(tcp::v4(), port)), session_(std::make_shared(io_context)) { DoAccept(); } private: boost::asio::io..
[C++] Boost.Asio 에코 서버
·
Study/C++ & C#
Sapphire라는 FF14의 서버를 에뮬레이팅 하는 프로젝트가 있다. 개발사가 사용하는 실제 서버 코드와 동일할 수는 없겠지만, 기본적인 처리는 되어 있기에 이를 통해 나만의 세계에서 FF14를 탐험할 수 있다. 에뮬레이팅 된 서버가 클라이언트와 정상적으로 통신하고 있으며, 서버도 적절한 처리를 해 준다는 의미이다. 그리고 난 이 프로젝트에 사용된 Boost.Asio가 매우 궁금해졌다. 이를 처음부터 공부하며 이 프로젝트에 사용된 비동기 통신 개념을 진정 나의 것으로 만들기 위한 첫걸음을 떼려고 한다. 그전에 Boost.Asio에 대해 알 필요가 있다. 이 글에서 그 내용을 설명할 수도 있지만, 매우 잘 설명해 준 어떤 블로그의 글을 발견해 링크를 남긴다. Boost Asio에 대해서 알아보자 물론 공..