Guest User

Untitled

a guest
Aug 15th, 2018
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.21 KB | None | 0 0
  1. public class MyServer {
  2. private ConcurrentHashMap<String, ISpeaker> mEndpointMap;
  3. private Queue<String> mOutputQueue;
  4. private ICallback mCallback = new ICallback() {
  5. public void putEndpoint(URI uri, ISpeaker speaker);
  6. public void removeEndpoint(URI uri);
  7. public void pushMessage(String message);
  8. }
  9.  
  10. private Thread mClientThread;
  11. private Thread mListeningThread = new Thread() {
  12. public void run() {
  13. while(true) {
  14. ServerSocket sSocket = new ServerSocket(getPort());
  15. Socket socket = sSocket.accept();
  16. socket.setSoTimeout(0);
  17. TcpWorkerThread workerThread = new TcpWorkerThread(socket);
  18. workerThread.start();
  19. }
  20. }
  21.  
  22. class TcpWorkerThread extends Thread {
  23. private Socket mSocket;
  24. public void run() {
  25. try(InputStreamReader sr = new InputStreamReader(socket.getInputStream())) {
  26. String content = "";
  27. int read;
  28. mServerCallback.putEndpoint(getUri(), new TcpStreaming(socket.getOutputStream());
  29. while((read = sr.read(buffer, 0, buffer.length)) != 1) {
  30. //READ & DO STUFF
  31. }
  32. mServerCallback.removeEndpoint(getUri()); //read has failed, remove from output map
  33. }
  34. }
  35. }
  36. }
  37. private Thread mSpeakerThread = new Thread() {
  38. public void run() {
  39. while(true) {
  40. if(mOutputQueue.size() > 0) {
  41. for(ISpeaker speaker : mEndpointMap.values()) {
  42. speaker.write(mOutputQueue.poll()));
  43. }
  44. }
  45. }
  46. };
  47.  
  48. public void StartServer() {
  49. mListeningThread.start();
  50. mClientThread.start();
  51. mSpaeakerThread.start();
  52. }
  53.  
  54. public class TcpStreaming implements ISpeaker {
  55. private final OutputStreamWriter os;
  56. private final URI uri;
  57.  
  58. public TcpStreaming(URi endpoint, OutputStreamWriter os) {
  59. this.uri = endpoint;
  60. this.os = os;
  61. }
  62.  
  63. public void write(String message) {
  64. os.write(message);
  65. os.flush();
  66. }
  67. }
Add Comment
Please, Sign In to add comment