Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- public class MyServer {
- private ConcurrentHashMap<String, ISpeaker> mEndpointMap;
- private Queue<String> mOutputQueue;
- private ICallback mCallback = new ICallback() {
- public void putEndpoint(URI uri, ISpeaker speaker);
- public void removeEndpoint(URI uri);
- public void pushMessage(String message);
- }
- private Thread mClientThread;
- private Thread mListeningThread = new Thread() {
- public void run() {
- while(true) {
- ServerSocket sSocket = new ServerSocket(getPort());
- Socket socket = sSocket.accept();
- socket.setSoTimeout(0);
- TcpWorkerThread workerThread = new TcpWorkerThread(socket);
- workerThread.start();
- }
- }
- class TcpWorkerThread extends Thread {
- private Socket mSocket;
- public void run() {
- try(InputStreamReader sr = new InputStreamReader(socket.getInputStream())) {
- String content = "";
- int read;
- mServerCallback.putEndpoint(getUri(), new TcpStreaming(socket.getOutputStream());
- while((read = sr.read(buffer, 0, buffer.length)) != 1) {
- //READ & DO STUFF
- }
- mServerCallback.removeEndpoint(getUri()); //read has failed, remove from output map
- }
- }
- }
- }
- private Thread mSpeakerThread = new Thread() {
- public void run() {
- while(true) {
- if(mOutputQueue.size() > 0) {
- for(ISpeaker speaker : mEndpointMap.values()) {
- speaker.write(mOutputQueue.poll()));
- }
- }
- }
- };
- public void StartServer() {
- mListeningThread.start();
- mClientThread.start();
- mSpaeakerThread.start();
- }
- public class TcpStreaming implements ISpeaker {
- private final OutputStreamWriter os;
- private final URI uri;
- public TcpStreaming(URi endpoint, OutputStreamWriter os) {
- this.uri = endpoint;
- this.os = os;
- }
- public void write(String message) {
- os.write(message);
- os.flush();
- }
- }
Add Comment
Please, Sign In to add comment