serverresponsereader.java

来自「JRemoteControl is a simple Java&#8482 dr」· Java 代码 · 共 146 行

JAVA
146
字号
/* * JRemCntl - Copyright (C) 2007 Filippo Di Vattimo <fildiv@gmail.com> * See COPYING */package fildiv.jremcntl.client.core;import java.io.IOException;import java.util.Vector;import fildiv.jremcntl.common.proto.JRemProtocolMessagesType;public class ServerResponseReader {	private JRemClientProtocol proto;	private Vector listeners;	private Thread theThread;	private boolean exit;	public ServerResponseReader(JRemClientProtocol proto,			ServerResponseListener listener) {		this.proto = proto;		listeners = new Vector();		addServerResponseReaderListener(listener);		theThread = new Thread() {			public void run() {				listen();			}		};		theThread.start();	}	public void addServerResponseReaderListener(ServerResponseListener listener) {		listeners.addElement(listener);	}	public void removeServerResponseReaderListener(			ServerResponseListener listener) {		listeners.removeElement(listener);	}		private void fireConnectionClosed() {		for (int index = 0; index < listeners.size(); ++index) {			ServerResponseListener l = (ServerResponseListener) listeners					.elementAt(index);			l.connectionClosed();		}	}	private void fireConnectionLost() {		for (int index = 0; index < listeners.size(); ++index) {			ServerResponseListener l = (ServerResponseListener) listeners					.elementAt(index);			l.connectionLost();		}	}	private void fireReceivedCommandResponse(ServerResponse response) {		for (int index = 0; index < listeners.size(); ++index) {			ServerResponseListener l = (ServerResponseListener) listeners					.elementAt(index);			l.receivedCommandResponse(response);		}	}	public synchronized void close() {				if (exit)			return;				exit = true;				if (theThread == null)			return;				synchronized (theThread) {			try {				// wait for a bit and interrupts the thread								theThread.wait(3000);				theThread.interrupt();							} catch (Exception e) {				// Nothing			}		}	}	private void listen() {		try {			while (!exit) {				ServerResponse sr = proto.retrieveServerResponse();								if (sr != null) {					switch (sr.getType()) {					case JRemProtocolMessagesType.MSG_TYPE_CLOSE_CONNECTION:						exit = true;						fireConnectionClosed();												break;					case JRemProtocolMessagesType.MSG_TYPE_SEND_COMMAND_RESULT:						fireReceivedCommandResponse(sr);						break;						default:						break;					}				}								theThread.sleep(50);			}		} catch (IOException e) {						if (!exit)				fireConnectionLost();				} catch (InterruptedException e) {			// fall in from close method		} catch(Exception e) {			// Never fall in (I hope! :) )				} finally {									synchronized (theThread) {				theThread.notify();				theThread = null;			}		}	}}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?