// package fuel -- топливо в баке package fuel import ( "fmt" "strconv" "strings" "time" "wartank/pkg/types" "wartank/server/serv_bots/warbot/tank/tankstat/static_param" ) // Fuel -- топливо в баке type Fuel struct { ангар types.ИАнгар топливо types.ИСтатПарам } // NewFuel -- возвращает новый топливный бак func NewFuel(angar types.ИАнгар) (*Fuel, error) { if angar == nil { return nil, fmt.Errorf("NewFuel(): IAngar == nil") } топливо, ош := static_param.НовСтатПарам("fuel") if ош != nil { return nil, fmt.Errorf("NewFuel(): при создании стат топливо, ош=\n\t%w", ош) } sf := &Fuel{ ангар: angar, топливо: топливо, } return sf, nil } // Run -- должен работать в отдельном потоке, контролит топливо func (sf *Fuel) Run() { count := 0 // Каждые 1500 сек (100 топлива проверять принудительно) for { time.Sleep(time.Second * 15) if sf.топливо.Получ() == 0 || count >= 100 { sf.findFuel() count = 0 continue } count++ fuel := sf.топливо.Получ() fuel++ sf.топливо.Уст(fuel) // log.Printf("Fuel.Run: val=%v\n", fuel) } } // Ищет в теле текста ангара топливо func (sf *Fuel) findFuel() { // _mt.Println("\tAngarNet.findFuel()") if sf.топливо.Получ() > 314 { return } lstAngar := sf.ангар.СписПолучить() var strOut string for _, strFuel := range lstAngar { if strings.Contains(strFuel, `Топливо `) // Здесь бывает ошибка (когда возвращена пустая строка) if len(lstFuel) == 0 || lstFuel[0] == "" { return } strFuel := lstFuel[1] iFuel, err := strconv.Atoi(strFuel) if err != nil { // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err) return } sf.топливо.Уст(iFuel) if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315 return } // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel) } // Fuel -- возвращает объект сстатическог опараметра топлива func (sf *Fuel) Fuel() types.ИСтатПарам { return sf.топливо }