Implement Internet Relay Chat Server 📢
- Implement a server that manages multiple clients as a single thread using I/O multiplexing
- The server get messages from clients and send these messages to channel(s)/client(s) who is currently connected to this server
- Should be accessed and used with several reference IRC clients(Follow the IRC RFC documentation) RFC 1492 / RFC 2812
make
./ircserv <port> <password>- You can change the server settings in the CommonValue.hpp file.
- After changing the settings, enter "make re" to compile a new server.
- Customizable settings
| SETTING | DEFAULT VALUE |
|---|---|
| MAX_NICKNAME_LEN | 9 |
| MAX_CHANNELNAME_LEN | 31 |
| MAX_USER_NUM | 30 |
| MAX_CHANNEL_NUM | 30 |
| SERVER_HOSTNAME | "cacaotalk.42seoul.kr" |
| DEFAULT_PART_MESSAGE | " leaved channel." |
| NEW_OPERATOR_MESSAGE | " is new channel operator." |
- You can connect to this server using reference IRC clients(such as irssi)
| COMMAND | DESCRIPTION |
|---|---|
| PASS | used to set a 'connection password' |
| NICK | used to give user a nickname or change the existing one. |
| USER | used at the beginning of connection to specify the username, hostname and realname of a new user |
| JOIN | used by a user to request to start listening to the specific channel. |
| PRIVMSG | used to send private messages between users, as well as to send messages to channels. |
| NOTICE | used similarly to PRIVMSG. The difference is automatic replies never be sent in response to a NOTICE message. |
| KICK | used to request the forced removal of a user from a channel. (for channel operator only) |
| PART | used to leave from the channel user belong to. |
| QUIT | A client session is terminated with a quit message. |
DCC(Direct Client-to-Client) support
- With this function, you can chat or transfer files between clients without going through the server
Warning: DCC has no encryption- DCC Query Syntax
The initial CTCP `DCC` query message has this format:
DCC <type> <argument> <host> <port>- It provides a function to randomly select one of the menus added by channel members.
- Duplicate registration is possible, so you can weight it as needed.
| COMMAND | DESCRIPTION |
|---|---|
| !addmenu | Add to the menu list following param(s). You can use space to add multiple things at the same time. |
| !deletemenu | Delete from the menu list following param(s). You can use space to delete multiple things at the same time. |
| !showmenu | Print a list of menus currently in the list. |
| !pickmenu | Recommend one of the menus in the current list randomly. |