nicknamemohaji / ft_irc

42cursus irc
0 stars 0 forks source link

Channel Class 구조및 시나리오 계획 #5

Closed alsksssass closed 1 month ago

alsksssass commented 2 months ago

IRC 채널 클래스 설계

기본 속성

열거형 (Enums)

enum ChannelPermission {
    kOperator = 1 << 0,  // 운영자 권한
    kNormal = 1 << 1     // 일반 사용자 권한
};

enum ChannelModeSet {
    kLimit = 1 << 0,    // 'l': 사용자 수 제한
    kInvite = 1 << 1,   // 'i': 초대 전용 채널
    kTopic = 1 << 2,    // 't': 운영자만 토픽 변경 가능
    kPassword = 1 << 3, // 'k': 비밀번호 필요
    kDefault = 1 << 4   // 기본 모드. n 옵션 채널밖에서 채널에 메시지 전송가능여부
};

상수

const int kMaxChannelUsers = 100;  // 최대 채널 인원 수 기본 설정값

생성자

  1. IRCChannel(클라이언트 이름, 채널 이름)

    • 서버의 총 채널 개수 초과 여부 확인 후 오류 처리
    • 채널 이름 유효성 검사 (길이 10자 이하, '#' 접두사)
    • 기본 모드와 토픽 제한 설정으로 생성
    • 생성자를 채널의 첫 운영자로 추가
  2. IRCChannel(클라이언트 이름, 채널 이름, 비밀번호)

    • 위 생성자를 호출하고 초기 비밀번호 설정

메서드

모드

사용자 권한 관리

채널 설정

사용자 관리

정보 조회

각 메서드는 필요에 따라 적절한 예외 처리를 포함하며, 채널의 상태를 일관성 있게 유지합니다. 추가할 만한것이나 수정할것 있으면 코멘트 바랍니다

alsksssass commented 2 months ago

topic 수정한 유저 표시 추가 클래스 변수 std::String edituser 와 set, get 메소드 추가. 모든 토픽을 하나의 배열로 만들어서 접근하도록 하는방안 의논

alsksssass commented 2 months ago

채널 생성및 토픽수정시간은 유닉스 타임스탬프 시간으로 변경

alsksssass commented 2 months ago

모드는 +nt 형식으로 반환되는 메소드도 있었으면 좋겠음. 접속시 채널의 모드상태를 전송해야하고 모드 변경시에도 필요할듯

alsksssass commented 2 months ago

퍼블릭, 시크릿, 프라이빗 채널 세종류가 있는데 퍼블릭 하나만 하는것이 어떨까 싶네요 다른 건 우리가 구현하지 않는 기능들을 위한 옵션인듯 합니다 시크릿 채널 채널의 존재 자체가 숨겨집니다. 채널 목록에 표시되지 않습니다. WHOIS 명령어로 볼 수 없습니다. 채널에 참여한 사용자만 채널의 존재를 알 수 있습니다.

프라이빗 채널 채널의 존재는 볼 수 있지만, 내용은 숨겨집니다. 채널 목록에는 표시되지만, 주제나 참여자 목록은 숨겨집니다.

alsksssass commented 2 months ago

채널에서 유저 제거 추가.

alsksssass commented 2 months ago

클라이언트 클래스에서 채널제거 메소드 추가

nicknamemohaji commented 2 months ago

halfop, op, normal user로 구분하지 않고 op, normal user로만 구분한다면 단순 bool값으로 처리가 가능할 것 같습니다

alsksssass commented 2 months ago

halfop, op, normal user로 구분하지 않고 op, normal user로만 구분한다면 단순 bool값으로 처리가 가능할 것 같습니다

현재 권한 문제에대해서 채널 생성 운영자와 +o 옵션 운영자간의 권한 차이가 존재해 따로 분리해야할 상황이 있을수 있어 아직 소민씨에 의해 결정된후에 수정할 예정입니다. 채널 생성운영자 admin 권한부여 운영자 oper 예) admin -o admin 무시 oper -o oper 실행 oper -o admin 무시 admin -o oper 실행