|
|
@@ -3,25 +3,29 @@ package warbot
|
|
|
|
|
|
import (
|
|
|
"fmt"
|
|
|
+ "log"
|
|
|
|
|
|
"wartank/pkg/components/safebool"
|
|
|
"wartank/pkg/types"
|
|
|
"wartank/server/serv_bots/warbot/angar"
|
|
|
"wartank/server/serv_bots/warbot/tank"
|
|
|
+ "wartank/server/serv_bots/warbot/warbot_config"
|
|
|
"wartank/server/serv_bots/warbot/warbot_net"
|
|
|
)
|
|
|
|
|
|
// WarBot -- бот для игры в вартанк
|
|
|
type WarBot struct {
|
|
|
- server types.IServer
|
|
|
- store types.IStore
|
|
|
- tank *tank.Tank
|
|
|
- errFinal error // Финальная ошибка работы, если была
|
|
|
- angar types.IAngar
|
|
|
- botNet types.IBotNet
|
|
|
- name string // Имя бота
|
|
|
- pass string // Пароль бота
|
|
|
- isRun *safebool.SafeBool
|
|
|
+ server types.IServer
|
|
|
+ store types.IStore
|
|
|
+ tank *tank.Tank
|
|
|
+ errFinal error // Финальная ошибка работы, если была
|
|
|
+ angar types.IAngar
|
|
|
+ botNet types.IBotNet
|
|
|
+ name string // Имя бота
|
|
|
+ pass string // Пароль бота
|
|
|
+ isRun *safebool.SafeBool
|
|
|
+ isAutoRun *safebool.SafeBool
|
|
|
+ config *warbot_config.WarBotConfig // Конфиг бота для хранения в базе
|
|
|
}
|
|
|
|
|
|
// NewWarBot -- возвращает новый WarBot
|
|
|
@@ -40,23 +44,31 @@ func NewWarBot(server types.IServer, name string) (*WarBot, error) {
|
|
|
return nil, fmt.Errorf("NewWarBot(): in create Tank, err=\n\t%w", err)
|
|
|
}
|
|
|
sf := &WarBot{
|
|
|
- server: server,
|
|
|
- store: server.Store(),
|
|
|
- tank: tank,
|
|
|
- name: name,
|
|
|
- isRun: safebool.NewSafeBool(),
|
|
|
+ server: server,
|
|
|
+ store: server.Store(),
|
|
|
+ tank: tank,
|
|
|
+ name: name,
|
|
|
+ isRun: safebool.NewSafeBool(),
|
|
|
+ isAutoRun: safebool.NewSafeBool(),
|
|
|
+ config: &warbot_config.WarBotConfig{},
|
|
|
}
|
|
|
- sf.pass, err = sf.store.Get("/bots/" + sf.name)
|
|
|
+ strData, err := sf.store.Get("/bots/" + sf.name)
|
|
|
if err != nil {
|
|
|
- return nil, fmt.Errorf("NewWarBot(): in get pass from store, err=\n\t%w", err)
|
|
|
+ return nil, fmt.Errorf("NewWarBot(): in get binData for WarBotConfig from store, err=\n\t%w", err)
|
|
|
}
|
|
|
-
|
|
|
+ if err = sf.config.Unmarshall(strData); err != nil {
|
|
|
+ return nil, fmt.Errorf("NewWarBot(): in unmarshall WarBotConfig from store, err=\n\t%w", err)
|
|
|
+ }
|
|
|
+ sf.pass = sf.config.Password_
|
|
|
{ // WarBotNet
|
|
|
sf.botNet, err = warbot_net.NewWarBotNet(server, sf)
|
|
|
if err != nil {
|
|
|
return nil, fmt.Errorf("NewWarBot(): in make IBotNet, err=\n\t%w", err)
|
|
|
}
|
|
|
}
|
|
|
+ if sf.config.IsAutoRun_ {
|
|
|
+ sf.isAutoRun.Set()
|
|
|
+ }
|
|
|
sf.angar, err = angar.NewAngar(sf.server, sf)
|
|
|
if err != nil {
|
|
|
return nil, fmt.Errorf("NewWarBot(): bot(%q) in make IAngar, err=\n\t%w", sf.name, err)
|
|
|
@@ -109,3 +121,31 @@ func (sf *WarBot) Tank() types.ITank {
|
|
|
func (sf *WarBot) BotNet() types.IBotNet {
|
|
|
return sf.botNet
|
|
|
}
|
|
|
+
|
|
|
+// IsAutoGame -- возвращает признак автоматичского запуска бота
|
|
|
+func (sf *WarBot) IsAutoGame() bool {
|
|
|
+ return sf.isAutoRun.Get()
|
|
|
+}
|
|
|
+
|
|
|
+// SetAutoGame -- устанавливает признак автоматического запуска бота
|
|
|
+func (sf *WarBot) SetAutoGame() {
|
|
|
+ sf.isAutoRun.Set()
|
|
|
+ sf.config.IsAutoRun_ = true
|
|
|
+ sf.saveConfig()
|
|
|
+}
|
|
|
+
|
|
|
+// ResetAutoGame -- сбрасывает признак автоматического запуска бота
|
|
|
+func (sf *WarBot) ResetAutoGame() {
|
|
|
+ sf.isAutoRun.Set()
|
|
|
+ sf.config.IsAutoRun_ = false
|
|
|
+ sf.saveConfig()
|
|
|
+}
|
|
|
+
|
|
|
+// Сохраняет конфиг бота
|
|
|
+func (sf *WarBot) saveConfig() {
|
|
|
+ err := sf.store.Put("/bots/"+sf.name, sf.config.Marshall())
|
|
|
+ if err != nil {
|
|
|
+ log.Printf("WarBot.saveConfig(): err=\n\t%v\n", err)
|
|
|
+ }
|
|
|
+ sf.server.CancelApp()
|
|
|
+}
|