123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- // package warbot -- бот для игры в wartank
- package warbot
- import (
- "fmt"
- "wartank/pkg/types"
- "wartank/server/serv_bots/warbot/angar"
- "wartank/server/serv_bots/warbot/tank"
- "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 // Пароль бота
- }
- // NewWarBot -- возвращает новый WarBot
- func NewWarBot(server types.IServer, name string) (*WarBot, error) {
- { // Предусловия
- if server == nil {
- return nil, fmt.Errorf("NewWarBot(): IApp is nil")
- }
- if name == "" {
- return nil, fmt.Errorf("NewWarBot(): name is empty")
- }
- }
- tank, err := tank.NewTank(server)
- if err != nil {
- return nil, fmt.Errorf("NewWarBot(): in create Tank, err=\n\t%w", err)
- }
- sf := &WarBot{
- server: server,
- store: server.Store(),
- tank: tank,
- name: name,
- }
- sf.pass, err = sf.store.Get("/bot/" + sf.name)
- if err != nil {
- return nil, fmt.Errorf("NewWarBot(): in get pass from store, err=\n\t%w", err)
- }
- { // 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)
- }
- }
- 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)
- }
- return sf, nil
- }
- // Name -- возвращает имя бота
- func (sf *WarBot) Name() string {
- return sf.name
- }
- // Pass -- возвращает пароль бота
- func (sf *WarBot) Pass() string {
- return sf.pass
- }
- // Run -- запускает бот в работу
- func (sf *WarBot) Run() (err error) {
- err = sf.botNet.Login()
- if err != nil {
- return fmt.Errorf("WarBot.Run(): bot(%q) in net login, err=\n\t%w", sf.name, err)
- }
- if err := sf.angar.Run(); err != nil {
- return fmt.Errorf("WarBot.Run(): bot(%q) in run angar, err=\n\t%w", sf.name, err)
- }
- return nil
- }
- // Error -- возвращает финальную ошибку работы, если была
- func (sf *WarBot) Error() error {
- return sf.errFinal
- }
- // Angar -- возвращает ангар игры
- func (sf *WarBot) Angar() types.IAngar {
- return sf.angar
- }
- // Tank -- возвращает объект танка
- func (sf *WarBot) Tank() types.ITank {
- return sf.tank
- }
- // BotNet -- возвращает ссылку на свой сетевой клиент
- func (sf *WarBot) BotNet() types.IBotNet {
- return sf.botNet
- }
|