source: src/main/java/bargainingchips/protocol/AsynchronousOffersProtocol.java@ 316

Last change on this file since 316 was 316, checked in by Tim Baarslag, 6 years ago

new packages complete

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