nmdc-ircfrontend/typedefs.go
2016-05-02 19:16:25 +12:00

147 lines
2.2 KiB
Go

package main
import "net"
const (
VERSION = "1.0.0"
APP_DESCRIPTION = "nmdc-ircfrontend v" + VERSION
BLESSED_CHANNEL = "#chat"
)
type Server struct {
eventChan chan Event
running bool
name string
clientMap map[string]*Client //Map of nicks → clients
channelMap map[string]*Channel //Map of channel names → channels
motd string
}
type Client struct {
server *Server
connection net.Conn
signalChan chan signalCode
outputChan chan string
nick string
key string
registered bool
connected bool
operator bool
channelMap map[string]*Channel
}
type eventType int
const (
connected eventType = iota
disconnected
command
)
type Event struct {
client *Client
input string
event eventType
}
type Channel struct {
name string
topic string
clientMap map[string]*Client
mode ChannelMode
modeMap map[string]*ClientMode
}
type ChannelMode struct {
secret bool //Channel is hidden from LIST
topicLocked bool //Only ops may change topic
moderated bool //Only ops and voiced may speak
noExternal bool //Only users in the channel may talk to it
}
func (m *ChannelMode) String() string {
modeStr := ""
if m.secret {
modeStr += "s"
}
if m.topicLocked {
modeStr += "t"
}
if m.moderated {
modeStr += "m"
}
if m.noExternal {
modeStr += "n"
}
return modeStr
}
type ClientMode struct {
operator bool //Channel operator
voice bool //Has voice
}
func (m *ClientMode) Prefix() string {
if m.operator {
return "@"
} else if m.voice {
return "+"
} else {
return ""
}
}
func (m *ClientMode) String() string {
modeStr := ""
if m.operator {
modeStr += "o"
}
if m.voice {
modeStr += "v"
}
return modeStr
}
type signalCode int
const (
signalStop signalCode = iota
)
type replyCode int
const (
rplWelcome replyCode = iota
rplJoin
rplPart
rplTopic
rplNoTopic
rplNames
rplEndOfNames
rplNickChange
rplKill
rplMsg
rplList
rplListEnd
rplOper
rplChannelModeIs
rplKick
rplInfo
rplVersion
rplMOTDStart
rplMOTD
rplEndOfMOTD
rplPong
errMoreArgs
errNoNick
errInvalidNick
errNickInUse
errAlreadyReg
errNoSuchNick
errUnknownCommand
errNotReg
errPassword
errNoPriv
errCannotSend
)