From f844505c17381cb768c4893140aea072b328799f Mon Sep 17 00:00:00 2001 From: Andreas Neue Date: Sun, 24 Jul 2016 22:15:52 +0200 Subject: [PATCH] Changed join/part handling --- server.go | 102 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 52 insertions(+), 50 deletions(-) diff --git a/server.go b/server.go index b17e9a8..f653047 100644 --- a/server.go +++ b/server.go @@ -25,20 +25,25 @@ var myinfo string = "%s %s/%s * *" var isupport string = "CASEMAPPING=rfc1459 CHANTYPES=# NICKLEN=32 PREFIX=(aohv)&@%%+" type Server struct { - queue chan *irc.Message - addq chan Client - delq chan Client - host string - info string - software string - version string - created string - motd string - clients map[string]Client - chUsers map[string]map[string]string - chTopics map[string]string - config *conf.ConfigFile - configPath string + queue chan *irc.Message + addq chan Client + delq chan Client + + host string + info string + software string + version string + created string + motd string + + clients map[string]Client + + chUsers map[string]map[string]string + chTopics map[string]string + + config *conf.ConfigFile + configPath string + packetsTransferred float64 connectionsCurrent float64 connectionsCount float64 @@ -47,22 +52,26 @@ type Server struct { // Create a new server instance. func NewServer(configPath, software, version string) *Server { - sv := &Server{software: software, version: version, created: "yes"} + sv := &Server{software: software, version: version, + created: time.Now().String()} sv.queue = make(chan *irc.Message, 1024) - sv.addq = make(chan Client, 1024) - sv.delq = make(chan Client, 1024) + sv.addq = make(chan Client, 128) + sv.delq = make(chan Client, 128) sv.clients = make(map[string]Client) sv.chUsers = make(map[string]map[string]string) sv.chTopics = make(map[string]string) + sv.configPath = configPath sv.loadConfig() + loglevel, _ := sv.config.GetInt("system", "loglevel") + xlog.Init(loglevel) + sv.host, _ = sv.config.GetString("server", "host") sv.info, _ = sv.config.GetString("server", "info") sv.motd, _ = sv.config.GetString("server", "motd") - xlog.Init(loglevel) sv.packetsTransferred = 0 sv.connectionsCurrent = 0 @@ -235,7 +244,7 @@ func (sv *Server) sendLogon(nick string) { fmt.Sprintf("Your host is %s, running on %s/%s", sv.host, sv.software, sv.version)) sv.sendReply(nick, RPL_CREATED, "", - fmt.Sprintf("Created: %s", sv.created)) + fmt.Sprintf("This server was created %s", sv.created)) sv.sendReply(nick, RPL_MYINFO, "", fmt.Sprintf(myinfo, sv.host, sv.software, sv.version)) sv.sendReply(nick, RPL_ISUPPORT, "", @@ -248,35 +257,6 @@ func (sv *Server) sendLogon(nick string) { sv.sendReply(nick, RPL_ENDOFMOTD, "", "End of MOTD command") } -func (sv *Server) channelJoin(nick, ch string) { - clid := strings.ToLower(nick) - chid := strings.ToLower(ch) - if _, exists := sv.chUsers[chid]; !exists { - sv.chUsers[chid] = make(map[string]string) - sv.chTopics[chid] = "" - } - if _, exists := sv.chUsers[chid][clid]; exists { - return - } - sv.chUsers[chid][clid] = "" - sv.sendMsg(irc.M(nick, "JOIN", ch, "")) - sv.sendReply(nick, RPL_TOPIC, ch, sv.chTopics[ch]) - sv.channelNames(nick, ch) -} - -func (sv *Server) channelPart(nick, ch, reason string) { - clid := strings.ToLower(nick) - chid := strings.ToLower(ch) - if _, exists := sv.chUsers[chid]; !exists { - return - } - if _, exists := sv.chUsers[chid][clid]; !exists { - return - } - sv.sendMsg(irc.M(nick, "PART", ch, reason)) - delete(sv.chUsers[chid], clid) -} - func (sv *Server) channelNames(nick, ch string) { chid := strings.ToLower(ch) if _, exists := sv.chUsers[chid]; !exists { @@ -340,11 +320,33 @@ func handleCmdPrivmsg(sv *Server, msg *irc.Message) { } func handleCmdJoin(sv *Server, msg *irc.Message) { - sv.channelJoin(msg.Pre, msg.Args[0]) + clid := strings.ToLower(msg.Pre) + chid := strings.ToLower(msg.Args[0]) + if _, exists := sv.chUsers[chid]; !exists { + sv.chUsers[chid] = make(map[string]string) + sv.chTopics[chid] = "" + } + if _, exists := sv.chUsers[chid][clid]; exists { + return + } + sv.chUsers[chid][clid] = "" + sv.sendMsg(msg) + sv.sendReply(msg.Pre, RPL_TOPIC, msg.Args[0], sv.chTopics[msg.Args[0]]) + sv.channelNames(msg.Pre, msg.Args[0]) } func handleCmdPart(sv *Server, msg *irc.Message) { - sv.channelPart(msg.Pre, msg.Args[0], msg.Trail) + clid := strings.ToLower(msg.Pre) + chid := strings.ToLower(msg.Args[0]) + if _, exists := sv.chUsers[chid]; !exists { + return + } + if _, exists := sv.chUsers[chid][clid]; !exists { + return + } + sv.sendMsg(msg) + delete(sv.chUsers[chid], clid) + } func handleCmdQuit(sv *Server, msg *irc.Message) {