package jadex.bdi.examples.blackjack.player; import jadex.base.fipa.IDF; import jadex.base.fipa.IDFComponentDescription; import jadex.base.fipa.IDFServiceDescription; import jadex.bdi.runtime.IGoal; import jadex.bdi.runtime.Plan; import jadex.bridge.IComponentIdentifier; import jadex.bridge.ISearchConstraints; import jadex.commons.service.SServiceProvider; import java.util.Random; /** * */ public class PlayerSearchDealerPlan extends Plan { //-------- methods -------- /** * First the player searches a dealer, then sends a join-request to this * dealer. */ public void body() { //System.out.println("Searching dealer..."); // Create a service description to search for. IDF df = (IDF)SServiceProvider.getService(getScope().getServiceProvider(), IDF.class).get(this); IDFServiceDescription sd = df.createDFServiceDescription(null, "blackjack", null); IDFComponentDescription ad = df.createDFComponentDescription(null, sd); ISearchConstraints sc = df.createSearchConstraints(-1, 0); // Use a subgoal to search for a dealer-agent IGoal ft = createGoal("df_search"); ft.getParameter("description").setValue(ad); ft.getParameter("constraints").setValue(sc); dispatchSubgoalAndWait(ft); IDFComponentDescription[] result = (IDFComponentDescription[])ft.getParameterSet("result").getValues(); if(result==null || result.length==0) { getLogger().warning("No blackjack-dealer found."); fail(); } else { // at least one matching description found, getLogger().info(result.length + " blackjack-dealer found"); // choose one dealer randomly out of all the dealer-agents IComponentIdentifier dealer = result[new Random().nextInt(result.length)].getName(); getBeliefbase().getBelief("dealer").setFact(dealer); } } /** * Called when something went wrong (e.g. timeout). */ public void failed() { // Remove dealer fact. getBeliefbase().getBelief("dealer").setFact(null); } }