package jadex.bdi.examples.blackjack.dealer; import jadex.base.fipa.SFipa; import jadex.bdi.examples.blackjack.GameState; import jadex.bdi.examples.blackjack.Player; import jadex.bdi.runtime.IMessageEvent; import jadex.bdi.runtime.IParameterSet; import jadex.bdi.runtime.Plan; import jadex.commons.SUtil; import java.util.List; /** * Updates the belief "gamestate" and propage the gamestate. */ public class PropagateGameStatePlan extends Plan { /** * The body method is called on the * instatiated plan instance from the scheduler. */ public void body() { GameState gs = (GameState)getBeliefbase().getBelief("gamestate").getFact(); Player me = (Player)getBeliefbase().getBelief("myself").getFact(); if(gs.getDealer()==null) gs.setDealer(me); List olds = SUtil.arrayToList(gs.getPlayers()); Player[] news = (Player[])getBeliefbase().getBeliefSet("players").getFacts(); for(int i=0; i<news.length; i++) { olds.remove(news[i]); // Don't add myself to the game state. if(!news[i].equals(me)) gs.updateOrAddPlayer(news[i]); } for(int i=0; i<olds.size(); i++) { gs.removePlayer((Player)olds.get(i)); } Player[] players = (Player[])getBeliefbase().getBeliefSet("players").getFacts(); // System.out.println("propagating game state: "+gs); // System.out.println("to: "+SUtil.arrayToString(players)); if(players.length>0) { IMessageEvent inform = createMessageEvent("inform_game_state"); inform.getParameter(SFipa.CONTENT).setValue(gs); IParameterSet rec = inform.getParameterSet("receivers"); for(int i=0; i<players.length; i++) if(!rec.containsValue(players[i].getAgentID())) rec.addValue(players[i].getAgentID()); sendMessage(inform); } } }