source: src/main/java/protocol/AsynchronousOffersProtocol.java@ 308

Last change on this file since 308 was 308, checked in by Tim Baarslag, 5 years ago

AsynchronousOffersProtocol

File size: 2.6 KB
Line 
1package protocol;
2
3import java.util.concurrent.BlockingQueue;
4import java.util.concurrent.LinkedBlockingQueue;
5
6import onetomany.bargainingchipsgame.interactions.Accept;
7import onetomany.bargainingchipsgame.interactions.Offer;
8import onetomany.bargainingchipsgame.interactions.OfferBy;
9
10public class AsynchronousOffersProtocol extends BilateralProtocol
11{
12
13 public AsynchronousOffersProtocol(BlockingQueue<Offer> fromA,
14 BlockingQueue<Offer> toA, BlockingQueue<Offer> fromB,
15 BlockingQueue<Offer> toB) {
16 super(fromA, toA, fromB, toB);
17 // TODO Auto-generated constructor stub
18 }
19
20 /**
21 * An offer is valid iff:
22 * 1) An offer or walk-away is sent by anyone at any time: $o_{t+1} \in \Omega \cup \{End\}$; or
23 * 2) A bid is accepted by the other: $o_{t+1} = Accept$ and $o_{t}\in\Omega$ and $g_t \neq g_{t+1}$; or
24 * 3) An accept is acknowledged, concluding the thread: $o_{t+1} = Accept$ and $o_{t} = Accept$ and $o_{t-1} \in \Omega$ and $g_{t-1} = g_{t+1} \neq g_{t}$.
25 */
26 @Override
27 protected boolean validate(OfferBy curOffer)
28 {
29 // 1)
30 if (curOffer.isBid() || curOffer.isEnd())
31 return true;
32
33 // 2)
34 if (log.size() < 2) // o_t should exist
35 return false;
36
37 String curSender = curOffer.getSender();
38 OfferBy prevOffer = getLastOffer();
39 String prevSender = prevOffer.getSender();
40 if (curOffer.isAccept() && prevOffer.isBid() && !curSender.equals(prevSender))
41 return true;
42
43 // 3)
44 if (log.size() < 3) // o_{t-1} should exist
45 return false;
46
47 OfferBy prevprev = log.get(log.size() - 2);
48 String prevprevSender = prevprev.getSender();
49
50 if (curOffer.isAccept() && prevOffer.isAccept()
51 && prevprev.isBid() && prevprevSender.equals(curSender)
52 && !curSender.equals(prevSender))
53 return true;
54
55 return false;
56 }
57
58 public static void main(String[] args) throws InterruptedException
59 {
60 BlockingQueue<Offer> fromA = new LinkedBlockingQueue<Offer>();
61 BlockingQueue<Offer> toA = new LinkedBlockingQueue<Offer>();
62 BlockingQueue<Offer> fromB = new LinkedBlockingQueue<Offer>();
63 BlockingQueue<Offer> toB = new LinkedBlockingQueue<Offer>();
64
65 AsynchronousOffersProtocol aop = new AsynchronousOffersProtocol(fromA, toA, fromB, toB);
66
67 Thread aopThread = new Thread(aop);
68 aopThread.start();
69
70 fromA.put(Offer.getSampleOffer(3));
71 Thread.sleep(1000);
72 fromA.put(Offer.getSampleOffer(6));
73 Thread.sleep(1000);
74 fromB.put(Offer.getSampleOffer(7));
75 Thread.sleep(1000);
76 fromA.put(new Accept(Offer.getSampleOffer(6)));
77
78 Thread.sleep(1000);
79 System.out.println(toB);
80 }
81
82}
Note: See TracBrowser for help on using the repository browser.