⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 snmpsession.java

📁 java1.6众多例子参考
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    public void run() {        myThread = Thread.currentThread();        myThread.setPriority(Thread.NORM_PRIORITY);        SnmpInformRequest reqc = null;        while (myThread != null) {            try {                reqc = nextResponse();                if (reqc != null) {                    processResponse(reqc);                }            } catch (ThreadDeath d) {                myThread = null;                if (isDebugOn()) {                    debug("run", "Session thread unexpectedly shutting down");                }                throw d ;            }        }        if (isTraceOn()) {            trace("run", "Session thread shutting down");        }        myThread = null ;    }        private void processResponse(SnmpInformRequest reqc) {                while (reqc != null && myThread != null) {            try {                if (reqc != null) {                    if (isTraceOn()) {                        trace("processResponse", "Processing response to req = " + reqc.getRequestId());                    }                    reqc.processResponse() ;  // Handles out of memory.                    reqc = null ;  // finished processing.                }				            } catch (Exception e) {                if (isDebugOn()) {                    debug("processResponse", e);                }                reqc = null ;            } catch (OutOfMemoryError ome) {                if (isDebugOn()) {                    debug("processResponse", "Out of memory error in session thread");                    debug("processResponse", ome);                }                Thread.currentThread().yield();                continue ;   // re-process the request.            }        }    }        // HANDLING INFORM REQUESTS LIST AND INFORM RESPONSES LIST    //--------------------------------------------------------        /**     * Adds an inform request.     * @param snmpreq The inform request to add.     * @exception SnmpStatusException SNMP adaptor is not ONLINE or session is dead.     */    synchronized void addInformRequest(SnmpInformRequest snmpreq) throws SnmpStatusException {                // If the adaptor is not ONLINE, stop adding requests.        //        if (!isSessionActive()) {            throw new SnmpStatusException("SNMP adaptor is not ONLINE or session is dead...") ;        }        informRequestList.put(snmpreq, snmpreq);    }        /**     * Deletes an inform request.     * @param snmpreq The inform request to delete.     */    synchronized void removeInformRequest(SnmpInformRequest snmpreq) {	// deleteRequest can be called from destroySnmpSession.	//In such a case remove is done in cancelAllRequest method.	if(!isBeingCancelled)	    informRequestList.remove(snmpreq) ;        if (syncInformReq != null && syncInformReq == snmpreq) {            resetSyncMode() ;        }    }                /**     * Cancels all pending inform requests in this session.     */    private void cancelAllRequests() {        final SnmpInformRequest[] list;		synchronized(this) {	    	    if (informRequestList.isEmpty()) {		return ;	    }	    isBeingCancelled = true;	    	    list = new SnmpInformRequest[informRequestList.size()];	    java.util.Iterator it = informRequestList.values().iterator();	    int i = 0;	    while(it.hasNext()) {		SnmpInformRequest req = (SnmpInformRequest)it.next();		list[i++] = req;		it.remove();	    }	    informRequestList.clear();	}		for(int i = 0; i < list.length; i++)	    list[i].cancelRequest();    }        /**     * Adds the inform request object which received a response to an inform request      * generated by the session.  This is added to a private store, which     * will be eventually picked up by the dispatcher for processing.     * @param reqc The inform request that received the response from the manager.     */    void addResponse(SnmpInformRequest reqc) {                SnmpInformRequest snmpreq = (SnmpInformRequest) reqc ;        if (isSessionActive()) {            synchronized(this) {                informRespq.push(reqc) ;                this.notifyAll() ;            }        } else {            if (isDebugOn()) {                debug("addResponse", "Adaptor not ONLINE or session thread dead. So inform response is dropped..." + reqc.getRequestId());            }        }        return ;    }    private synchronized SnmpInformRequest nextResponse() {                if (informRespq.isEmpty()) {            try {                if (isTraceOn()) {                    trace("nextResponse", "Blocking for response");                }                this.wait();            } catch(InterruptedException e) {            }        }        if (informRespq.isEmpty())            return null;        SnmpInformRequest reqc = (SnmpInformRequest) informRespq.firstElement();        informRespq.removeElementAt(0) ;        return reqc ;    }        private synchronized void cancelAllResponses() {        if (informRespq != null) {            syncInformReq = null ;            informRespq.removeAllElements() ;            this.notifyAll() ;        }    }        /**     * Destroys any pending inform requests and then stops the session.     * The session will not be usable after this method returns.     */    final void destroySession() {                cancelAllRequests() ;        cancelAllResponses() ;        synchronized(this) {            informSocket.close() ;            informSocket = null ;        }        snmpQman.stopQThreads() ;        snmpQman = null ;        killSessionThread() ;    }        /**     * Make sure you are killing the thread when it is active. Instead     * prepare for a graceful exit.     */    private synchronized void killSessionThread() {                if ((myThread != null) && (myThread.isAlive())) {            if (isTraceOn()) {                trace("killSessionThread", "Destroying session");            }            if (!thisSessionContext()) {                myThread = null ;                this.notifyAll() ;            } else                myThread = null ;        }    }    /**     * Finalizer of the <CODE>SnmpSession</CODE> objects.     * This method is called by the garbage collector on an object      * when garbage collection determines that there are no more references to the object.     * <P>Removes all the requests for this SNMP session, closes the socket and     * sets all the references to the <CODE>SnmpSession</CODE> object to <CODE>null</CODE>.     */    public void finalize() {                if (informRespq != null)            informRespq.removeAllElements() ;        informRespq = null ;        if (informSocket != null)            informSocket.close() ;        informSocket = null ;        if (isTraceOn()) {            trace("finalize", "Shutting all servers");        }        snmpQman = null ;    }        // TRACES & DEBUG    //---------------        boolean isTraceOn() {        return Trace.isSelected(Trace.LEVEL_TRACE, Trace.INFO_ADAPTOR_SNMP);    }    void trace(String clz, String func, String info) {        Trace.send(Trace.LEVEL_TRACE, Trace.INFO_ADAPTOR_SNMP, clz, func, info);    }    void trace(String func, String info) {        trace(dbgTag, func, info);    }        boolean isDebugOn() {        return Trace.isSelected(Trace.LEVEL_DEBUG, Trace.INFO_ADAPTOR_SNMP);    }    void debug(String clz, String func, String info) {        Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_ADAPTOR_SNMP, clz, func, info);    }    void debug(String clz, String func, Throwable exception) {        Trace.send(Trace.LEVEL_DEBUG, Trace.INFO_ADAPTOR_SNMP, clz, func, exception);    }    void debug(String func, String info) {        debug(dbgTag, func, info);    }        void debug(String func, Throwable exception) {        debug(dbgTag, func, exception);    }}

⌨️ 快捷键说明

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