개인공부121 IOCP 서버 제작 실습 8 Room을 생성하여 채팅을 할 수 있도록 구현 Room 생성 [PacketManager] CreateRommManager() 함수에서 RoomManager 객체 생성 [RoomManager] Init() 함수에서 maxRoomCount 만큼의 Room 객체를 생성해두고 추후 사용 Room 입장 [PacketManager] ProcessPacket() 함수에서 확인한 패킷 데이터의 Id가 ROOM_ENTER_REQUEST일 경우 [PacketManger] ProcessEnterRoom() 함수에서 응답으로 보내줄 패킷을 생성 유저가 존재하지 않는 경우 에러코드로 ENTER_ROOM_NOT_FIND_USER를 가진 응답을 전송 로그인하지 않은 유저의 요청일 경우 에러코드로 ENTER_ROOM_INVALID_.. 2023. 3. 27. IOCP 서버 제작 실습 7 DB로 Redis를 연동하여 로그인 작업을 구현 PacketManager의 Run() 함수 실행시 RedisManager 객체를 생성하여 Init() 및 Run() 함수 실행 Connect() 함수에서 Redis DB와 연동한 후 DB 작업을 수행하는 쓰레드를 생성하여 ProcessTask() 함수 실행 ProcessTask() 함수에서는 deque에 RequestTask가 있다면 해당 Task에 맞는 작업을 수행 Login 로직 [PacketManager] 패킷 처리 쓰레드의 ProcessPacket() 함수에서 수신된 패킷 데이터를 확인하여 패킷Id가 LOGIN_REQUEST일 경우 ProcessLogin() 함수 실행 [PacketManager] ProcessLogin() 함수에서 서버의 최대 접속.. 2023. 3. 25. IOCP 서버 제작 실습 6 서버의 종류를 에코 서버에서 채팅 서버로 변경 패킷과 유저를 관리하기 위한 PacketManager와 UserManager 및 User 클래스를 추가 네트워크 라이브러리(IOCPServer.h / ClientInfo.h / Define.h) 및 main.cpp는 기존과 동일(단, EchoServer 클래스의 명칭이 ChatServer로 바뀜) 데이터 패킷 수신 로직 [ClientInfo] 클라이언트 등록시 + 비동기 I/O Recv 작업 완료시 BindRecv()에서 WSARecv() [IOCPServer] Worker 쓰레드에서 비동기 Recv 작업 완료 감지 [ChatServer] OnRecieve() [PacketManager] ReceivePacketdata() [User] SetPacketDat.. 2023. 3. 23. IOCP 서버 제작 실습 5 Accept 처리를 비동기 I/O로 변경 IOCPServer.h 리슨소켓의 비동기 I/O 작업 완료 여부를 감시해야하므로 BindandListen() 함수에서 CreateIoCompletionPort() 함수를 통해 mListenSocket을 Completion Port에 등록 AccepterThread()에서 클라이언트들을 돌면서 비동기 I/O Accept 작업을 수행 이미 클라이언트가 연결되어있다면(IsConnected() == true) 연결 시도를 하지 않고 넘어감 std::chrono std::chrono::steady_clock은 프로세스마다 독립적으로 측정되는 시간 측정 방법을 사용하여 다른 프로세스나 시스템의 시간 변화에 영향을 받지 않음. 1970년 1월 1일을 기준으로 하는 system.. 2023. 3. 23. 이전 1 ··· 9 10 11 12 13 14 15 ··· 31 다음