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