appPropMap.put(OPCODE, ANNOUNCE);
appPropMap.put(VENDOR, vendor);
appPropMap.put(ADDRESS,responseReceiver.getAddress());
AmqpValue amqpValue = new AmqpValue(message);
Section[] sections = { properties, appProperties, amqpValue};
final Message message1 = new Message(Arrays.asList(sections));
try
{
s.send(message1);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
Map<Object, Sender> sendingLinks = new HashMap<Object, Sender>();
Map<Object, Receiver> receivingLinks = new HashMap<Object, Receiver>();
boolean done = false;
while(!done)
{
boolean wait = true;
Message m = responseReceiver.receive(false);
if(m != null)
{
List<Section> payload = m.getPayload();
wait = false;
ApplicationProperties props = m.getApplicationProperties();
Map map = props.getValue();
String op = (String) map.get(OPCODE);
if("reset".equals(op))
{
for(Sender sender : sendingLinks.values())
{
try
{
sender.close();
Session session1 = sender.getSession();
session1.close();
session1.getConnection().close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
for(Receiver receiver : receivingLinks.values())
{
try
{
receiver.close();
receiver.getSession().close();
receiver.getSession().getConnection().close();
}
catch(Exception e)
{
e.printStackTrace();
}
}
sendingLinks.clear();
receivingLinks.clear();
}
else if(CREATE_LINK.equals(op))
{
Object linkRef = map.get(LINK_REF);
String host = (String) map.get(HOST);
Object o = map.get(PORT);
int port = Integer.parseInt(String.valueOf(o));
String user = (String) map.get(SASL_USER);
String password = (String) map.get(SASL_PASSWORD);
String role = (String) map.get(ROLE);
String address = (String) map.get(ADDRESS);
System.err.println("Host: " + host + "\tPort: " + port + "\t user: " + user +"\t password: " + password);
try{
Connection conn2 = new Connection(host, port, user, password, host);
Session session2 = conn2.createSession();
if(sendingLinks.containsKey(linkRef))
{
try
{
sendingLinks.remove(linkRef).close();
}
catch (Exception e)
{
}
}
if(receivingLinks.containsKey(linkRef))
{
try
{
receivingLinks.remove(linkRef).close();
}
catch (Exception e)
{
}
}
if(SENDER.equals(role))
{
System.err.println("%%% Creating sender (" + linkRef + ")");
Sender sender = session2.createSender(address);
sendingLinks.put(linkRef, sender);
}
else
{
System.err.println("%%% Creating receiver (" + linkRef + ")");
Receiver receiver2 = session2.createReceiver(address);
receiver2.setCredit(UnsignedInteger.valueOf(getWindowSize()), true);
receivingLinks.put(linkRef, receiver2);
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
else if(SEND_MESSAGE.equals(op))
{
Sender sender = sendingLinks.get(map.get(LINK_REF));
Properties m2props = new Properties();
Object messageId = map.get(MESSAGE_ID);
m2props.setMessageId(messageId);
Map m2propmap = new HashMap();
m2propmap.put(OPCODE, TEST);
m2propmap.put(VENDOR, vendor);
ApplicationProperties m2appProps = new ApplicationProperties(m2propmap);
Message m2 = new Message(Arrays.asList(m2props, m2appProps, new AmqpValue("AMQP-"+messageId)));
try
{
sender.send(m2);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
Map m3propmap = new HashMap();
m3propmap.put(OPCODE, LOG);
m3propmap.put(ACTION, SENT);
m3propmap.put(MESSAGE_ID, messageId);
m3propmap.put(VENDOR, vendor);
m3propmap.put(MESSAGE_VENDOR, vendor);
Message m3 = new Message(Arrays.asList(new ApplicationProperties(m3propmap),
new AmqpValue("AMQP-"+messageId)));
try
{
s.send(m3);
}
catch (Exception e)
{
throw new RuntimeException(e);
}
}
responseReceiver.acknowledge(m);
}
else
{
for(Map.Entry<Object, Receiver> entry : receivingLinks.entrySet())
{
m = entry.getValue().receive(false);
if(m != null)
{
wait = false;
System.err.println("%%% Received message from " + entry.getKey());
Properties mp = m.getProperties();
ApplicationProperties ap = m.getApplicationProperties();
Map m3propmap = new HashMap();
m3propmap.put(OPCODE, LOG);
m3propmap.put(ACTION, RECEIVED);
m3propmap.put(MESSAGE_ID, mp.getMessageId());
m3propmap.put(VENDOR, vendor);
m3propmap.put(MESSAGE_VENDOR, ap.getValue().get(VENDOR));
Message m3 = new Message(Arrays.asList(new ApplicationProperties(m3propmap),
new AmqpValue("AMQP-"+mp.getMessageId())));
try
{
s.send(m3);
}
catch (Exception e)