proc_fuel_find.go 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. // package proc_fuel_find -- процесс поиска топлива в баке
  2. package proc_fuel_find
  3. import (
  4. "strconv"
  5. "strings"
  6. "time"
  7. . "gitp78su.ipnodns.ru/svi/kern"
  8. . "gitp78su.ipnodns.ru/svi/kern/krn/ktypes"
  9. . "wartank/app/lev0/types"
  10. "wartank/app/lev1/stat_param"
  11. )
  12. // Топливо -- процесс поиска топлива в баке +1 каждые 15 сек
  13. type ПроцессТопливоНайти struct {
  14. ИАренаАнгар
  15. лог ILogBuf
  16. топливо ИСтатПарам
  17. }
  18. // НовТопливо -- возвращает новый топливный бак
  19. func НовПроцессТопливоНайти(конт ИБотКонтекст) ИПроцессТопливоНайти {
  20. сам := &ПроцессТопливоНайти{
  21. ИАренаАнгар: конт.Get("ангар").(ИАренаАнгар),
  22. лог: NewLogBuf(),
  23. топливо: stat_param.НовСтатПарам_("топливо"),
  24. }
  25. сам.лог.Debug("НовПроцессТопливоНайти\n")
  26. конт.Set("проц_поиск_топливо", сам, "Процесс поиска топлива")
  27. return сам
  28. }
  29. // Пуск -- блокирующий вызов поиска количества топлива
  30. func (сам *ПроцессТопливоНайти) Пуск() {
  31. // Каждые 15 сек +1 топливо
  32. for {
  33. time.Sleep(time.Second * 15)
  34. топливо := сам.топливо.Получ()
  35. топливо++
  36. сам.топливо.Уст(топливо)
  37. // log.Printf("Fuel.Run: val=%v\n", fuel)
  38. }
  39. }
  40. // Обновить -- ищет в теле текста ангара топливо
  41. func (сам *ПроцессТопливоНайти) Обновить() {
  42. // _mt.Println("\tAngarNet.findFuel()")
  43. сам.ИАренаАнгар.Обновить()
  44. lstAngar := сам.СписПолучить()
  45. var strOut string
  46. for _, strFuel := range lstAngar {
  47. if strings.Contains(strFuel, `<img title="Топливо" `) {
  48. strOut = strFuel
  49. break
  50. }
  51. }
  52. // Выделить топливо
  53. lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
  54. // Здесь бывает ошибка (когда возвращена пустая строка)
  55. if len(lstFuel) != 2 {
  56. сам.лог.Err("Обновить(): бот=%q, при поиске строки топлива, стр=\n\t%v\n", сам.Бот().Имя(), strOut)
  57. return
  58. }
  59. if lstFuel[1] == "" {
  60. сам.лог.Err("Обновить(): %q, пустое значение в строке топлива, стр=\n\t%v\n", сам.Бот().Имя(), strOut)
  61. return
  62. }
  63. strFuel := lstFuel[1]
  64. iFuel, err := strconv.Atoi(strFuel)
  65. if err != nil {
  66. // log._rintf("ERRO Fuel.findFuel(): fuel(%v) not number, err=\n\t%v\n", strFuel, err)
  67. return
  68. }
  69. сам.топливо.Уст(iFuel)
  70. if iFuel <= 314 { // Минимальное значение "топливного склада-1" -- 315
  71. return
  72. }
  73. // log._rintf("Fuel.findFuel():iFuel=%v\n", iFuel)
  74. }
  75. // Fuel -- возвращает объект статического параметра топлива
  76. func (сам *ПроцессТопливоНайти) Fuel() ИСтатПарам {
  77. return сам.топливо
  78. }