ソースを参照

d03 Оптимизация под опросы

SVI 2 年 前
コミット
1415f92bee

+ 7 - 6
server/serv_bots/warbot/angar/angar.go

@@ -35,7 +35,7 @@ type Ангар struct {
 	топливоБой *angar_attack.ТопливоБой
 
 	бот      types.ИБот
-	конвой   *convoy.Convoy
+	конвой   *convoy.Конвой
 	сражение *battle.Сражение
 	битва    *batmas.BatMas
 	база     *base.База
@@ -115,7 +115,7 @@ func НовАнгар(bot types.ИБот) (*Ангар, error) {
 		}
 	}
 	{ // Convoy
-		сам.конвой, err = convoy.NewConvoy(сам.бот)
+		сам.конвой, err = convoy.НовКонвой(сам.бот)
 		if err != nil {
 			return nil, fmt.Errorf("НовАнгар(): in create IConvoy, err=\n\t%w", err)
 		}
@@ -160,7 +160,7 @@ func (sf *Ангар) Пуск() error {
 		if err := sf.топливоБой.Пуск(); err != nil {
 			return fmt.Errorf("Ангар.Пуск(): при пуске сетевой секции опыт за топливо, err=\n\t%w", err)
 		}
-		if err := sf.конвой.Run(); err != nil {
+		if err := sf.конвой.Пуск(); err != nil {
 			return fmt.Errorf("Ангар.Пуск(): при пуске конвоя, err=\n\t%w", err)
 		}
 		if err := sf.сражение.Пуск(); err != nil {
@@ -180,7 +180,7 @@ func (sf *Ангар) Пуск() error {
 	фнЦикл := func() bool {
 		sf.РесурсыОбновить()
 		sf.сетьСтат.Update()
-		sf.checkConvoy()
+		// sf.конвойПроверить()
 		if err := sf.Section.SetCountDown(60); err != nil {
 			sf.Закончить()
 			logrus.WithError(err).Errorln("Ангар.Run(): in update ICountTime")
@@ -295,8 +295,8 @@ func (sf *Ангар) База() types.ИБаза {
 	return sf.база
 }
 
-// Проверяет на исполнение конвоя
-func (sf *Ангар) checkConvoy() {
+/* Проверяет на исполнение конвоя
+func (sf *Ангар) конвойПроверить() {
 	var (
 		strOut   string
 		isFind   bool
@@ -316,6 +316,7 @@ func (sf *Ангар) checkConvoy() {
 	}
 	sf.конвой.UpdateLst()
 }
+*/
 
 // Ищет в теле текста ангара серебро
 func (sf *Ангар) сереброНайти() {

+ 8 - 6
server/serv_bots/warbot/angar/base/arsenal/arsenal.go

@@ -81,18 +81,20 @@ func (sf *Арсенал) пуск() {
 	for {
 		select {
 		case <-sf.бот.Кнт().Done():
-			sf.ВремяОпрос().Стоп()
 			return
 		case <-sf.ВремяОпрос().КаналСиг():
 			if sf.РежимТекущ().Получ() == "upgrade" {
 				continue
 			}
-			// if err := sf.updateArsenal(); err != nil {
-			// 	return fmt.Errorf("ArsenalNet.Run(): in update arsenal, err=\n\t%w", err)
-			// }
+		// if err := sf.updateArsenal(); err != nil {
+		// 	return fmt.Errorf("ArsenalNet.Run(): in update arsenal, err=\n\t%w", err)
+		// }
+		default:
+			if sf.РежимТекущ().Получ() != "upgrade" {
+				sf.сделать()
+			}
+			time.Sleep(time.Second * 305) // Интервал 5 минут и ещё 5 секунд (кратно интервалу производства -- от 40 минут до 1 часа)
 		}
-		sf.сделать()
-		time.Sleep(time.Second * 305) // Интервал 5 минут и ещё 5 секунд (кратно интервалу производства -- от 40 минут до 1 часа)
 	}
 }
 

+ 44 - 69
server/serv_bots/warbot/angar/convoy/convoy.go

@@ -19,100 +19,78 @@ import (
 	Объект конвоя в ангаре
 */
 
-// Convoy -- объект конвоя в ангаре
-type Convoy struct {
+// Конвой -- объект конвоя в ангаре
+type Конвой struct {
 	*section.Section
-	net      *convoynet.ConvoyNet
-	бот      types.ИБот
-	слава    types.ИСтатПарам // Количество славы
-	chAttack chan int         // Канал проведения атаки
+	net   *convoynet.ConvoyNet
+	бот   types.ИБот
+	слава types.ИСтатПарам // Количество славы
 }
 
-// NewConvoy -- возвращает новый *Convoy
-func NewConvoy(bot types.ИБот) (*Convoy, error) {
+// НовКонвой -- возвращает новый *Convoy
+func НовКонвой(bot types.ИБот) (*Конвой, error) {
 	section, err := section.NewSection(bot, "Конвой", `<title>Конвой</title>`)
 	if err != nil {
-		return nil, fmt.Errorf("NewConvoy(): in create ISection, err=\n\t%w", err)
+		return nil, fmt.Errorf("НовКонвой(): in create ISection, err=\n\t%w", err)
 	}
 	слава, ош := static_param.НовСтатПарам("glory")
 	if ош != nil {
-		return nil, fmt.Errorf("NewConvoy(): при создании статы славы, err=\n\t%w", ош)
+		return nil, fmt.Errorf("НовКонвой(): при создании статы славы, err=\n\t%w", ош)
 	}
-	sf := &Convoy{
-		Section:  section,
-		бот:      bot,
-		слава:    слава,
-		chAttack: make(chan int, 5),
+	sf := &Конвой{
+		Section: section,
+		бот:     bot,
+		слава:   слава,
 	}
 	sf.net, err = convoynet.NewConvoyNet(sf)
 	if err != nil {
-		return nil, fmt.Errorf("NewConvoy(): in create *SectionNet, err=\n\t%w", err)
+		return nil, fmt.Errorf("НовКонвой(): in create *SectionNet, err=\n\t%w", err)
 	}
 	return sf, nil
 }
 
-// Run -- запускает конвой в работу
-func (sf *Convoy) Run() error {
-	go sf.reservTick()
+// Пуск -- запускает конвой в работу
+func (sf *Конвой) Пуск() error {
 	go sf.run()
 	return nil
 }
 
 // UpdateLst -- принудительно обновляет состояние конвоя
-func (sf *Convoy) UpdateLst() {
+func (sf *Конвой) UpdateLst() {
 	if err := sf.net.UpdateLst(); err != nil {
 		log.Printf("Convoy.UpdateLst(): err=\n\t%v\n", err)
 	}
 }
 
 // Слава --возвращает счётчик славы конвоя
-func (sf *Convoy) Слава() types.ИСтатПарам {
+func (sf *Конвой) Слава() types.ИСтатПарам {
 	return sf.слава
 }
 
-// Если время конвоя замерло -- посылает контрольный сигнал на атаку
-func (sf *Convoy) reservTick() {
-	defer func() {
-		close(sf.chAttack)
-	}()
+// обрабатывает конвой
+func (сам *Конвой) run() {
 	for {
 		select {
-		case <-sf.бот.Кнт().Done():
+		case <-сам.бот.Кнт().Done():
 			return
 		default:
-			ct0 := sf.ВремяОпрос().Получ()
-			time.Sleep(time.Second * 60)
-			ct1 := sf.ВремяОпрос().Получ()
-			if ct1 != ct0 {
-				continue
-			}
-			sf.chAttack <- 1
+			сам.атаковать()
+			time.Sleep(time.Minute * 20)
 		}
 	}
 }
 
-// обрабатывает конвой
-func (sf *Convoy) run() {
-	sf.chAttack <- 1
-	for {
-		select {
-		case <-sf.бот.Кнт().Done():
-			sf.ВремяОпрос().Стоп()
-			return
-		case <-sf.ВремяОпрос().КаналСиг(): // Время истекло
-			sf.updateTime()
-			sf.updateGlory()
-		case <-sf.chAttack: // Сигнал к атаке
-			sf.attackConvoy() // в этом месте только атаковать
-			sf.checkWarForce()
-			sf.checkMaster()
-			sf.check6frage()
-		}
-	}
+func (сам *Конвой) атаковать() {
+	сам.updateTime()
+	сам.атакаНачать() // в этом месте только атаковать
+	сам.проверитьМиссияКонвой()
+	сам.проверитьМиссияМастерДозора()
+	сам.проверитьМиссия6фрагов()
+	сам.славаОбновить()
 }
 
-// Обновляет славу потребованию
-func (sf *Convoy) updateGlory() {
+// Обновляет славу по требованию
+func (sf *Конвой) славаОбновить() {
 	// Найти строку с упоминанием оставшегося времени конвоя
 	lstConvoy := sf.СписПолучить()
 	var (
@@ -141,7 +119,7 @@ func (sf *Convoy) updateGlory() {
 }
 
 // Обновляет оставшееся время конвоя
-func (sf *Convoy) updateTime() {
+func (sf *Конвой) updateTime() {
 	// Время подходит надо обновляться
 	if err := sf.net.UpdateLst(); err != nil {
 		logrus.WithError(err).Error("ConvoyNet.updateTime(): при выполнении GET-команды обновления")
@@ -168,16 +146,13 @@ func (sf *Convoy) updateTime() {
 		}
 		// <div class="bot"><a class="simple-but border red" w:id="startFight" href="convoy?7-1.ILinkListener-root-startFight"><span><span>В БОЙ!</span></span></a></div>
 		if strings.Contains(lastTime, `ILinkListener-root-startFight`) {
-			sf.chAttack <- 1
 			return
 		}
 		if strings.Contains(lastTime, `ILinkListener-root-findEnemy`) {
-			sf.chAttack <- 1
 			return
 		}
 		// <div class="bot"><a class="simple-but border" w:id="startMasking" href="convoy?12-1.ILinkListener-root-startMasking"><span><span>В БОЙ!</span></span></a></div>
 		if strings.Contains(lastTime, `ILinkListener-root-startMasking`) {
-			sf.chAttack <- 1
 			return
 		}
 	}
@@ -202,11 +177,11 @@ func (sf *Convoy) updateTime() {
 }
 
 // Проводит атаку на конвой
-func (sf *Convoy) attackConvoy() {
+func (сам *Конвой) атакаНачать() {
 	// Найти контрольную строку
 	var (
 		strOut    = ""
-		lstConvoy = sf.СписПолучить()
+		lstConvoy = сам.СписПолучить()
 		isFind    bool
 	)
 
@@ -243,19 +218,19 @@ func (sf *Convoy) attackConvoy() {
 		}
 	}
 	if !isFind { // Время ожидания
-		if err := sf.SetCountDown(1); err != nil {
+		if err := сам.SetCountDown(1); err != nil {
 			panic(fmt.Errorf("ConvoyNet.attackConvoy(): пр установке CountDown, err=\n\t%w", err))
 		}
 		return
 	}
 	strLink := strOut
 	// Можно начать разведку
-	lstConvoy, err := sf.net.Get(strLink)
+	lstConvoy, err := сам.net.Get(strLink)
 	if err != nil {
 		// log._rintf("ERRO ConvoyNet.attackConvoy(): при выполнении GET-команды 'В атаку!', err=\n\t%v\n", err)
 		return
 	}
-	if err = sf.СтрОбновить(lstConvoy); err != nil {
+	if err = сам.СтрОбновить(lstConvoy); err != nil {
 		for _, strOut = range lstConvoy {
 			if strings.Contains(strOut, `<title>Ошибка на сервере. Сообщение админу уже отправлено.</title>`) {
 				// log._rintf("ERRO ConvoyNet.attackConvoy(): при обновлении lstConvoy, strOut=\n\t%v\n", strOut)
@@ -271,15 +246,15 @@ func (sf *Convoy) attackConvoy() {
 		// log._rintf("ERRO ConvoyNet.attackConvoy(): при обновлении lstConvoy, err=\n\t%v\n", err)
 		return
 	}
-	for sf.attack() {
+	for сам.атакаИскать() {
 	}
-	if err := sf.SetCountDown(1); err != nil {
+	if err := сам.SetCountDown(1); err != nil {
 		panic(fmt.Errorf("ConvoyNet.attackConvoy(): при установке CountDown, err=\n\t%w", err))
 	}
 }
 
 // Выполняет атаку на конвой
-func (sf *Convoy) attack() (isNext bool) {
+func (sf *Конвой) атакаИскать() (isNext bool) {
 	// Вырезать ссылку на атаку
 	strOut := ""
 	lstConvoy := sf.СписПолучить()
@@ -321,7 +296,7 @@ func (sf *Convoy) attack() (isNext bool) {
 }
 
 // Забирает награду в конвое "Активируй боевую силу"
-func (sf *Convoy) checkWarForce() {
+func (sf *Конвой) проверитьМиссияКонвой() {
 	var (
 		strOut    string
 		isFind    bool
@@ -368,7 +343,7 @@ func (sf *Convoy) checkWarForce() {
 }
 
 // Забирает награду в конвое "Мастер дозора"
-func (sf *Convoy) checkMaster() {
+func (sf *Конвой) проверитьМиссияМастерДозора() {
 	var (
 		strOut    string
 		isFind    bool
@@ -415,7 +390,7 @@ func (sf *Convoy) checkMaster() {
 }
 
 // Забирает награду в конвое "Уничтожь 6 врагов в конвое"
-func (sf *Convoy) check6frage() {
+func (sf *Конвой) проверитьМиссия6фрагов() {
 	var (
 		strOut    string
 		isFind    bool