- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
- 41
- 42
- 43
- 44
- 45
- 46
- 47
- 48
- 49
- 50
- 51
- 52
- 53
- 54
- 55
- 56
- 57
- 58
- 59
- 60
- 61
- 62
- 63
- 64
- 65
- 66
- 67
- 68
- 69
- 70
- 71
- 72
- 73
- 74
- 75
- 76
- 77
if ($bc->{variable}{status} eq "1" && $bc->{variable}{wait} eq "mmua" && # Действия при получении подтверждения старта
$bc->{const}{data} =~ /^MMUA\(mkd;$bc->{config_params}{VIRTUAL_IP};.*;$bc->{config_params}{HOST};$bc->{config_params}{TCM_ID};.*;.*\)$/)
{
# $bc->{const}{info}->debug("START ACCEPT");
$bc->{const}{console_out} = "1.Answer SR-Slave: ok\n";
my $res = check_virtual_ip($bc, "0", "0", "1", "$bc->{config_params}{VIRTUAL_IP}");
$bc->{const}{info}->debug("check_virtual_ip = $res");
unless ($res =~ /.*exist already and not local.*/)
{
EXECUTE_START($bc);
$bc->{const}{info}->debug("Start permit");
}
else
{
$bc->{const}{info}->debug("Start not recommend");
}
$bc->{const}{console_out} .= "2.Answer check_virtual_ip: " . $res;
open (RESPONSE, ">$bc->{const}{res_start}");
print RESPONSE $bc->{const}{console_out};
close RESPONSE;
}
elsif ($bc->{variable}{status} eq "1" && $bc->{variable}{wait} eq "mmua") # Действия при ожидании подтверждения от Сервера старта
{
# $bc->{const}{info}->debug("START ACCEPT WAIT");
if ( $bc->{variable}{var_T1} >= $bc->{variable}{T1} )
{
$bc->{const}{console_out} = "1.Answer SR-Slave: slave doesn't answer\n";
my $res = check_virtual_ip($bc, "0", "0", "1", "$bc->{config_params}{VIRTUAL_IP}");
$bc->{const}{info}->debug("check_virtual_ip = $res");
unless( $res =~ /.*exist already and not local.*/ )
{
EXECUTE_START($bc);
$bc->{const}{info}->debug("Start permit");
}
else
{
$bc->{const}{info}->debug("Start not recommend");
}
$bc->{const}{console_out} .= "2.Answer check_virtual_ip: " . $res;
open (RESPONSE, ">$bc->{const}{res_start}");
print RESPONSE $bc->{const}{console_out};
close RESPONSE;
}
else
{
++$bc->{variable}{var_T1};
}
### Возможно жопа здесь !!!!!
}
elsif (-e $bc->{const}{req_restart} or $bc->{variable}{before_start} eq '1') # Действия при обноружении рестарта ручного или при первом запуске
{
# $bc->{const}{info}->debug("FIRST START / RESTART");
unlink $bc->{const}{req_restart};
unlink $bc->{const}{req_restart_program};
unless($bc->{variable}{before_start})
{
$bc->{const}{info}->debug("Found restart.req");
}
else
{
$bc->{const}{info}->debug("Starting MASTER -> send MMU...");
}
send_mmu ($bc, "1", "mmua-for-restart");
$bc->{variable}{delay} = $bc->{variable}{delay_max};
$bc->{variable}{before_start} = 2 if ($bc->{variable}{before_start} eq '1'); # Не будем отправлять INFO, пока не прийдёт подтверждение MMUA
}
Ещё несколько перлов из утилиты. Так записываем конечный автомат по функционированию протокола. Привёл только маленький кусочек из цепочки IF'ов.
Комментарии (0) RSS
Добавить комментарий