📄 serverresponsereader.java
字号:
/* * 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -