-
Notifications
You must be signed in to change notification settings - Fork 0
/
command_run.ini
181 lines (165 loc) · 6.89 KB
/
command_run.ini
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
시작: 함수 실행
메시지 수신: 클라이언트로부터 메시지 수신
메시지 파싱: 받은 메시지를 공백으로 구분하여 파싱
등록 확인: 클라이언트가 등록되었는지 확인
등록되지 않은 경우:
PASS, NICK, USER 명령어 처리:
해당 명령어에 따라 처리 진행
등록되지 않은 클라이언트 처리:
ERR_NOTREGISTERED 메시지 생성
클라이언트 및 연결 종료
등록된 경우:
등록된 클라이언트 처리:
서버에게 클라이언트 등록 메시지 전송
등록된 클라이언트 처리:
PING, USER, NICK, PASS, PRIVMSG, QUIT, \
PART, JOIN, KICK, MODE, TOPIC, INVITE \
명령어 처리:
해당 명령어에 따라 처리 진행
종료: 함수 종료
*Pass 명령어 처리
## 이미 등록된 클라이언트 :
## ERR_ALREADYREGISTRED = "You may not reregister\r\n"
## 명령어에 필요한 인자가 부족한 경우 :
## ERR_NEEDMOREPARAMS = "Not enough parameters\r\n"
## 비밀번호가 틀린 경우 :
## ERR_PASSWDMISMATCH = "Password incorrect\r\n"
## 클라이언트에게 에러 메시지 전송
## 클라이언트 초기화
## 클라이언트 삭제
## 파일 디스크립터 닫기
*Nick 명령어 처리
## 암호가 등록되지 않은 경우 :
## ERR_NOTREGISTERED = "You have not registered\r\n"
## 클라이언트에게 에러 메시지 전송
## 클라이언트 초기화
## 클라이언트 삭제
## 파일 디스크립터 닫기
## 명령어에 필요한 인자가 부족한 경우 :
## ERR_NONICKNAMEGIVEN = "No nickname given\r\n"
## _로 시작하는 닉네임은 이미 등록된 클라이언트의 닉네임을 의미 :
## 이미 등록된 클라이언트의 닉네임을 찾아서 command_vec[1]에 저장
## command_vec[1]에 클라이언트의 닉네임을 저장
## 닉네임이 유효하지 않은 경우 :
## ERR_ERRONEUSNICKNAME = "Erroneous nickname\r\n"
## 닉네임이 중복된 경우 :
## ERR_NICKNAMEINUSE = "Nickname is already in use\r\n"
## 이미 등록된 클라이언트의 닉네임을 의미 :
## 이미 등록된 클라이언트의 닉네임을 찾아서 command_vec[1]에 저장
## command_vec[1]에 클라이언트의 닉네임을 저장
## 닉네임 변경 메시지 전송
## 클라이언트가 속한 채널 리스트
## 채널 리스트의 시작
## 채널 리스트를 순회하며 닉네임 변경 메시지 전송
## 채널이 존재하는 경우
## 채널에 닉네임 변경 메시지 전송
## 닉네임 변경
## 닉네임 변경 메시지 전송
## 클라이언트에게 닉네임 변경 메시지 전송
*User 명령어 처리
## 이미 등록된 유저인 경우 :
## ERR_ALREADYREGISTRED = "You may not reregister\r\n"
## 암호가 등록되지 않은 경우 :
## ERR_NOTREGISTERED = "You have not registered\r\n"
## 클라이언트에게 에러 메시지 전송
## 클라이언트 초기화
## 클라이언트 삭제
## 파일 디스크립터 닫기
## 명령어에 필요한 인자가 부족한 경우 :
## ERR_NEEDMOREPARAMS = "Not enough parameters\r\n"
## 클라이언트에게 에러 메시지 전송
## realname을 command_vec[4]부터 command_vec의 끝까지 저장 :
## realname에 command_vec[i] 저장
## 마지막이 아닌 경우 :
## realname에 공백 추가
## 클라이언트에게 환영 메시지 전송
## 클라이언트 등록 완료
*Ping
## 플로우
## 명령어에 필요한 인자가 부족한 경우 :
## ERR_NEEDMOREPARAMS = "Not enough parameters\r\n"
## 클라이언트에게 에러 메시지 전송
## return
## 클라이언트에게 PONG 메시지 전송
*PRIVMSG
## 명령어에 필요한 인자가 부족한 경우 :
## ERR_NEEDMOREPARAMS = "Not enough parameters\r\n"
## 클라이언트에게 에러 메시지 전송
## 채널이 여러 개인 경우 :
## 채널인 경우 :
## 채널이 존재하는 경우 :
## 만약 BOT 명령어인 경우
## BOT 명령어 실행
## 메시지 생성
## 채널에 메시지 전송
## 채널이 존재하지 않는 경우 :
## ERR_NOSUCHCHANNEL = "No such channel\r\n"
## 클라이언트에게 에러 메시지 전송
## 채널이 아니고 클라이언트가 존재하는 경우 :
## 메시지 생성
## 클라이언트에게 메시지 전송
## 채널이 아니고 클라이언트가 존재하지 않는 경우 :
## ERR_NOSUCHNICK = "No such nick/channel\r\n"
## 클라이언트에게 에러 메시지 전송
*QUIT
## JOIN <channel> <key>
## 클라이언트를 참가한 모든 채널에서 제거 -
## 채널에 없으면 :
## 다음 채널로 이동 (continue;)
## 채널에서 클라이언트 제거
## 채널에서 오퍼레이터 제거
## 채널에서 보이스드 제거
## 채널에 남은 클라이언트가 없으면 :
## 채널 제거
## 클라이언트 초기화
## 클라이언트 삭제
## 파일 디스크립터 닫기
*PART
## PART <channel> <nickname> (<reasons, ...>)
## 명령어에 인자가 부족할 경우 :
## ERR_NEEDMOREPARAMS = ":<server> 461 <nickname> PART :Not enough parameters"
## 채널이름이 여러개일 경우 ','로 구분 -
## 나가려는 채널의 수만큼 반복 -
## 클라이언트가 채널에 존재할 경우 :
## 채널에 메시지 전송
## 채널에서 클라이언트 제거
## 채널에서 오퍼레이터 제거
## 클라이언트의 채널 목록에서 채널 제거
## 채널에 클라이언트가 1명일 경우 :
## 채널 제거
## 클라이언트가 채널에 존재하지 않을 경우 :
## 채널이 존재할 경우 :
## ERR_NOTONCHANNEL = ":<server 442 <nickname> <channel> :You're not on that channel"
## 채널이 존재하지 않을 경우 :
## ERR_NOSUCHCHANNEL = ":<server> 403 <nickname> <channel> :No such channel"
*JOIN
## 명령어 인자가 부족할 때 :
## ERR_NEEDMOREPARAMS = ":<server> 461 <nickname> JOIN :Not enough parameters"
## (<options>)가 존재할 때 :
## <options> = <key>, 저장
## 채널 이름이 여러개일 경우 ','로 구분 -
## 채널 이름이 # 또는 &로 시작하지 않을 때 :
## ERR_NOSUCHCHANNEL = ":<server> 403 <nickname> <channel> :No such channel"
## 채널이 존재할 경우 :
## 이미 채널에 존재할 경우 :
## 접속 무시
## INVITE 모드일 때 :
## INVITE가 없을 때 :
## ERR_INVITEONLYCHAN = ":<server> 473 <nickname> <channel> :Cannot join channel (+i)"
## KEY 모드일 때 :
## KEY가 일치하지 않을 때 :
## ERR_BADCHANNELKEY = ":<server> 475 <nickname> <channel> :Cannot join channel (+k)"
## LIMIT 모드일 때 :
## LIMIT을 초과할 때 :
## ERR_CHANNELISFULL = ":<server> 471 <nickname> <channel> :Cannot join channel (+l)"
## 채널이 존재하지 않을 경우 :
## 채널 생성
## 채널에 클라이언트 추가
## 클라이언트에 채널 추가
## JOIN 메시지 전송
## 채널 오퍼레이터 추가
## 채널에 있는 클라이언트 리스트 전송
## 채널에 봇이 있을 경우 봇 메시지 전송
## (<options>)가 존재할 때 :
## key처리
*KICK