Advertisement
Guest User

Untitled

a guest
Mar 23rd, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.22 KB | None | 0 0
  1. /*
  2. * To change this license header, choose License Headers in Project Properties.
  3. * To change this template file, choose Tools | Templates
  4. * and open the template in the editor.
  5. */
  6.  
  7. package examples.message;
  8.  
  9. import jade.core.AID;
  10. import jade.core.Agent;
  11. import jade.core.behaviours.*;
  12. import jade.domain.DFService;
  13. import jade.domain.FIPAAgentManagement.DFAgentDescription;
  14. import jade.domain.FIPAAgentManagement.ServiceDescription;
  15. import jade.domain.FIPAException;
  16. import jade.lang.acl.*;
  17.  
  18. import java.io.ByteArrayInputStream;
  19. import java.io.ByteArrayOutputStream;
  20. import java.io.IOException;
  21. import java.io.ObjectInputStream;
  22. import java.io.ObjectOutputStream;
  23. import java.util.zip.GZIPInputStream;
  24. import java.util.zip.GZIPOutputStream;
  25. import org.apache.commons.codec.binary.Base64;
  26.  
  27. /**
  28. *
  29. * @author U
  30. */
  31. public class CalcAgentPlus extends Agent
  32. {
  33. static final Base64 base64 = new Base64();
  34.  
  35. public String serializeObjectToString(Object object) throws IOException
  36. {
  37. String s = null;
  38.  
  39. try
  40. {
  41. ByteArrayOutputStream arrayOutputStream = new ByteArrayOutputStream();
  42. GZIPOutputStream gzipOutputStream = new GZIPOutputStream(arrayOutputStream);
  43. ObjectOutputStream objectOutputStream = new ObjectOutputStream(gzipOutputStream);
  44.  
  45. objectOutputStream.writeObject(object);
  46. objectOutputStream.flush();
  47. gzipOutputStream.close();
  48.  
  49. objectOutputStream.flush();
  50. objectOutputStream.close();
  51.  
  52. s = new String(base64.encode(arrayOutputStream.toByteArray()));
  53. arrayOutputStream.flush();
  54. arrayOutputStream.close();
  55. }
  56. catch(Exception ex){}
  57.  
  58. return s;
  59. }
  60.  
  61. public Object deserializeObjectFromString(String objectString) throws IOException, ClassNotFoundException
  62. {
  63. Object obj = null;
  64. try
  65. {
  66. ByteArrayInputStream arrayInputStream = new ByteArrayInputStream(base64.decode(objectString));
  67. GZIPInputStream gzipInputStream = new GZIPInputStream(arrayInputStream);
  68. ObjectInputStream objectInputStream = new ObjectInputStream(gzipInputStream);
  69. obj = objectInputStream.readObject();
  70.  
  71. objectInputStream.close();
  72. gzipInputStream.close();
  73. arrayInputStream.close();
  74. }
  75. catch(Exception ex){}
  76. return obj;
  77. }
  78.  
  79. protected void setup()
  80. {
  81. //First set-up answering behaviour
  82. addBehaviour(new CyclicBehaviour(this)
  83. {
  84. public void action() {
  85. ACLMessage msg = receive();
  86. Calculation calc = new Calculation();
  87.  
  88. if (msg != null)
  89. {
  90. String msgContent = msg.getContent();
  91.  
  92. System.out.println("\n[CalcAgentPlus] Message Received");
  93. System.out.println("[CalcAgentPlus] Sender Agent : " + msg.getSender());
  94. System.out.println("[CalcAgentPlus] Message content [Base64 string]: " + msgContent);
  95.  
  96. try
  97. {
  98. calc = (Calculation)deserializeObjectFromString(msgContent);
  99. }
  100. catch(Exception ex)
  101. {
  102. System.out.println("\n[CalcAgentPlus] StrToObj conversion error: " + ex.getMessage());
  103. }
  104.  
  105. String operation = calc.getOperation();
  106. if (operation.equals("plus")) {
  107. int result = calc.getOperand1() + calc.getOperand2();
  108. calc.setResult(result);
  109. calc.setSuccess(true);
  110.  
  111. System.out.println("[CalcAgentPlus] Calculation result: " +
  112. calc.getOperand1() + " + " + calc.getOperand2() + " = " + calc.getResult());
  113.  
  114. }
  115. else if (operation.equals("minus")) {
  116. int result = calc.getOperand1() - calc.getOperand2();
  117. calc.setResult(result);
  118. calc.setSuccess(true);
  119.  
  120. System.out.println("[CalcAgentPlus] Calculation result: " +
  121. calc.getOperand1() + " - " + calc.getOperand2() + " = " + calc.getResult());
  122.  
  123. }
  124. else if (operation.equals("divide")) {
  125. int result = calc.getOperand1() / calc.getOperand2();
  126. calc.setResult(result);
  127. calc.setSuccess(true);
  128.  
  129. System.out.println("[CalcAgentPlus] Calculation result: " +
  130. calc.getOperand1() + " / " + calc.getOperand2() + " = " + calc.getResult());
  131.  
  132. }
  133. else if (operation.equals("multiply")) {
  134. int result = calc.getOperand1() * calc.getOperand2();
  135. calc.setResult(result);
  136. calc.setSuccess(true);
  137.  
  138. System.out.println("[CalcAgentPlus] Calculation result: " +
  139. calc.getOperand1() + " * " + calc.getOperand2() + " = " + calc.getResult());
  140.  
  141. }
  142. else {
  143. calc.setInfo("Operator not supported: " + operation);
  144. calc.setSuccess(false);
  145.  
  146. System.out.println("[CalcAgentPlus] Operator not supported: " + operation);
  147. }
  148.  
  149. String strObj = "";
  150. try
  151. {
  152. strObj = serializeObjectToString(calc);
  153. }
  154. catch (Exception ex)
  155. {
  156. System.out.println("\n[CalcAgentPlus] ObjToStr conversion error: " + ex.getMessage());
  157. }
  158.  
  159. if (calc.isSuccess()) {
  160. ACLMessage reply = msg.createReply();
  161. reply.setPerformative(ACLMessage.INFORM);
  162. reply.setContent(strObj);
  163. send(reply);
  164. } else {
  165. ACLMessage reply = msg.createReply();
  166. reply.setPerformative(ACLMessage.REFUSE);
  167. reply.setContent(strObj);
  168. send(reply);
  169. }
  170.  
  171. }
  172.  
  173. System.out.println("[CalcAgentPlus] CyclicBehaviour Block");
  174. block();
  175. }
  176. });
  177. }
  178. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement