]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java
Merge branch 'master' of
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / Group.java
1 package at.ac.tuwien.sbc.valesriegler.group;
2
3 import org.slf4j.Logger;
4 import org.slf4j.LoggerFactory;
5
6 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
7 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
8 import at.ac.tuwien.sbc.valesriegler.types.GroupData;
9 import at.ac.tuwien.sbc.valesriegler.types.GroupState;
10 import at.ac.tuwien.sbc.valesriegler.types.Order;
11 import at.ac.tuwien.sbc.valesriegler.types.Table;
12
13 // class doing all the Group related work as required.
14 public class Group implements Runnable {
15         private static final Logger log = LoggerFactory.getLogger(Group.class);
16         private static int idNext = -1; // TODO: set to 0 after debugging!
17
18         final private GroupData groupData;
19
20         public GroupData getGroupData() {
21                 return groupData;
22         }
23
24         public Group() {
25                 groupData = new GroupData(++idNext);
26         }
27
28         @Override
29         public void run() {
30                 log.debug("Thread started for:" + this);
31                 try {
32                         Thread.sleep((long) (Math.random() * 10000));
33
34                         switch (groupData.getState()) {
35                         case NEW:
36                                 // TODO : may not happen!
37                                 break;
38                         case WAITING:
39                                 GroupAgent.getInstance().getGroupcomm().send(new TableRequest(groupData));
40                                 break;
41                         case SITTING:
42                                 GroupAgent.getInstance().getGroupcomm().send(new OrderRequest(groupData));
43                                 order();
44                                 break;
45                         case ORDER_PENDING:
46                                 break; // do nothing.
47                         case ORDERED:
48                                 break; // do nothing.
49                         case EATING:// just wait some more and request bill.
50                                 // MessageProducer wantToPay =
51                                 // session.createProducer(session.createQueue("WantToPay"));
52                                 // wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
53                                 // wantToPay.send(session.createObjectMessage(this));
54                                 break;
55                         case PAY:// leave table
56                                 // MessageProducer wantToLeave =
57                                 // session.createProducer(session.createQueue("LeftPizzaria"));
58                                 // wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
59                                 // wantToLeave.send(session.createObjectMessage(this));
60                                 break;
61                         case GONE:
62                                 break; // do nothing.
63                         default:
64                                 break;
65                         }
66
67                 } catch (InterruptedException e) {
68                         e.printStackTrace();
69                 }
70         }
71
72         // lets go to the pizzaria.
73         public void goGrabSomeFood() {
74                 log.debug("goGrabSomeFood(): " + this);
75                 groupData.setState(GroupState.WAITING);
76                 new Thread(this).start();
77         }
78
79         // get a table assigned by a waiter.
80         public void assignTable(Table t, int waiterID) {
81                 groupData.setState(GroupState.SITTING);
82                 groupData.setTable(t);
83                 groupData.setTableWaiter(waiterID);
84                 new Thread(this).start();
85                 log.debug("assignTable(): " + this);
86         }
87
88         // ask the group to send their order.
89         public void order() {
90                 groupData.setState(GroupState.ORDER_PENDING);
91                 new Thread(this).start();
92                 log.debug("order(): " + this);
93         }
94
95         // Waiter telling group he/she forwarded the order.
96         public void orderReceived(int waiter) {
97                 groupData.setState(GroupState.ORDERED);
98                 groupData.setOrderWaiter(waiter);
99                 new Thread(this).start();
100                 log.debug("orderReceived(): " + this);
101         }
102
103         // pizzas are here! nom nom nom
104         public void deliverPizzas(Order order, int waiter) {
105                 groupData.setState(GroupState.EATING);
106                 groupData.setOrder(order);
107                 groupData.setPizzaWaiter(waiter);
108                 new Thread(this).start();
109                 log.debug("bringOrderedPizzas(): " + this);
110         }
111 }