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. server types.IServer
  14. angar types.IAngar
  15. bot types.IBot
  16. fuel types.IStatParam
  17. }
  18. // NewFuel -- возвращает новый топливный бак
  19. func NewFuel(bot types.IBot) (*Fuel, error) {
  20. if bot == nil {
  21. return nil, fmt.Errorf("NewFuel(): IBot == nil")
  22. }
  23. sf := &Fuel{
  24. server: bot.Server(),
  25. angar: bot.Angar(),
  26. bot: bot,
  27. fuel: static_param.NewStaticParam("fuel"),
  28. }
  29. return sf, nil
  30. }
  31. // Run -- должен работать в отдельном потоке, контролит топливо
  32. func (sf *Fuel) Run() {
  33. count := 0 // Каждые 1500 сек (100 топлива проверять принудительно)
  34. for {
  35. time.Sleep(time.Second * 15)
  36. if sf.fuel.Get() == 0 || count >= 100 {
  37. sf.findFuel()
  38. count = 0
  39. continue
  40. }
  41. count++
  42. fuel := sf.angar.Fuel().Get()
  43. fuel++
  44. sf.angar.Fuel().Set(fuel)
  45. // log.Printf("Fuel.Run: val=%v\n", fuel)
  46. }
  47. }
  48. // Ищет в теле текста ангара топливо
  49. func (sf *Fuel) findFuel() {
  50. // _mt.Println("\tAngarNet.findFuel()")
  51. if sf.fuel.Get() > 314 {
  52. return
  53. }
  54. lstAngar := sf.bot.Angar().GetLst()
  55. var strOut string
  56. for _, strFuel := range lstAngar {
  57. if strings.Contains(strFuel, `<img title="Топливо" `) {
  58. strOut = strFuel
  59. break
  60. }
  61. }
  62. // Выделить топливо
  63. lstFuel := strings.Split(strOut, `<img title="Топливо" alt="Топливо" src="/images/icons/fuel.png?2"/> `)
  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.bot.Angar().Fuel().Set(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. }