Exemplo n.º 1
0
Arquivo: hub.go Projeto: e154/mds-club
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))
			}
		}
	}
}
Exemplo n.º 2
0
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
		}
	}
}