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. |