| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586 |
- // package arena_base -- база в игре
- package arena_base
- import (
- "fmt"
- "log"
- "sync"
- "time"
- . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
- . "wartank/app/lev0/types"
- "wartank/app/lev2/arena"
- )
- /*
- Объект базы в игре.
- */
- const (
- // времОжидПлат = "01:00" // Время ожидания платного ускорения
- // времОжидБесплат = "30:00" // Время ожидания бесплатного ускорения
- )
- // База -- объект базы
- type АренаБаза struct {
- ИАрена
- бот ИБот
- блок sync.Mutex
- }
- // НовБаза -- возвращает новую базу бота
- func НовБаза(конт ILocalCtx) ИАренаБаза {
- бот := конт.Get("бот").Val().(ИБот)
- log.Printf("НовБаза(): %q\n", бот.Имя())
- сам := &АренаБаза{
- бот: бот,
- }
- аренаКонфиг := arena.АренаКонфиг{
- Бот_: бот,
- АренаИмя_: "База",
- СтрКонтроль_: `<title>База</title>`,
- ФнПуск_: сам.пуск,
- СтрУрл_: "https://wartank.ru/buildings",
- }
- сам.ИАрена = arena.НовАрена(конт, аренаКонфиг)
- конт.Set("база", сам, "База бота")
- return сам
- }
- // Запускает базу в обработку
- func (сам *АренаБаза) Пуск() {
- log.Printf("Base.Run()\n")
- if err := сам.runComponent(); err != nil {
- panic(fmt.Errorf("Base.Run(): run, err=\n\t%w", err))
- }
- go сам.пуск()
- }
- // Собственная работа
- func (сам *АренаБаза) пуск() {
- фнЦикл := func() {
- defer time.Sleep(time.Minute * 2)
- сам.Обновить()
- }
- for {
- select {
- case <-сам.Контекст().Done():
- return
- // case <-сам.ВремяОпрос().КаналСиг():
- // фнЦикл()
- default:
- log.Printf("База.пуск()\n")
- фнЦикл()
- }
- }
- }
- // Запускает компоненты
- func (сам *АренаБаза) runComponent() error {
- log.Printf("Base.runComponent()\n")
- сам.блок.Lock()
- defer сам.блок.Unlock()
- return nil
- }
|