# Functions
NewRoomChan creates a new room for clients to join.
NewSaveMessageChan create a new SaveMessage channel.
RoomChat take a room, return a HandlerFunc, responsible for send & receive websocket data for all channels.
# Structs
Channel holds information about one specific channel in the room.
Client represents a user connect to a room, one user may have many devices to chat, so it should not be the same as user.
Message represents a single message which a client sent to a room (same meaning as a user send to a channel).
Room represents a room to chat.
SaveMessage uses to save Message to db.
User hold information about an user.
# Type aliases
UserKey is key to save user to context.