WCF: Make it possible to launch also non-targetted commands

This commit is contained in:
JustArchi
2016-01-07 22:29:55 +01:00
parent 533058aa3f
commit 6a12a26612
3 changed files with 29 additions and 13 deletions

View File

@@ -98,6 +98,14 @@ namespace ArchiSteamFarm {
return true; return true;
} }
internal static string GetAnyBotName() {
foreach (string botName in Bots.Keys) {
return botName;
}
return null;
}
internal static int GetRunningBotsCount() { internal static int GetRunningBotsCount() {
return Bots.Count; return Bots.Count;
} }

View File

@@ -151,7 +151,7 @@ namespace ArchiSteamFarm {
} }
internal static void OnBotShutdown() { internal static void OnBotShutdown() {
if (Mode != EMode.Server && Bot.GetRunningBotsCount() == 0) { if (Bot.GetRunningBotsCount() == 0) {
Logging.LogGenericInfo("Main", "No bots are running, exiting"); Logging.LogGenericInfo("Main", "No bots are running, exiting");
ShutdownResetEvent.Set(); ShutdownResetEvent.Set();
} }
@@ -190,10 +190,10 @@ namespace ArchiSteamFarm {
continue; continue;
} }
Logging.LogGenericNotice("WCF", "Command sent: " + arg); Logging.LogGenericNotice("WCF", "Command sent: \"" + arg + "\"");
// We intentionally execute this async block synchronously // We intentionally execute this async block synchronously
Logging.LogGenericNotice("WCF", "Response received: " + WCF.SendCommand(arg)); Logging.LogGenericNotice("WCF", "Response received: \"" + WCF.SendCommand(arg) + "\"");
/* /*
Task.Run(async () => { Task.Run(async () => {
Logging.LogGenericNotice("WCF", "Response received: " + await WCF.SendCommand(arg).ConfigureAwait(false)); Logging.LogGenericNotice("WCF", "Response received: " + await WCF.SendCommand(arg).ConfigureAwait(false));
@@ -257,12 +257,14 @@ namespace ArchiSteamFarm {
// Check if we got any bots running // Check if we got any bots running
OnBotShutdown(); OnBotShutdown();
// Wait for signal to shutdown
ShutdownResetEvent.WaitOne(); ShutdownResetEvent.WaitOne();
// We got a signal to shutdown // We got a signal to shutdown, consider giving user some time to read the message
WCF.StopServer(); Thread.Sleep(5000);
Thread.Sleep(5000); // We're shuting down, consider giving user some time to read the message // This is over, cleanup only now
WCF.StopServer();
} }
} }
} }

View File

@@ -63,21 +63,27 @@ namespace ArchiSteamFarm {
} }
string[] args = input.Split(' '); string[] args = input.Split(' ');
if (args.Length < 2) {
return "ERROR: Too few arguments, expected: <Command> <BotName> (ExtraArgs)"; string botName;
if (args.Length > 1) { // If we have args[1] provided, use given botName
botName = args[1];
} else { // If not, just pick first one
botName = Bot.GetAnyBotName();
} }
// Bot name is args[1] if (string.IsNullOrEmpty(botName)) {
string botName = args[1]; return "ERROR: Invalid botName: " + botName;
}
Bot bot; Bot bot;
if (!Bot.Bots.TryGetValue(botName, out bot)) { if (!Bot.Bots.TryGetValue(botName, out bot)) {
return "ERROR: Couldn't find any bot named " + botName; return "ERROR: Couldn't find any bot named: " + botName;
} }
string command = '!' + input; Logging.LogGenericInfo("WCF", "Received command: \"" + input + "\"");
Logging.LogGenericInfo("WCF", "Received command: \"" + command + "\"");
string command = '!' + input;
string output = bot.HandleMessage(command).Result; // TODO: This should be asynchronous string output = bot.HandleMessage(command).Result; // TODO: This should be asynchronous
Logging.LogGenericInfo("WCF", "Answered to command: \"" + input + "\" with: \"" + output + "\""); Logging.LogGenericInfo("WCF", "Answered to command: \"" + input + "\" with: \"" + output + "\"");