// package battle_wait -- заставляет ожидать начало битвы package battle_wait import ( "fmt" // "log" "strings" "time" "wartank/pkg/components/section" "wartank/pkg/components/sectionnet" "wartank/pkg/types" ) // BattleWait -- ожидатель начала битвы type BattleWait struct { *section.Section server types.IServer bot types.IServBot net *sectionnet.SectionNet } // NewBattleWait -- возвращает новый ожидатель битвы func NewBattleWait(server types.IServer, bot types.IServBot) (*BattleWait, error) { { // Предусловия if server == nil { return nil, fmt.Errorf("NewBattleWait(): IServer == nil") } if bot == nil { return nil, fmt.Errorf("NewBattleWait():IServBot == nil") } } sf := &BattleWait{ server: server, bot: bot, } var err error { // ISection (ожидание) sf.Section, err = section.NewSection(server, `Сражения`) if err != nil { return nil, fmt.Errorf("NewBattleWait(): in create *Section, err=\n\t%w", err) } } return sf, nil } // Run -- запускает ожидание в работу func (sf *BattleWait) Run() { sf.net = sectionnet.NewSectionNet(sf.server, sf.bot, sf, "http://wartank.ru/pve") } // Wait -- ожидает начало сражения func (sf *BattleWait) Wait() { if err := sf.net.UpdateLst("Ближайшее сражение"); err != nil { // Здесь может уже обратный отсчёт перед сражением return } var ( strOut string lstBattle = sf.GetLst() isFind bool ) for _, strOut = range lstBattle { if strings.Contains(strOut, `до начала `) { isFind = true break } // if strings.Contains(strOut, `>ОБЫЧНЫЕ<`) { // Это уже битва // if len(sf.chBattle) == 0 { // sf.chBattle <- 1 // } // return // } } if !isFind { // Сражение уже идёт return } // Найдена строка ожидания начала сражения lstTime := strings.Split(strOut, `до начала `) strTime := lstTime[1] lstTime = strings.Split(strTime, ` (`) strTime = lstTime[0] if err := sf.CountDown().Parse(strTime); err != nil { // log._rintf("WARN BattleWait.Wait(): при установке времени ожидания сражения(%v)\n\terr=%v\n", strTime, err) return } // Зайти в цикложидания сражения for { countTime := sf.CountDown().Get() if countTime > 0 { time.Sleep(time.Millisecond * 500) // log.Printf("BattleWait.Wait(): countTime=%v\n", sf.CountDown().String()) continue } for len(sf.CountDown().ChanSig()) > 0 { <-sf.CountDown().ChanSig() } return } }