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

📄 outbindreceiver.java

📁 Logica lastest SMPP API
💻 JAVA
字号:
/* * Copyright (c) 1996-2001 * Logica Mobile Networks Limited * All rights reserved. * * This software is distributed under Logica Open Source License Version 1.0 * ("Licence Agreement"). You shall use it and distribute only in accordance * with the terms of the License Agreement. * */package com.logica.smpp;import java.io.IOException;import java.io.InterruptedIOException;import com.logica.smpp.pdu.InvalidPDUException;import com.logica.smpp.pdu.Outbind;import com.logica.smpp.pdu.PDU;import com.logica.smpp.pdu.PDUException;import com.logica.smpp.pdu.UnknownCommandIdException;import com.logica.smpp.pdu.tlv.TLVException;import com.logica.smpp.util.Unprocessed;/** * This class is for receiving outbind request from SMSC. * It listens on server socket for client connection, if the connection * is accepted and created, it reads a PDU on the connection and if it is  * outbind pdu, it creates an <code>OutbindEvent</code> and passes it to the * <code>OutbindEventListener</code>. * * @author Logica Mobile Networks SMPP Open Source Team * @version 1.1, 1 Oct 2001 *//*  01-10-01 ticp@logica.com added function getThreadName for ProcessingThread                           thread name initialisation -- reflecting the intro                            of ProcessingThread in the hierarchy  01-10-01 ticp@logica.com some more comments added*/public class OutbindReceiver extends ReceiverBase{    /**     * Name of the thread created when starting     * the <code>ProcessingThread</code>.     */    private static final String OUTBIND_RECEIVER_THREAD_NAME = "OutbindRcv";    /**     * The connection on which is the outbind receiver listening for     * client request.     */    private Connection serverConnection = null;    /**     * The timeout for the single attempt to accept a client connection.     */    private long acceptTimeout = Data.ACCEPT_TIMEOUT;    /**     * The listener which is passed the accepted connection with     * the <code>Outbind</code> pdu.     */    private OutbindEventListener listener = null;    /**     * The buffer for unprocessed data received from the connection.     * Used when incomplete data are received from the connection     * in one try.     */    private Unprocessed unprocessed = new Unprocessed();    /**     * Disable instantiation without connection.     */    private OutbindReceiver()    {    }    /**     * Instantiate with the server connection.     */    public OutbindReceiver(Connection serverConnection)    {        this.serverConnection = serverConnection;    }        protected PDU tryReceivePDU(Connection connection, PDU expectedPDU)    throws UnknownCommandIdException,           TimeoutException,           PDUException,           IOException    {        PDU pdu = null;        pdu = receivePDUFromConnection(connection,unprocessed);        if (pdu != null) {            if (!pdu.equals(expectedPDU)) {                pdu = null;            }        }        return pdu;    }        protected void receiveAsync()    {        PDU pdu;        Connection connection = null;        // Outbind is the expected PDU, see Outbind.equals() (doesn't care        // about sequence number)        Outbind outbind = new Outbind();        try {            serverConnection.setReceiveTimeout(getAcceptTimeout());            connection = serverConnection.accept();        } catch (InterruptedIOException e) {            // thrown when the timeout expires => it's ok, we just didn't            // receive anything        } catch (IOException e) {            // accept can throw this from various reasons            // and we don't want to continue any more            stopProcessing(e);        }        if (connection != null) {            unprocessed.reset(); // have new connection => reset old unprocessed            pdu = null;            try {                pdu = tryReceivePDUWithTimeout(connection,outbind);            // we must catch every exception as this is thread running            // on the background and we don't want it to terminate            // in uncontrolled manner            } catch (InvalidPDUException e) {                event.write(e, "Buffer didn't contain enough data, continuing.");            } catch (UnknownCommandIdException e) {                event.write(e, "Unknown command id, continuing.");            } catch (TimeoutException e) {                debug.write("Timeout expired, message not received completly in time.");            } catch (TLVException e) {                event.write(e, "Wrong TLV");            } catch (PDUException e) {                event.write(e, "Wrong PDU");            } catch (Exception e) {                event.write(e,"Unspecified exception");                stopProcessing(e);            }            if (pdu != null) {                if (pdu.getCommandId() == Data.OUTBIND) {                    debug.write("Got outbind PDU, sending event info. " + pdu.debugString());                    sendOutbindEvent(new OutbindEvent(this, connection, (Outbind)pdu));                } else {                    debug.write("PDU isn't outbind, throwing away. " + pdu.debugString());                    // not outbind => throw the pdu away                }            }        }    }    /**     * Sends the outbind event to the listener.     */    private void sendOutbindEvent(OutbindEvent event)    {        if (listener != null) {            listener.handleOutbind(event);        }    }    /**     * Sets the timeout for accepting a connection.     * If the timeout expires, the receiver thread loops and tries to accept     * the connection again. (Infinite cycles are evil.)     */    public synchronized void setAcceptTimeout(long acceptTimeout)    {       this.acceptTimeout = acceptTimeout;    }        /**     * Sets the listener for receiving the <code>OutbindEvent</code>.     */    public void setOutbindListener(OutbindEventListener listener)    {        this.listener = listener;    }    /**     * Returns the current setting of the accept timeout.     */    public synchronized long getAcceptTimeout()    {        return acceptTimeout;    }        /**     * Returns the current outbind listener.     */    public OutbindEventListener getOutbindListener()    {        return listener;    }        // ProcessingThread's getThreadName override    public String getThreadName()    {        return OUTBIND_RECEIVER_THREAD_NAME;    }    }

⌨️ 快捷键说明

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