![JAR search and dependency download from the Maven repository](/logo.png)
jadex.micro.taskdistributor.TaskDistributorAgent Maven / Gradle / Ivy
The newest version!
package jadex.micro.taskdistributor;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.Map;
import java.util.Queue;
import jadex.future.Future;
import jadex.future.IFuture;
import jadex.micro.annotation.Agent;
import jadex.providedservice.annotation.Service;
@Agent
@Service
public class TaskDistributorAgent implements ITaskDistributor
{
protected Queue> tasks = new LinkedList>();
protected Queue>> requestors = new LinkedList>>();
protected Map> ongoingtasks = new HashMap>();
protected int cnt;
record TaskFuture(Task task, Future future){}
/**
* Publish a new task.
* @param task The task to publish.
*/
@Override
public IFuture publish(T task)
{
Future ret = new Future();
Task mytask = new Task(""+cnt++, task);
if(!requestors.isEmpty())
{
ongoingtasks.put(mytask.id(), ret);
requestors.poll().setResult(mytask);
}
else
{
tasks.add(new TaskFuture(mytask, ret));
}
return ret;
}
/**
* Set the result of a task.
* @param id The task id.
* @param result The result.
*/
public IFuture setTaskResult(String id, R result)
{
Future ret = ongoingtasks.get(id);
if(ret!=null)
{
ongoingtasks.remove(id);
ret.setResult(result);
}
else
{
System.out.println("Task not found: "+id);
}
return IFuture.DONE;
}
/**
* Set the exception of a task.
* @param id The task id.
* @param ex The exception.
*/
public IFuture setTaskException(String id, Exception ex)
{
Future ret = ongoingtasks.get(id);
if(ret!=null)
{
ongoingtasks.remove(id);
ret.setException(ex);
}
else
{
System.out.println("Task not found: "+id);
}
return IFuture.DONE;
}
/**
* Request a task.
* @return The next task (waits for a task).
*/
public IFuture> requestNextTask()
{
Future> ret = new Future>();
if(!tasks.isEmpty())
{
TaskFuture task = tasks.poll();
ongoingtasks.put(task.task().id(), task.future());
ret.setResult(task.task());
}
else
{
requestors.add(ret);
}
return ret;
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy