You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

ChatModel.java 3.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. package grafikchat.model;
  2. import grafikchat.ohmlogger.OhmLogger;
  3. import java.awt.Point;
  4. import java.util.ArrayList;
  5. import java.util.Observable;
  6. import java.util.Observer;
  7. import java.util.logging.Logger;
  8. import java.util.prefs.Preferences;
  9. /**
  10. * Model of chat application. Handle communication
  11. *
  12. * @author marian
  13. */
  14. public class ChatModel extends Observable implements Observer
  15. {
  16. private boolean connected;
  17. private boolean mode;
  18. private boolean initialized;
  19. private Transceiver trx;
  20. private Figures intern;
  21. private Figures extern;
  22. private final Preferences prefs;
  23. private static Logger logger = OhmLogger.getLogger();
  24. /**
  25. * Constructor, initialize variables
  26. */
  27. public ChatModel()
  28. {
  29. connected = false;
  30. mode = false;
  31. initialized = false;
  32. trx = null;
  33. intern = new Figures();
  34. extern = new Figures();
  35. prefs = Preferences.userNodeForPackage(this.getClass());
  36. }
  37. /**
  38. * Get local drawn figure
  39. * @return internal figure
  40. */
  41. public Figures getIntern()
  42. {
  43. return intern;
  44. }
  45. /**
  46. * Get remote drawn figure
  47. * @return extern figure
  48. */
  49. public Figures getExtern()
  50. {
  51. return extern;
  52. }
  53. /**
  54. * Set new filename in preferences
  55. * @param f
  56. */
  57. public void setFilename(String f)
  58. {
  59. prefs.put("LAST_FILE", f);
  60. }
  61. /**
  62. * Get latest filename from preferences
  63. * @return filename
  64. */
  65. public String getFilename()
  66. {
  67. String last = prefs.get("LAST_FILE", "");
  68. System.out.println(last);
  69. return last;
  70. }
  71. /**
  72. * Connect to peer
  73. * @param mode true to use server mode, false to use client mode
  74. * @param ip IP to connect to (not relevant in server mode)
  75. * @param port Port to open or connect to (depending on selected mode)
  76. */
  77. public void connectToPeer(boolean mode, String ip, int port)
  78. {
  79. if (initialized) {
  80. logger.info("Chat already running");
  81. return;
  82. }
  83. this.mode = mode;
  84. if (mode) {
  85. logger.info("Running in server mode");
  86. trx = new Server(port);
  87. } else {
  88. logger.info("Running in client mode");
  89. trx = new Client(ip, port);
  90. }
  91. trx.registerObserver(this);
  92. trx.init();
  93. initialized = true;
  94. }
  95. /**
  96. * Send message to peer
  97. * @param d TransceiverData to transmit
  98. */
  99. public void sendMessage(TransceiverData d)
  100. {
  101. if (!initialized) {
  102. logger.warning("Chat not initialized");
  103. return;
  104. }
  105. trx.sendMessage(d);
  106. }
  107. /**
  108. * Get received data from network
  109. * @param obs Observable
  110. * @param object Received object
  111. */
  112. @Override
  113. public void update(Observable obs, Object object)
  114. {
  115. TransceiverData d = (TransceiverData)object;
  116. if (object instanceof TransceiverData) {
  117. switch (d.getEvent())
  118. {
  119. case NEWFIGURE:
  120. extern.newFigure();
  121. break;
  122. case NEWPOINT:
  123. extern.addPoint((Point)d.getObject());
  124. this.setChanged();
  125. this.notifyObservers(TransceiverDataEvent.NEWPOINT);
  126. break;
  127. case REPAINT:
  128. ArrayList<Figures> fig = (ArrayList<Figures>)d.getObject();
  129. intern.setFigures(fig.get(0).getFigures());
  130. extern.setFigures(fig.get(1).getFigures());
  131. this.setChanged();
  132. this.notifyObservers(TransceiverDataEvent.REPAINT);
  133. default:
  134. logger.warning("Unknown TransceiverDataEvent");
  135. }
  136. } else {
  137. logger.warning("Received invalid object");
  138. }
  139. }
  140. }