package main import ( "bufio" "flag" "fmt" "log" "maps" "os" "slices" "strings" "go.rctt.net/solec/server" "go.rctt.net/solec/storage" _ "github.com/mattn/go-sqlite3" ) var ( cmds = map[string]func(args []string){ "broadcast": sendBroadcast, "exit": exit, } serv *server.Server ) func main() { fmt.Println("SOLEC MOCK SERVER") fmt.Println("Commands:", slices.Sorted(maps.Keys(cmds))) addr := flag.String("a", "localhost:9999", "listening address:port") name := flag.String("n", "localhost", "server name") flag.Parse() db, err := storage.InitDb("test.db") if err != nil { panic(err) } serv = server.NewServer(*addr, *name, db) serv.AddChannel("test") go func() { if err := serv.Start(); err != nil { panic(err) } }() log.Println("listening on", *addr) readCmds() } func readCmds() { sc := bufio.NewScanner(os.Stdin) for sc.Scan() { args := strings.Split(sc.Text(), " ") cmd, ok := cmds[args[0]] if !ok { fmt.Println("unknown command") continue } cmd(args[1:]) } if err := sc.Err(); err != nil { log.Println(err) } } func sendBroadcast(args []string) { msg := strings.Join(args[0:], " ") serv.SendBroadcast(msg) } func exit(args []string) { os.Exit(0) }