فهرست منبع

d02 Исправление получения статы бота

SVI 2 سال پیش
والد
کامیت
00208e5fc5

+ 2 - 0
pkg/types/iangar.go

@@ -33,4 +33,6 @@ type IAngar interface {
 	Base() IBase
 	// Missions -- возвращает объект миссий
 	Missions() IMissions
+	// Make -- создаёт компоненты ангара
+	Make()error
 }

+ 2 - 0
pkg/types/iserv_bot.go

@@ -20,4 +20,6 @@ type IServBot interface {
 	ResetAutoGame()
 	// IsAutoGame -- возвращает признак автоматического начала игры
 	IsAutoGame() bool
+	// Make -- создайт компоненты бота
+	Make() error
 }

+ 22 - 9
server/gui/win_main/win_main.go

@@ -27,6 +27,7 @@ type WinMain struct {
 	entLogin      *widget.Label      // Логин текущего бота
 	entPass       *widget.Entry      // Пароль текущего бота
 	checkAutoGame *widget.Check      // Автоматически играть при старте
+	lblFuel       *widget.Label      // Топливо бота
 }
 
 // NewWinMain -- возвращает новое главное окно
@@ -41,14 +42,6 @@ func NewWinMain(serv types.IServer) (*WinMain, error) {
 	}
 	green := color.NRGBA{R: 0, G: 180, B: 0, A: 255}
 	text1 := canvas.NewText("Список ботов", green)
-	sf.boxLeft = container.NewVBox(text1)
-	{ // Получить список всех ботов
-		lstBots := sf.serv.ServBots().ListBot()
-		for _, bot := range lstBots {
-			sf.botLogin = bot.Name()
-			sf.addBot()
-		}
-	}
 
 	btnAddBot := widget.NewButton("Добавить бота", sf.btnAddClick)
 	btnExit := widget.NewButton("Выход", sf.btnExitClick)
@@ -64,10 +57,27 @@ func NewWinMain(serv types.IServer) (*WinMain, error) {
 		},
 	}
 	tabLogin := container.NewTabItem("Логин", formLogin)
-	sf.tabBot = container.NewAppTabs(tabLogin)
+
+	sf.lblFuel = widget.NewLabel("0")
+	itemFuel := widget.NewFormItem("Топливо", sf.lblFuel)
+	frmStat := widget.NewForm(itemFuel)
+	tabStat := container.NewTabItem("Статистика", frmStat)
+	sf.tabBot = container.NewAppTabs(tabLogin, tabStat)
+
+	sf.boxLeft = container.NewVBox(text1)
+
 	boxBorder := container.NewBorder(nil, nil, sf.boxLeft, nil, sf.boxLeft, sf.tabBot)
 	boxMain := container.NewBorder(nil, boxDown, nil, nil, boxBorder)
 	sf.Resize(fyne.NewSize(640, 480))
+
+	{ // Получить список всех ботов
+		lstBots := sf.serv.ServBots().ListBot()
+		for _, bot := range lstBots {
+			sf.botLogin = bot.Name()
+			sf.addBot()
+		}
+	}
+
 	sf.SetContent(boxMain)
 	return sf, nil
 }
@@ -139,6 +149,9 @@ func (sf *WinMain) btnBotClick() func() {
 		sf.entPass.Refresh()
 		sf.checkAutoGame.Checked = bot.IsAutoGame()
 		sf.checkAutoGame.Refresh()
+		fuel := bot.Angar().Fuel()
+		sf.lblFuel.Text = fmt.Sprint(fuel.Get())
+		sf.lblFuel.Refresh()
 	}
 }
 

+ 2 - 0
server/serv_bots/serv_bots.go

@@ -72,6 +72,7 @@ func (sf *ServBots) Load() error {
 		if err != nil {
 			return fmt.Errorf("ServBots.load(): in create bot %q, err=\n\t%w", name, err)
 		}
+		bot.Make()
 		if bot.IsAutoGame() {
 			go bot.Run()
 		}
@@ -86,6 +87,7 @@ func (sf *ServBots) BotStart(name string) error {
 	if bot == nil {
 		return fmt.Errorf("ServBots.BotStart(): bot(%v) not found", name)
 	}
+	bot.Make()
 	err := bot.Run()
 	if err != nil {
 		return fmt.Errorf("ServBots.BotStart(): in run bot(%v), err=\n\t%w", name, err)

+ 1 - 5
server/serv_bots/warbot/angar/angar.go

@@ -79,7 +79,7 @@ func NewAngar(server types.IServer, bot types.IServBot) (*Angar, error) {
 }
 
 // Одноразовый вызов для создания компонентов при запуске в работу
-func (sf *Angar) make() error {
+func (sf *Angar) Make() error {
 	sf.block.Lock()
 	defer sf.block.Unlock()
 	var err error
@@ -150,10 +150,6 @@ func (sf *Angar) make() error {
 // запускает обработку ангара
 func (sf *Angar) Run() error {
 	{ // Запуск компонентов
-		err := sf.make()
-		if err != nil {
-			return fmt.Errorf("Angar.Run(): при создании компонентов ангара, err=\n\t%w", err)
-		}
 		if err := sf.net.Run(); err != nil {
 			return fmt.Errorf("Angar.Run(): при пуске сетевой секции ангара, err=\n\t%w", err)
 		}

+ 17 - 5
server/serv_bots/warbot/warbot.go

@@ -86,14 +86,25 @@ func (sf *WarBot) Pass() string {
 	return sf.pass
 }
 
-// Run -- запускает бот в работу
-func (sf *WarBot) Run() (err error) {
+// Make -- создание компонентов бота
+func (sf *WarBot) Make() error {
 	if sf.isRun.Get() {
 		return nil
 	}
-	err = sf.botNet.Login()
+	err := sf.botNet.Login()
 	if err != nil {
-		return fmt.Errorf("WarBot.Run(): bot(%q) in net login, err=\n\t%w", sf.name, err)
+		return fmt.Errorf("WarBot.Make(): bot(%q) in net login, err=\n\t%w", sf.name, err)
+	}
+	if err := sf.angar.Make(); err != nil {
+		return fmt.Errorf("WarBot.Make(): при создании компонентов ангара, err=\n\t%w", err)
+	}
+	return nil
+}
+
+// Run -- запускает бот в работу
+func (sf *WarBot) Run() (err error) {
+	if sf.isRun.Get() {
+		return nil
 	}
 	if err := sf.angar.Run(); err != nil {
 		return fmt.Errorf("WarBot.Run(): bot(%q) in run angar, err=\n\t%w", sf.name, err)
@@ -143,7 +154,8 @@ func (sf *WarBot) ResetAutoGame() {
 
 // Сохраняет конфиг бота
 func (sf *WarBot) saveConfig() {
-	err := sf.store.Put("/bots/"+sf.name, sf.config.Marshall())
+	strConf := sf.config.Marshall()
+	err := sf.store.Put("/bots/"+sf.name, strConf)
 	if err != nil {
 		log.Printf("WarBot.saveConfig(): err=\n\t%v\n", err)
 	}