proc_fuel_find.go 3.2 KB

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