fuel.go 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. // package fuel -- топливо в баке
  2. package fuel
  3. import (
  4. "fmt"
  5. "strconv"
  6. "strings"
  7. "time"
  8. "wartank/pkg/types"
  9. "wartank/server/serv_bots/warbot/tank/tankstat/static_param"
  10. )
  11. // Fuel -- топливо в баке
  12. type Fuel struct {
  13. angar types.IAngar
  14. fuel types.IStatParam
  15. }
  16. // NewFuel -- возвращает новый топливный бак
  17. func NewFuel(angar types.IAngar) (*Fuel, error) {
  18. if angar == nil {
  19. return nil, fmt.Errorf("NewFuel(): IAngar == nil")
  20. }
  21. sf := &Fuel{
  22. angar: angar,
  23. fuel: static_param.NewStaticParam("fuel"),
  24. }
  25. return sf, nil
  26. }
  27. // Run -- должен работать в отдельном потоке, контролит топливо
  28. func (sf *Fuel) Run() {
  29. count := 0 // Каждые 1500 сек (100 топлива проверять принудительно)
  30. for {
  31. time.Sleep(time.Second * 15)
  32. if sf.fuel.Val() == 0 || count >= 100 {
  33. sf.findFuel()
  34. count = 0
  35. continue
  36. }
  37. count++
  38. fuel := sf.fuel.Val()
  39. fuel++
  40. sf.fuel.SetVal(fuel)
  41. // log.Printf("Fuel.Run: val=%v\n", fuel)
  42. }
  43. }
  44. // Ищет в теле текста ангара топливо
  45. func (sf *Fuel) findFuel() {
  46. // _mt.Println("\tAngarNet.findFuel()")
  47. if sf.fuel.Val() > 314 {
  48. return
  49. }
  50. lstAngar := sf.angar.GetLst()
  51. var strOut string
  52. for _, strFuel := range lstAngar {
  53. if strings.Contains(strFuel, `<img title="Топливо" `) {
  54. strOut = strFuel
  55. break
  56. }
  57. }
  58. // Выделить топливо
  59. lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
  60. // Здесь бывает ошибка (когда возвращена пустая строка)
  61. if len(lstFuel) == 0 || lstFuel[0] == "" {
  62. return
  63. }
  64. strFuel := lstFuel[1]
  65. iFuel, err := strconv.Atoi(strFuel)
  66. if err != nil {
  67. // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
  68. return
  69. }
  70. sf.fuel.SetVal(iFuel)
  71. if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
  72. return
  73. }
  74. // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
  75. }
  76. // Fuel -- возвращает объект сстатическог опараметра топлива
  77. func (sf *Fuel) Fuel() types.IStatParam {
  78. return sf.fuel
  79. }