func (h *hub) run() { console := console.GetPtr() console.Output(h) quitAll := func() { if len(h.connections) == 0 { fmt.Println("quit all") //... fmt.Println("ok") } } for { select { // запрос на регистранцию // отметить что он зарегистрирован case c := <-h.Register: h.connections[c] = true fmt.Printf("client register\n") fmt.Printf("total clients: %d\n", len(h.connections)) // запрос Отменить регистрацию // удалить запись о регистрации из массива // закрываем канал case c := <-h.unregister: delete(h.connections, c) fmt.Printf("client unregister\n") fmt.Printf("total clients: %d\n", len(h.connections)) close(c.Send) quitAll() // широковещательные сообщения // перебрать всех зарегистрированных, // и отправить каждому это сообщение // если в канале больше нет сообщений // ???? не понял // закрыть канал и отменить регистрацию case m := <-h.broadcast: for c := range h.connections { select { case c.Send <- m: default: // если слушателей больше нет, отключим сервис quitAll() close(c.Send) delete(h.connections, c) } } case m := <-h.command: for _, val := range m { console.Exec(string(val)) } } } }
func run() { nightclub.Capacity = 20 console := console.GetPtr() console.AddInt("capacity", &nightclub.Capacity) console.Printf("-------------------------------") console.Printf("Night club v1.0") console.Printf("-------------------------------") console.Printf("Use help command for more info") console.Printf("First your need open club") console.AddCommand("exit", exit) console.AddCommand("club", openClose) console.AddCommand("ct", currentTrack) console.AddCommand("status", getHumanStatus) console.AddCommand("people", people) go func() { c := time.Tick(1 * time.Second) for now := range c { nightclub.DjUpdate(now) } }() for { reader := bufio.NewReader(os.Stdin) fmt.Print("#~: ") str, _ := reader.ReadString('\n') console.Exec(strings.Split(str, "\n")[0]) if quit { break } } }