mirror of
https://github.com/ergochat/ergo.git
synced 2024-11-10 22:19:31 +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_CHANNEL = config.Debug["channel"]
|
||||||
irc.DEBUG_SERVER = config.Debug["server"]
|
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
|
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 {
|
for {
|
||||||
select {
|
select {
|
||||||
case conn := <-server.newConns:
|
case conn := <-server.newConns:
|
||||||
@ -69,45 +113,7 @@ func (server *Server) ReceiveCommands() {
|
|||||||
client.Quit("connection timeout")
|
client.Quit("connection timeout")
|
||||||
|
|
||||||
case cmd := <-server.commands:
|
case cmd := <-server.commands:
|
||||||
client := cmd.Client()
|
server.ProcessCommand(cmd)
|
||||||
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)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user