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 2.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107
  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. package netz.model;
  7. import ohmlogger.OhmLogger;
  8. import java.io.BufferedReader;
  9. import java.io.IOException;
  10. import java.io.InputStream;
  11. import java.io.InputStreamReader;
  12. import java.io.OutputStream;
  13. import java.io.OutputStreamWriter;
  14. import java.io.PrintWriter;
  15. import java.net.Socket;
  16. import java.util.concurrent.ExecutorService;
  17. import java.util.concurrent.Executors;
  18. import java.util.concurrent.Flow;
  19. import java.util.concurrent.SubmissionPublisher;
  20. import java.util.logging.Level;
  21. import java.util.logging.Logger;
  22. /**
  23. *
  24. * @author hd, chris
  25. */
  26. public class ChatModel implements Runnable
  27. {
  28. private static Logger lg = OhmLogger.getLogger();
  29. private ExecutorService eService;
  30. private SubmissionPublisher<String> iPublisher;
  31. private volatile boolean laufend;
  32. String nachricht;
  33. BufferedReader in;
  34. PrintWriter out;
  35. private Socket socket;
  36. public ChatModel()
  37. {
  38. laufend = false;
  39. iPublisher = new SubmissionPublisher<>();
  40. eService = Executors.newSingleThreadExecutor();
  41. }
  42. public void addSubscription(Flow.Subscriber<String> subscriber)
  43. {
  44. iPublisher.subscribe(subscriber);
  45. }
  46. public synchronized void start(){
  47. laufend = true;
  48. eService.submit(this);
  49. this.notifyAll();//muss sync
  50. lg.info("startet");
  51. }
  52. @Override
  53. public void run()
  54. {
  55. while(true){
  56. try {
  57. nachricht = in.readLine();
  58. lg.info("Nachricht empfangen: " + nachricht);
  59. iPublisher.submit(nachricht);//wenn neue Nachricht
  60. } catch (IOException ex) {
  61. lg.log(Level.SEVERE, ex.toString());
  62. }
  63. }
  64. }
  65. public void setSocket(Socket s) throws IOException {
  66. this.socket = s;
  67. InputStream iStream = s.getInputStream();
  68. OutputStream oStream = s.getOutputStream();
  69. InputStreamReader isr = new InputStreamReader(iStream, "UTF-8");
  70. OutputStreamWriter osr = new OutputStreamWriter(oStream, "UTF-8");
  71. in = new BufferedReader(isr);
  72. //BufferedWriter out = new BufferedWriter(osr);
  73. out = new PrintWriter(osr);
  74. start();
  75. }
  76. public void sendMessage(String msg)
  77. {
  78. if(laufend){
  79. lg.log(Level.INFO, "Sende Nachricht: " + msg);
  80. out.println(msg);
  81. out.flush();
  82. }
  83. else{
  84. lg.log(Level.INFO, "Keine Verbindung!");
  85. }
  86. }
  87. }