@startuml "IRC Server - Detailed UML" ' ======================== ' ENTRY: main() ' ======================== class "main()" ' ======================== ' CLASS: Server ' ======================== class Server { - _port : int - _password : string - _server_fd : int - _poll : PollManager + Server(port : int, password : string) + start() : void + getPort() : int + showInfo() : void } ' ============================ ' CLASS: PollManager ' ============================ class PollManager { - _fds : vector - _users : map + addUser(fd : int) : void + removeUser(fd : int) : void + updateUser(fd : int, events : short) : void + pollLoop(server_fd : int) : void + readFromUser(fd : int) : void + writeToUser(fd : int) : void } ' ======================== ' CLASS: User ' ======================== class User { - _fd : int - _nickname : string - _username : string - _hostname : string - _readBuffer : string - _writeBuffer : string - _registered : bool + getFd() : int + getNickname() : string + setNickname(name : string) : void + appendToReadBuffer(data : string) : void + appendToWriteBuffer(data : string) : void + extractFullCommand() : string + isReadyToSend() : bool + isRegistered() : bool } ' ======================== ' CLASS: Channel ' ======================== class Channel { - _name : string - _password : string - _owner : User - _operators : List - _topic : string + getName() : string + setTopic(newTopic : string) : void + addOperator(user : User) : void + removeOperator(user : User) : void + isOperator(user : User) : bool } ' ==================================== ' NAMESPACE: CommandDispatcher (static) ' ==================================== package "CommandDispatcher" <> { class CommandDispatcher { + dispatchCommand(user : User, line : string) : void + splitCommand(line : string) : vector } } ' ============================= ' NAMESPACE: Command ' ============================= package "Command" <> { class PASS { + execute(user : User, args : vector) : void } class NICK { + execute(user : User, args : vector) : void } class USER { + execute(user : User, args : vector) : void } class JOIN { + execute(user : User, args : vector) : void } class PART { + execute(user : User, args : vector) : void } class PRIVMSG { + execute(user : User, args : vector) : void } class NOTICE { + execute(user : User, args : vector) : void } class PING { + execute(user : User, args : vector) : void } class PONG { + execute(user : User, args : vector) : void } class QUIT { + execute(user : User, args : vector) : void } class TOPIC { + execute(user : User, args : vector) : void } class MODE { + execute(user : User, args : vector) : void } class INVITE { + execute(user : User, args : vector) : void } class KICK { + execute(user : User, args : vector) : void } class LIST { + execute(user : User, args : vector) : void } class UNKNOWN { + execute(user : User, args : vector) : void } } ' ======================== ' CLASS: PollManager ' ======================== class PollManager { - _fds : vector - _fd_events : map + addFd(fd : int, events : short) : void + removeFd(fd : int) : void + updateFd(fd : int, events : short) : void + pollEvents(timeout : int) : int + getFds() : vector } ' ======================== ' RELATIONS ' ======================== Server "1" o-- "*" Client : _clients Client "1" o-- "*" Channel : _channels Channel "1" *-- "1" Client : _owner Channel "1" o-- "*" Client : _operators main ..> Parser : uses @enduml