mirror of
https://github.com/ergochat/ergo.git
synced 2024-12-22 10:42:52 +01:00
refactor server command loop
This commit is contained in:
parent
41e6baf9d4
commit
2229645a39
@ -17,5 +17,5 @@ func main() {
|
||||
irc.DEBUG_CHANNEL = config.Debug["channel"]
|
||||
irc.DEBUG_SERVER = config.Debug["server"]
|
||||
|
||||
irc.NewServer(config).ReceiveCommands()
|
||||
irc.NewServer(config).Run()
|
||||
}
|
||||
|
@ -56,7 +56,51 @@ func NewServer(config *Config) *Server {
|
||||
return server
|
||||
}
|
||||
|
||||
func (server *Server) ReceiveCommands() {
|
||||
func (server *Server) ProcessCommand(cmd Command) {
|
||||
client := cmd.Client()
|
||||
if DEBUG_SERVER {
|
||||
log.Printf("%s → %s %s", client, server, cmd)
|
||||
}
|
||||
|
||||
switch client.phase {
|
||||
case Authorization:
|
||||
authCmd, ok := cmd.(AuthServerCommand)
|
||||
if !ok {
|
||||
client.Quit("unexpected command")
|
||||
return
|
||||
}
|
||||
authCmd.HandleAuthServer(server)
|
||||
|
||||
case Registration:
|
||||
regCmd, ok := cmd.(RegServerCommand)
|
||||
if !ok {
|
||||
client.Quit("unexpected command")
|
||||
return
|
||||
}
|
||||
regCmd.HandleRegServer(server)
|
||||
|
||||
default:
|
||||
srvCmd, ok := cmd.(ServerCommand)
|
||||
if !ok {
|
||||
client.ErrUnknownCommand(cmd.Code())
|
||||
return
|
||||
}
|
||||
switch srvCmd.(type) {
|
||||
case *PingCommand, *PongCommand:
|
||||
client.Touch()
|
||||
|
||||
case *QuitCommand:
|
||||
// no-op
|
||||
|
||||
default:
|
||||
client.Active()
|
||||
client.Touch()
|
||||
}
|
||||
srvCmd.HandleServer(server)
|
||||
}
|
||||
}
|
||||
|
||||
func (server *Server) Run() {
|
||||
for {
|
||||
select {
|
||||
case conn := <-server.newConns:
|
||||
@ -69,45 +113,7 @@ func (server *Server) ReceiveCommands() {
|
||||
client.Quit("connection timeout")
|
||||
|
||||
case cmd := <-server.commands:
|
||||
client := cmd.Client()
|
||||
if DEBUG_SERVER {
|
||||
log.Printf("%s → %s %s", client, server, cmd)
|
||||
}
|
||||
|
||||
switch client.phase {
|
||||
case Authorization:
|
||||
authCmd, ok := cmd.(AuthServerCommand)
|
||||
if !ok {
|
||||
client.Quit("unexpected command")
|
||||
continue
|
||||
}
|
||||
authCmd.HandleAuthServer(server)
|
||||
|
||||
case Registration:
|
||||
regCmd, ok := cmd.(RegServerCommand)
|
||||
if !ok {
|
||||
client.Quit("unexpected command")
|
||||
continue
|
||||
}
|
||||
regCmd.HandleRegServer(server)
|
||||
|
||||
default:
|
||||
srvCmd, ok := cmd.(ServerCommand)
|
||||
if !ok {
|
||||
client.ErrUnknownCommand(cmd.Code())
|
||||
continue
|
||||
}
|
||||
switch srvCmd.(type) {
|
||||
case *PingCommand, *PongCommand:
|
||||
client.Touch()
|
||||
case *QuitCommand:
|
||||
// no-op
|
||||
default:
|
||||
client.Active()
|
||||
client.Touch()
|
||||
}
|
||||
srvCmd.HandleServer(server)
|
||||
}
|
||||
server.ProcessCommand(cmd)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user