package onetomany.bargainingchipsgame.players; import java.util.concurrent.BlockingQueue; import onetomany.bargainingchipsgame.Bundle; import onetomany.bargainingchipsgame.interactions.Offer; public abstract class BilateralAgent implements Runnable { String name; BlockingQueue in; BlockingQueue out; protected abstract void receiveOffer(Bundle bundle); protected abstract Offer sendOffer(); protected abstract Offer sendOpeningOffer(); public BilateralAgent(String name, BlockingQueue in, BlockingQueue out) { super(); this.name = name; this.in = in; this.out = out; } @Override public void run() { Offer opening = sendOpeningOffer(); if (opening != null) try { out.put(opening); } catch (InterruptedException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } while (true) { Offer o; try { // Wait for incoming offer o = in.take(); Bundle bundle = o.getBundle(); receiveOffer(bundle); Offer sendOffer = sendOffer(); out.put(sendOffer); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } @Override public String toString() { return name; } }