improved the status display

now only changes are displayed on the status making it easyer to see whats going on
This commit is contained in:
Madpeter 2020-10-14 19:40:20 +01:00
parent cb6e28875a
commit 2360396f0e
5 changed files with 173 additions and 33 deletions

View file

@ -159,25 +159,33 @@ namespace BetterSecondBotShared.bottypes
return "0,0,0"; return "0,0,0";
} }
protected string BasicBot_laststatus = "";
public virtual string GetStatus() public virtual string GetStatus()
{ {
string reply = "Info: No client";
if (Client != null) if (Client != null)
{ {
reply = "Network: Not ready";
if (Client.Network != null) if (Client.Network != null)
{ {
reply = "Network: Not connected";
if (Client.Network.Connected) if (Client.Network.Connected)
{ {
reply = "Sim: Not on sim";
if (Client.Network.CurrentSim != null) if (Client.Network.CurrentSim != null)
{ {
return "Sim: " + Client.Network.CurrentSim.Name + " " + GetSimPositionAsString() + ""; reply = "Sim: " + Client.Network.CurrentSim.Name + " " + GetSimPositionAsString() + "";
} }
return "Sim: Not on sim";
} }
return "Network: Not connected";
} }
return "Network: Not ready";
} }
return "Info: No client";
if (reply != BasicBot_laststatus)
{
BasicBot_laststatus = reply;
return reply;
}
return "";
} }
protected virtual void LoginHandler(object o, LoginProgressEventArgs e) protected virtual void LoginHandler(object o, LoginProgressEventArgs e)

View file

@ -32,8 +32,12 @@ namespace BetterSecondBot
string NewStatusMessage = Bot.GetStatus(); string NewStatusMessage = Bot.GetStatus();
if (NewStatusMessage != Bot.LastStatusMessage) if (NewStatusMessage != Bot.LastStatusMessage)
{ {
Bot.LastStatusMessage = NewStatusMessage; NewStatusMessage = NewStatusMessage.Trim();
Bot.Log2File(LogFormater.Status(Bot.LastStatusMessage),ConsoleLogLogLevel.Status); if (NewStatusMessage.Replace(" ","") != "")
{
Bot.LastStatusMessage = NewStatusMessage;
Bot.Log2File(LogFormater.Status(Bot.LastStatusMessage, false), ConsoleLogLogLevel.Status);
}
} }
Thread.Sleep(1000); Thread.Sleep(1000);
} }

View file

@ -22,6 +22,7 @@ namespace BSB.bottypes
protected long max_db_storage_age = 240; // how long should we keep an avatar in memory before clearing (in secs) [now - last accessed] protected long max_db_storage_age = 240; // how long should we keep an avatar in memory before clearing (in secs) [now - last accessed]
protected bool show_av_storage_info_in_status = true; protected bool show_av_storage_info_in_status = true;
protected string AVstorageBot_laststatus = "";
public override string GetStatus() public override string GetStatus()
{ {
@ -52,7 +53,12 @@ namespace BSB.bottypes
reply = " (AVStorage: Empty)"; reply = " (AVStorage: Empty)";
} }
} }
return base.GetStatus() + reply; if (reply != AVstorageBot_laststatus)
{
AVstorageBot_laststatus = reply;
return base.GetStatus() + reply;
}
return base.GetStatus();
} }
protected void ReTriggerUUIDtoName() protected void ReTriggerUUIDtoName()

View file

@ -15,7 +15,7 @@ namespace BSB.bottypes
} }
} }
} }
string DiscordBotStatus_laststatus = "";
public override string GetStatus() public override string GetStatus()
{ {
string reply = ""; string reply = "";
@ -39,7 +39,12 @@ namespace BSB.bottypes
{ {
reply = " " + reply; reply = " " + reply;
} }
return base.GetStatus() + reply; if (reply != DiscordBotStatus_laststatus)
{
DiscordBotStatus_laststatus = reply;
return base.GetStatus() + reply;
}
return base.GetStatus();
} }
} }

View file

@ -21,40 +21,40 @@ namespace BSB.bottypes
teleported = false; teleported = false;
reconnect_mode = true; reconnect_mode = true;
last_reconnect_attempt = helpers.UnixTimeNow(); last_reconnect_attempt = helpers.UnixTimeNow();
addon = " [Connection lost - switching to recovery mode]"; addon = "Connection lost - switching to recovery mode";
} }
else if ((login_auto_logout == false) && (reconnect_mode == false) && (after_login_fired == false)) else if ((login_auto_logout == false) && (reconnect_mode == false) && (after_login_fired == false))
{ {
addon = " [" + login_status + "]"; addon = login_status;
} }
else if ((login_auto_logout == false) && (reconnect_mode == true) && (dif > 120)) else if ((login_auto_logout == false) && (reconnect_mode == true) && (dif > 120))
{ {
addon = " [@Attempting reconnect]"; addon = "Attempting reconnect";
last_reconnect_attempt = helpers.UnixTimeNow(); last_reconnect_attempt = helpers.UnixTimeNow();
reconnect = true; reconnect = true;
Start(); Start();
} }
else if ((login_auto_logout == false) && (reconnect_mode == true) && (dif <= 120)) else if ((login_auto_logout == false) && (reconnect_mode == true) && (dif <= 120))
{ {
addon = " [W4>Reconnect attempt timer]"; addon = "W4>Reconnect attempt timer";
} }
else if ((login_auto_logout == true) && (auto_logout_login_recover == false)) else if ((login_auto_logout == true) && (auto_logout_login_recover == false))
{ {
auto_logout_login_recover = true; auto_logout_login_recover = true;
last_reconnect_attempt = helpers.UnixTimeNow(); last_reconnect_attempt = helpers.UnixTimeNow();
addon = " [W4>" + login_status + " (10 secs)]"; addon = "W4>" + login_status + " (10 secs)";
} }
else if ((login_auto_logout == true) && (auto_logout_login_recover == true) && (dif >= 10)) else if ((login_auto_logout == true) && (auto_logout_login_recover == true) && (dif >= 10))
{ {
login_auto_logout = false; login_auto_logout = false;
auto_logout_login_recover = false; auto_logout_login_recover = false;
last_reconnect_attempt = helpers.UnixTimeNow(); last_reconnect_attempt = helpers.UnixTimeNow();
addon = " [Restarting first login]"; addon = "Restarting first login";
Start(); Start();
} }
else else
{ {
addon = " [" + login_status + "]"; addon = login_status;
} }
Debug("Function/LoggedOutNextAction - "+ addon); Debug("Function/LoggedOutNextAction - "+ addon);
return addon; return addon;
@ -69,6 +69,7 @@ namespace BSB.bottypes
protected string last_attempted_teleport_region = ""; protected string last_attempted_teleport_region = "";
protected Dictionary<string, long> avoid_sims = new Dictionary<string, long>(); protected Dictionary<string, long> avoid_sims = new Dictionary<string, long>();
protected bool SimShutdownAvoid; protected bool SimShutdownAvoid;
protected long SimShutdownAvoidCooldown = 0;
protected bool auto_logout_login_recover; protected bool auto_logout_login_recover;
protected void ChangeSim(object sender,SimChangedEventArgs e) protected void ChangeSim(object sender,SimChangedEventArgs e)
@ -112,22 +113,47 @@ namespace BSB.bottypes
public void ResetAtHome() public void ResetAtHome()
{ {
Debug("@home / ResetAtHome");
last_tested_home_id = -1; last_tested_home_id = -1;
last_tp_attempt_unixtime = 0; after_login_fired = false;
teleported = false; teleported = false;
reconnect_mode = true; reconnect_mode = false;
last_tp_attempt_unixtime = 0;
} }
protected void AvoidSim(string simname) protected void AvoidSim(string simname)
{ {
if(avoid_sims.ContainsKey(simname) == false) if (avoid_sims.ContainsKey(simname) == false)
{ {
Debug("@home / AvoidSim: " + simname);
avoid_sims.Add(simname, helpers.UnixTimeNow() + 240); // @home will avoid that sim for the next 4 mins avoid_sims.Add(simname, helpers.UnixTimeNow() + 240); // @home will avoid that sim for the next 4 mins
} }
} }
protected void ExpireOldAvoidSims()
{
if(avoid_sims.Count() > 0)
{
List<string> remove_keys = new List<string>();
long now = helpers.UnixTimeNow();
foreach (KeyValuePair<string,long> avoids in avoid_sims)
{
if(avoids.Value < now)
{
remove_keys.Add(avoids.Key);
}
}
if(remove_keys.Count() > 0)
{
foreach (string a in remove_keys)
{
avoid_sims.Remove(a);
}
}
}
}
public bool IsSimHome(string simname) public bool IsSimHome(string simname)
@ -156,6 +182,60 @@ namespace BSB.bottypes
} }
public string LoggedinAthome()
{
string addon = "";
if(IsSimHome(Client.Network.CurrentSim.Name) == true)
{
addon = "Home region";
}
else
{
if (SimShutdownAvoid == false)
{
long dif = SimShutdownAvoidCooldown - helpers.UnixTimeNow();
if (dif < 0)
{
dif = helpers.UnixTimeNow() - last_tp_attempt_unixtime;
if (dif > 30)
{
addon = GotoNextHomeRegion(false);
}
else
{
addon = "Busy with TP cooldown";
}
}
else
{
if (avoid_sims.Keys.Contains(Client.Network.CurrentSim.Name) == true)
{
dif = helpers.UnixTimeNow() - last_tp_attempt_unixtime;
if (dif > 30)
{
addon = GotoNextHomeRegion(true);
}
else
{
addon = "Avoid teleport underway";
}
}
else
{
double mins = Math.Round((double)dif / 60);
int min = (int)mins;
addon = "Hiding from the storm ("+min.ToString()+" mins remain)";
}
}
}
else
{
addon = "Avoiding sim shutdown [TP underway]";
}
}
return addon;
}
public string GotoNextHomeRegion() public string GotoNextHomeRegion()
{ {
return GotoNextHomeRegion(false); return GotoNextHomeRegion(false);
@ -173,14 +253,25 @@ namespace BSB.bottypes
{ {
last_tested_home_id = 0; last_tested_home_id = 0;
} }
TeleportWithSLurl(myconfig.Basic_HomeRegions[last_tested_home_id]); string Slurl = myconfig.Basic_HomeRegions[last_tested_home_id];
return " [@home **** active teleport: "+ last_attempted_teleport_region+"***]"; string simname = helpers.RegionnameFromSLurl(Slurl);
if (avoid_sims.Keys.Contains(simname) == false)
{
string whyrejected = TeleportWithSLurl(Slurl);
if (whyrejected == "ok")
{
return "**** active teleport: " + last_attempted_teleport_region + "***";
}
return "TP to " + simname + " rejected - " + whyrejected;
}
return "unable to teleport to home region: " + simname + " currently in avoid list";
} }
return " [@home No home regions]"; return "No home regions";
} }
else else
{ {
SimShutdownAvoid = true; SimShutdownAvoid = true;
SimShutdownAvoidCooldown = helpers.UnixTimeNow() + (60 * 10);
string UseSLurl = ""; string UseSLurl = "";
foreach (string Slurl in myconfig.Basic_HomeRegions) foreach (string Slurl in myconfig.Basic_HomeRegions)
{ {
@ -208,18 +299,38 @@ namespace BSB.bottypes
} }
} }
protected string AtHomeStatus(string message)
{
return " [@Home: " + message+"]";
}
protected string AtHome_laststatus = "";
public override string GetStatus() public override string GetStatus()
{ {
ExpireOldAvoidSims();
string reply;
if (Client.Network.Connected == true) if (Client.Network.Connected == true)
{ {
return base.GetStatus(); if (Client.Network.CurrentSim != null)
{
reply = AtHomeStatus(LoggedinAthome());
}
else
{
reply = AtHomeStatus("No Sim");
}
} }
else else
{ {
return base.GetStatus() + LoggedOutNextAction(); reply = AtHomeStatus(LoggedOutNextAction());
} }
if (reply != AtHome_laststatus)
{
AtHome_laststatus = reply;
return base.GetStatus() + reply;
}
return base.GetStatus();
} }
protected override void AfterBotLoginHandler() protected override void AfterBotLoginHandler()
@ -228,24 +339,26 @@ namespace BSB.bottypes
last_tp_attempt_unixtime = helpers.UnixTimeNow() + 30; last_tp_attempt_unixtime = helpers.UnixTimeNow() + 30;
if (reconnect == true) if (reconnect == true)
{ {
last_tested_home_id = -1; ResetAtHome();
after_login_fired = false;
teleported = false;
reconnect_mode = false;
} }
else else
{ {
Client.Self.AlertMessage += AlertEvent; Client.Self.AlertMessage += AlertEvent;
Client.Network.SimChanged += ChangeSim; Client.Network.SimChanged += ChangeSim;
} }
if (UUID.TryParse(myconfig.Setting_DefaultSit_UUID, out UUID sit_UUID) == true) if (IsSimHome(Client.Network.CurrentSim.Name) == true)
{ {
Client.Self.RequestSit(sit_UUID, Vector3.Zero); if (UUID.TryParse(myconfig.Setting_DefaultSit_UUID, out UUID sit_UUID) == true)
{
Client.Self.RequestSit(sit_UUID, Vector3.Zero);
}
} }
after_login_fired = true; after_login_fired = true;
} }
public void TeleportWithSLurl(string sl_url)
public string TeleportWithSLurl(string sl_url)
{ {
string[] bits = helpers.ParseSLurl(sl_url); string[] bits = helpers.ParseSLurl(sl_url);
if (helpers.notempty(bits) == true) if (helpers.notempty(bits) == true)
@ -261,9 +374,13 @@ namespace BSB.bottypes
last_tp_attempt_unixtime = helpers.UnixTimeNow(); last_tp_attempt_unixtime = helpers.UnixTimeNow();
last_attempted_teleport_region = regionName; last_attempted_teleport_region = regionName;
Client.Self.Teleport(regionName, new Vector3(posX, posY, posZ)); Client.Self.Teleport(regionName, new Vector3(posX, posY, posZ));
return "ok";
} }
return "Sim in avoid list";
} }
return "Invaild bits length for SLurl";
} }
return "No bits decoded";
} }
public void SetHome(string sl_url) public void SetHome(string sl_url)