161 lines
4.2 KiB
Text
161 lines
4.2 KiB
Text
@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<pollfd>
|
|
- _users : map<int, User>
|
|
|
|
+ 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<User>
|
|
- _topic : string
|
|
|
|
+ getName() : string
|
|
+ getTopic() : string
|
|
+ isUserInChannel(User *user) : bool
|
|
+ getUsers() : list<User>
|
|
+ getOwner() : User
|
|
+ isOperator(user : User) : bool
|
|
+ isUserInChannel(User *user) : bool
|
|
+ setTopic(newTopic : string) : void
|
|
+ addOperator(user : User) : void
|
|
+ addUser(user : User) : void
|
|
+ removeOperator(user : User) : void
|
|
+ removeUser(user : User) : void
|
|
}
|
|
|
|
' ====================================
|
|
' NAMESPACE: CommandDispatcher (static)
|
|
' ====================================
|
|
package "CommandDispatcher" <<namespace>> {
|
|
class CommandDispatcher {
|
|
+ dispatchCommand(user : User, line : string) : void
|
|
+ splitCommand(line : string) : vector<string>
|
|
}
|
|
}
|
|
|
|
' =============================
|
|
' NAMESPACE: Command
|
|
' =============================
|
|
package "Command" <<namespace>> {
|
|
class PASS {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class NICK {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class USER {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class JOIN {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class PART {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class PRIVMSG {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class NOTICE {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class PING {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class PONG {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class QUIT {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class TOPIC {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class MODE {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class INVITE {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class KICK {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class LIST {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
class UNKNOWN {
|
|
+ execute(user : User, args : vector<string>) : void
|
|
}
|
|
}
|
|
|
|
' ========================
|
|
' RELATIONS
|
|
' ========================
|
|
"main()" --> Server : creates
|
|
Server "1" *-- "1" PollManager : _poll
|
|
PollManager "1" o-- "*" User : _users
|
|
User "1" o-- "*" Channel : _channels
|
|
Channel "1" *-- "1" User : _owner
|
|
Channel "1" o-- "*" User : _operators
|
|
PollManager --> CommandDispatcher.CommandDispatcher : calls
|
|
CommandDispatcher.CommandDispatcher --> Command : dispatches
|
|
CommandDispatcher.CommandDispatcher --> User : parses commands
|
|
|
|
@enduml
|