]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/group/jms/JMSGroupConnector.java
[JMS] added naming service + integrated with PG.
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / group / jms / JMSGroupConnector.java
1 package at.ac.tuwien.sbc.valesriegler.group.jms;
2
3 import java.util.HashMap;
4
5 import javax.jms.Connection;
6 import javax.jms.DeliveryMode;
7 import javax.jms.JMSException;
8 import javax.jms.Message;
9 import javax.jms.MessageConsumer;
10 import javax.jms.MessageListener;
11 import javax.jms.MessageProducer;
12 import javax.jms.ObjectMessage;
13 import javax.jms.Session;
14
15 import org.apache.activemq.ActiveMQConnectionFactory;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
18
19 import at.ac.tuwien.sbc.valesriegler.common.AbstractAction;
20 import at.ac.tuwien.sbc.valesriegler.group.AbstractGroupConnector;
21 import at.ac.tuwien.sbc.valesriegler.group.Group;
22 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
23 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
24 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderResponse;
25 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
26 import at.ac.tuwien.sbc.valesriegler.group.actions.PayResponse;
27 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
28 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
29 import at.ac.tuwien.sbc.valesriegler.group.actions.TableResponse;
30 import at.ac.tuwien.sbc.valesriegler.waiter.actions.DeliverOrder;
31
32 /**
33  * This class handles the communication with other processes using JMS.
34  * 
35  * @author jan
36  * 
37  */
38 public class JMSGroupConnector extends AbstractGroupConnector implements MessageListener {
39         private static final Logger log = LoggerFactory.getLogger(JMSGroupConnector.class);
40         private static HashMap<String, JMSGroupConnector> connectors = new HashMap<String, JMSGroupConnector>();
41
42         public final String JMS_CONNECTSTRING;
43         private Connection connection;
44
45         public JMSGroupConnector(String address) {
46                 if (address == null)
47                         throw new IllegalArgumentException("Address may not be null!");
48                 JMS_CONNECTSTRING = address;
49                 init();
50         }
51
52         @Override
53         public void init() {
54                 try {
55                         connection = new ActiveMQConnectionFactory(JMS_CONNECTSTRING).createConnection();
56                         connection.start();
57                         Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
58                         MessageConsumer consumer = session.createConsumer(session.createQueue("GroupConnector"));
59                         consumer.setMessageListener(this);
60                 } catch (JMSException e) {
61                         log.error("EXCEPTION!", e);
62                 }
63         }
64
65         @Override
66         public void onMessage(Message msg) {
67                 try {
68                         msg.acknowledge();
69                         if (msg instanceof ObjectMessage) {
70                                 ObjectMessage objMsg = (ObjectMessage) msg;
71                                 Object obj = objMsg.getObject();
72
73                                 if (obj instanceof TableResponse) {
74                                         TableResponse tablerresponse = (TableResponse) obj;
75                                         log.debug("Received: " + tablerresponse);
76                                         Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(tablerresponse.getGroupdata().getId());
77                                         g.assignTable(tablerresponse.getTable(), tablerresponse.getWaiterId());
78                                         return;
79                                 } else if (obj instanceof OrderResponse) {
80                                         OrderResponse orderresponse = (OrderResponse) obj;
81                                         log.debug("Received: " + orderresponse);
82                                         Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(orderresponse.getGroupdata().getId());
83                                         g.orderReceived(orderresponse.getWaiterId());
84                                         return;
85                                 } else if (obj instanceof DeliverOrder) {
86                                         DeliverOrder deliverorder = (DeliverOrder) obj;
87                                         log.debug("Received: " + deliverorder);
88                                         Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(deliverorder.getGroupdata().getId());
89                                         g.deliverPizzas(deliverorder.getGroupdata().getOrder(), deliverorder.getWaiterId());
90                                         return;
91                                 } else if (obj instanceof PayResponse) {
92                                         PayResponse payresponse = (PayResponse) obj;
93                                         log.debug("Received: " + payresponse);
94                                         Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(payresponse.getGroupdata().getId());
95                                         g.payForPizzas(payresponse.getWaiterId());
96                                         return;
97                                 }
98
99                         }
100
101                         log.warn("Unknown messagetype received!");
102                 } catch (JMSException e) {
103                         log.error("EXCEPTION!", e);
104                 }
105         }
106
107         @Override
108         public void send(AbstractAction request) {
109                 try {
110                         if (request instanceof TableRequest) {
111                                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
112                                 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("WantToSitAtTable"));
113                                 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
114                                 wantToSitAtTable.send(session.createObjectMessage(request));
115
116                                 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
117                                 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
118                                 informPizzariaGui.send(session.createObjectMessage(request));
119                                 return;
120
121                         } else if (request instanceof OrderRequest) {
122                                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
123                                 MessageProducer wantToOrder = session.createProducer(session.createQueue("WantToOrder"));
124                                 wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
125                                 wantToOrder.send(session.createObjectMessage(request));
126                                 return;
127
128                         } else if (request instanceof PayRequest) {
129                                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
130                                 MessageProducer wantToPay = session.createProducer(session.createQueue("WantToPay"));
131                                 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
132                                 wantToPay.send(session.createObjectMessage(request));
133                                 return;
134
135                         } else if (request instanceof TableFree) {
136                                 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
137                                 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("TablesFree"));
138                                 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
139                                 wantToSitAtTable.send(session.createObjectMessage(request.getGroupdata().getTable()));
140
141                                 MessageProducer wantToLeave = session.createProducer(session.createQueue("WantToLeave"));
142                                 wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
143                                 wantToLeave.send(session.createObjectMessage(request));
144
145                                 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
146                                 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
147                                 informPizzariaGui.send(session.createObjectMessage(request));
148                                 session.close();
149                                 return;
150                         }
151                 } catch (JMSException e) {
152                         log.error("EXCEPTION!", e);
153                 }
154         }
155
156         public static HashMap getConnectors() {
157                 return connectors;
158         }
159         public static JMSGroupConnector getConnector(String key) {
160                 return connectors.get(key);
161         }
162
163 }