Coder Social home page Coder Social logo

ft_irc's People

Contributors

atimangel avatar minjakim avatar yudongwoo avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

ft_irc's Issues

server06

recv()를 한 이후에 에러 처리에대한 분기 문이 없음
E_AGAIN 이랑 E_WOULDBLOCK
E_INTR
그 외에 대한 에러들에 대한 분기를 만들겠음

join01

채널에 들어올 수 있는 유저 수 체크, 유저가 들어와있는 채널 수 체크, 현재 있는 채널인지 체크
채널 없을 시 최초 생성하고, 채널에 유저 등록

channel(chatroom) 클래스에서 해야 할 것

구현사항 (수정가능)

멤버 변수 목록

  • 채널 이름
  • 채널 개설 시간
  • 유저 리스트
  • 관리자 리스트
  • 채널 주제
  • 밴 리스트
  • 유저 모드
  • 체널 모드

멤버 함수 목록

  • 채널 이름 설정 및 가져오기
  • 채널 주제 설정 및 가져오기
  • 관리자 설정, 삭제
  • 채널 정보 출력
  • 메시지 출력
  • 밴 설정 및 해제
  • 유저 강퇴 기능
  • 유저 추가 기능
  • 채널 모드 설정
  • 유저 모드 설정
  • 채널이 비었는지 여부

client01

client00 부분 생성자 빠져서 채워넣음

clinet03

처리해야 할 메시지를 쌓아 놓을 자료구조가 하나 필요함.
IRCMessage를 벡터로 쌓아 놓고 이름을 commands라고 하겠음

Password message

패스워드 메세지를 이렇게 저렇게 구현할 거고
이거는 이거를 참고할거고 일단 그 메뉴얼에 어디어디 부분을 참고해서
거기까지만 연동되게 할 거다으아으ㅏ

Client 클래스에서 해야할 것.

구현사항 (수정가능)

멤버 변수 목록

  • 클라이언트 주소
  • 클라이언트 소켓 번호
  • send buffer
  • recv buffer
  • 비밀번호
  • 별명(닉네임)
  • 유저 이름
  • IRCMessage vector
  • 상태값 (인증을 받았는지 여부)

멤버 함수 목록

  • 소켓 번호 가져오기
  • 클라이언트 주소 가져오기(IP 포함)
  • 비밀번호 설정 및 가져오기
  • 별명(닉네임) 설정 및 가져오기
  • 유저 이름 설정 및 가져오기
  • 관리자인지 아닌지 여부

server05

함수에 선언된 버퍼 서버 클래스로 옮기기

client02

server.hpp에 중첩되어있는 m_client_info 구조체를 클래스 헤더파일로 빼내기

reply03

001 welcome 메시지 추가

client 등록 절차 완료 시 처리 되야하는 작업 함수로 묶어서 처리.
client 등록 절차 완료 시 001 welcome 메시지 발송

이제 irssi 클라이언트와 연결 가능해짐

IRCMessage01

생성자에서 유효한 메시지인지 체크

\r\n으로 끝나는지만 체크했음
512바이트인지, 유효한 커맨드인지, prefix를 닉네임 설정용도로만 썼는지 등을 추가로 체크 할 수 있을듯

구분된 부분에대한 게터를 구현함
메시지가 유효한지를 확인 할 수 있는 함수를 만듬

channel01

유저 추가 삭제, 채널 모드 설정, 유저 모드 설정, 관리자 추가 삭제
channel mode bit field (server측에서 channel mode 별로 처리한 결과를 담는 bool 비트)
Join, invite 설정, key 설정

server04

메시지 담는 버퍼를 벡터에서 다른 걸로 바꿨다.
다 받고 난 이후에 string에 clear()를 사용했다.
sendbuffer클래스의 이름을 바꿨다.

server02

run함수 구조를 짜려고 함
run 함수에 필요한 kevent 배열 class 서버에 추가하기
한 번에 읽을 큐 배열을 매크로 변수로 하려고 함
이벤트가 발생시 이벤트를 처리할 함수를 이름이라도 적어놓기

reply04

파일 형식 통일 IRCMessage.cpp >> ircmessage.cpp

numeric reply류 함수에서 굳이 client 레퍼런스를 인자로 받을 필요가 없었다.
그리고 공통적으로 받아야하는 인자면 들고 있는게 맞다.
그래서 client * 를 생성자될 때 인자로 받아 들고 있도록 변경했다.
numeric reply들이 인자로 Client를 받지 않도록 했다.

numeric reply에서 command 인자는 IRCMessage 클래스에서 멤버 변수로 들고 있어서, 그것도 인자에서 멤버변수로 대체했다.

quit00

클라이언트가 quit 메시지 날리면 그 클라이언트가 속한 채널에 있는 모든 클라이언트에게 서버가 응답 메시지 날림

server07

client와의 연결을 정리하는 함수 disconnect를 만들고, 들어가야할 곳에 넣기

reply00

서버가 클라이언트 요청에 답할 때 쓰이는 메시지 형식이다.
reply.hpp를 만들어서 reply매크로 집합을 만드려고 한다.

ircmessage00

기본적으로 구현해야 하는 생성자랑 함수의 틀만 만들었음

server01

server00내용 테스트

구현사항

Server의 run 함수에서 kqueue 이벤트 처리
read일 때 write일 때

sendbuffer01

sendbuffer의 소멸자가 정의되어 있지 않아 뜨는 linker error image

SendVector00

메시지를 보낼 때, 앞에서 부터 보낸다. 지금은 보낸 부분 내용을 지우도록 구현 되어있는데.
그러면 보낼 때 마다, 지우고, 안 지워진 부분은 앞으로 보내는 작업을 해야 해서 비효율적일 것 같다.

offset을 사용해서 어디까지 보냈는지 표시하는 변수를 하나 추가해서, 저 위의 작업을 생략한 클래스를 만드려고 한다.

server03

구현사항

receive_client_msg, send_client_msg 함수 구현(에러 부분 제외)

join00

메시지 파라미터 유효한지, 키는 있는지, 채널은 유효한지 체크
채널 이름과 키 맵으로 바인딩

reply02

에러 코드 define 상수에서 enum 형으로 변경

server 구현 해야하는 것들

  • MTU 고려해서 recv, send 하기
  • 함수에 선언된 버퍼 서버 클래스 멤버로 옮기기 (buffer)
  • receive, send 함수 에러 부분 구현
  • receive 다 받았을 때를 확인 하는 부분
  • IPV4_MTU_MIN 이랑 IPV4_MTU_MAX 매크로 변수 선언하자, 68~65535
  • recv 이후 분기문 추가 E_AGAIN, E_WOULDBLOCK E_INTR 그 외
  • 클라이언트 disconnect시키는 함수
  • 타이머
  • 받은 메시지를 crlf기준으로 쪼개기
  • client.m_commands.size()가 0이 아니면 실행시키기

client04

클라이언트가 pass 메시지를 통해 등록이 됐는지 여부를 저장하는 변수와
그걸 확인하는 함수, 값을 변경하는 함수등을 만들었습니다.

Logger 레벨을 어떻게 정해야 할지

fatal은 종료 될 만한 에러 상황 인 것 같고
error는 종료 될 만큼 이상이 있는 것은 아닌데, 에러가 발생한 것 같고,
warn은 잘 모르겠음
info
debug
trace

레벨에 따른 기준을 정해서 출력 되는 메시지를 잘 관리 했으면 좋겠습니다.
낮은 레벨의 메시지는 안볼 수 있게 할 수 있는데 그러면, 개발 하거나 디버그 할 때 보면 좋을 것들이 낮은 레벨이고
서버를 돌릴 때 보면 좋은 것들이 높은 레벨인게 맞을 것 같습니다.

정리 되면 이 내용도 위키에 올립시다.

server09

받은 메시지가 담긴 버퍼에서 \r\n으로 쪼갠 뒤 commands queue에 집어넣는다.
그 이후 commands queue에 쌓인게 있다면 처리하고 없다면 처리하지 않는다.

추가로 errno를 체크하는 부분은 삭제했다.

server13

nickname 변경 사항 알리는 부분과 m_set_nickname 위치 변경
변경 사항 알리는 메시지 \r\n 누락 수정

channel00

channel 클래스 생성 및 기본 함수들 세팅

server00

Server 클래스 구현

생성자

  • argc, argv를 인자로 받는 생성자
  • port, 비밀번호를 인자로 받는 생성자
  • 이외에 필요 없는 생성자는 private으로

기능

  • Server 클래스 생성시, kqueue및 소켓에대한 준비를 마침
  • run 함수를 통해 kqueue에 쌓인 이벤트 처리

server08

m_client_map accept 함수에 추가

reply01

함수를 사용하면, 답장에 필요한 string이 반환되도록 만들었다.
언제 어떤 함수를 써야하는지 안는 이상 함수 포인터를 만들거나 switch를 하면 오히려 비효율 적이라 각각의 함수를 만들었다.

server11

클라이언트에서 보낸 메시지를 가지고 PASS, NICK, USER 명령어 처리
(reply는 추후에 구현)

IRCMessage 클래스에서 해야할 것

IRCMessage은 받은 문자열을 IRC규칙에 따라 파싱하고, 필요한 부분만 가져 올 수 있도록 하는 클래스다.
보낼 메시지를 IRC 규칙에 따라 작성하는데 쓰이기도 한다.

  • 들어온 메시지 파싱
  • 인자가 15개인지
  • 유효한 커맨드인지
  • 클라이언트가 prefix를 닉네임 설정외에 걸로 했는지 체크

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.