grim/amongchat

Initial revision
draft default tip
2020-09-23, Gary Kramlich
dead8a9014bd
Initial revision
package server
import (
"fmt"
"os"
"os/signal"
"syscall"
"keep.imfreedom.org/grim/amongchat/globals"
"keep.imfreedom.org/grim/amongchat/muxer"
)
type Cmd struct {
Secret string `kong:"flag,name='secret',required='True',env='AC_SECRET',help='A secret token to control access to the server.'"`
ListenAddr string `kong:"flag,name='listen-addr',default=':22022',env='AC_LISTEN_ADDR',help='The address that the server should listen on.'"`
}
func (c *Cmd) Run(g *globals.Globals) error {
sigChan := make(chan os.Signal, 1)
signal.Notify(sigChan, syscall.SIGINT, syscall.SIGTERM)
errChan := make(chan error, 10)
muxer := muxer.New(c.Secret)
defer muxer.Close()
go func() {
if err := muxer.Run(); err != nil {
errChan <- err
}
}()
server := NewServer(c.ListenAddr, muxer)
defer server.Close()
go func() {
if err := server.Listen(); err != nil {
errChan <- err
}
}()
for {
select {
case err := <-errChan:
return err
case s := <-sigChan:
fmt.Printf("Captured signal %v. Exiting...\n", s)
errChan <- nil
}
}
}