nicknamemohaji / ft_irc

42cursus irc
0 stars 0 forks source link

일정 및 구조 기획 #2

Open nicknamemohaji opened 2 months ago

nicknamemohaji commented 2 months ago

서브젝트 내용

  1. IO 멀티플렉싱

    • TCP 소켓 사용
    • 비동기 소켓 사용
    • kqueue등의 멀티플렉싱 방식 사용
  2. IRC 서버 구현

    • 새로운 클라이언트 등록
    • CAP
    • PASS
    • NICK, USER
    • MOTD
    • 연결 관리
    • PING, PONG
    • QUIT
    • ERROR
  3. IRC 채널 구현

    • 채널 관련
    • JOIN
    • NAMES
    • PART
    • TOPIC
    • INVITE
    • 운영자 관련
    • KICK
    • MODE
    • 메시지 관련
    • PRIVMSG
    • NOTICE
    • 기타 요청
    • LIST
  4. 보너스 구현

    • DCC

모듈 기획

  1. TCPMultiplexer::WaitEvent -> IRCClient::Recv: 커널 버퍼가 빌 때 까지 IRCClient의 버퍼에 계속 읽음
  2. TCPMultiplexer::WaitEvent -> IRCServer::ReadEvent
  3. IRCServer::ReadEvent->IRCServer::RequestParser: 메시지의 tag, source, command, params를 파싱
  4. IRCServer::RequestParser -> IRCServer::Context(context) -> IRCChannel::Context(context) -> IRCClient::Context(context): 파싱한 command에 맞는 메소드 호출
  5. IRCServer::DoAction -> IRCServer::CreateResponse -> IRCClient::Send: 작업이 끝난 후 응답 반환

ex.

somilee0202 commented 2 months ago

sabyun : 채널관련 명령어 somilee : 운영자, 메시지, 기타 관련 명령어 저희는 일단 이번주는 공부해보고 완성 예정일을 정해보도록 하겠습니다.

nicknamemohaji commented 2 months ago

240724 회의기록

실행흐름 변경

모듈 기획

예시 시나리오

alsksssass commented 2 months ago

240725 회의기록

프로젝트 진행 방식

메인 브랜치

FEAT (기능) 브랜치

  1. 이슈 생성
  2. 시나리오 작성
  3. 브랜치 생성 및 작업
  4. 작업 완료 후 PR (Pull Request) 생성
  5. 팀원 모두의 깃허브 승인 후 머지
  6. 머지 완료 후 브랜치 삭제

컨플릭트 해결 방법

시나리오 작성 가이드라인

코드 구조화

변수(어트리뷰트) 구성

프로젝트 일정

  1. 시나리오 작성

    • 기한: 7월 31일 (수요일)
    • 내용: 각자 맡은 명령어 시나리오 작성
  2. 시나리오 브리핑 및 조정

    • 일정: 8월 1일 ~ 2일 (목, 금)
    • 방식: 회의를 통한 브리핑 및 조정
  3. 작업 시작

    • 일정: 8월 5일 (월요일)부터

타임라인

alsksssass commented 2 months ago

240801 회의록

1. 채널 관련 기능

채널 생성 및 관리

채널 참여/나가기

2. 사용자 권한 및 관리

권한 시스템

사용자 관리

3. 데이터 구조 및 처리

채널 정보 저장

데이터 처리

4. 에러 처리 및 예외 상황

5. 클라이언트-서버 통신

메시지 포맷

6. 추가 기능

7. 향후 계획

기능 구현 우선순위

  1. 기본 채널 관리 기능 게터/세터 일원화
  2. JOIN Command 구현
  3. 사용자 권한 시스템
  4. 채널 목록 및 사용자 목록 조회

추가 논의 사항

alsksssass commented 2 months ago

class IRCServer; action 시 여러 커멘드 입력시 예) /join a,b,c,d a,b,d,d 비번은 a,b,c,d임 일때 a,b,d채널은 접속되고 c만 오류를 내뱉어야 하는 상황에서 중간에 오류를 쓰로우하면 더이상 진행이 안되는 문제가 생김.

alsksssass commented 2 months ago

채널에 접속시 채널에 있는 모든 유저에게 유저가 접속했다는 메시지를 전송해야함. 채널에 있는 리스트를 가지고 유저의 fd값을 가져와야 해서 IRCClient* GetClient(const std::string& user_name); 메소드를 서버클래스에 추가함.

alsksssass commented 2 months ago

채널에 접속시 채널에 있는 모든 유저에게 유저가 접속했다는 메시지를 전송해야함. 채널에 있는 리스트를 가지고 유저의 fd값을 가져와야 해서 IRCClient* GetClient(const std::string& user_name); 메소드를 서버클래스에 추가함.

server _clients 의 맵에 클라이언트들이 추가가 안되는듯? 클라이언트에게 메시지를 전송할수 없음! @nicknamemohaji

nicknamemohaji commented 2 months ago

중간에 오류를 쓰로우하면 더이상 진행이 안되는 문제가 생김.

아.. JOIN에서 여러 개의 채널에 동시에 들어갈 수 있다는걸 몰랐습니다. ActionJOIN 안에서 try-catch를 이용하다 마지막 파라미터에서 오류가 발생하면 그 때는 다시 throw해주면 되지 않을까 싶습니다.

IRCClient* GetClient(const std::string& user_name); 메소드를 서버클래스에 추가함.

명령어 처리 함수들이 서버 콘텍스트 안에서 실행되면 std::find(_clients, nickname) 같은 방식으로 클라이언트 객체를 얻어올 수 있습니다. 여기서 닉네임 못 찾으면 401 에러 던지면 되겠네요

_clients 의 맵에 클라이언트들이 추가가 안되는듯

닉네임 중복체크 후에 맵에 추가하는 코드를 작성하던 중에 일정이 생겨버렸습니다. 죄송합니다. 월요일에 시간 나면 수정해서 올리겠습니다