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

📄 waveclient.java

📁 一个用java写的地震分析软件(无源码)-used to write a seismic analysis software (without source)
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
        Channel chan = null;
        try {
            chan = new Channel(net, sta, chn);
        }
        catch (IllegalArgumentException ex) {
            System.err.println("WaveClient.getTimes(): " + ex.getMessage());
            ex.fillInStackTrace();
            throw ex;
        }

        List timeWindowList = new ArrayList();
        int retVal = this.getTimes(chan, timeWindowList);
        if (retVal < TN_SUCCESS) return retVal;

        Iterator iter = timeWindowList.iterator();
        while (iter.hasNext()) {
            TimeWindow timeWindow = (TimeWindow) iter.next();
            timeRangeList.add(timeWindow.getTimeRange());
        }
        return retVal;
    }

/** Requests the sample rate for the seismic channel specified by the input string parameters.
* Returns the sample rate data returned in the server response.
* Returns Double.NaN if no data was available.
* @exception java.lang.IllegalArgumentException Valid Channel cannot be constructed from the input parameters.
* @exception WaveClientException error occurred recovering sample rate data
*/
    public double getSampleRate (String net, String sta, String chn ) throws WaveClientException {
        Channel chan = null;
        try {
            chan = new Channel(net, sta, chn);
        }
        catch (IllegalArgumentException ex) {
            System.err.println("WaveClient.getSampleRate(): " + ex.getMessage());
            ex.fillInStackTrace();
            throw ex;
        }

        int status = getSampleRate(chan);
        if (status < TN_SUCCESS) {
            if (status == TN_NODATA) return Double.NaN;
            else throw new WaveClientException("WaveClient.getSampleRate() returned error code: " + getStatusMessage(status));
        }
        return chan.sampleRate;
    }

/** Closes the connection object's socket and attempts to re-establish new socket connection with the same host and port.
* Returns true upon success, false otherwise.
*/
    private static boolean reconnect(TCPConn conn) {
        System.err.println("Attempting WaveClient.reconnect() to " + conn.socket.toString());
        boolean retVal = true;
        try {
            //done by reset: conn.close();
            conn.reset();
         }
         catch (IOException ex) {
             System.err.println("Error WaveClient.reconnect() io error reconnecting to " + conn.socket.toString());
             System.err.println(ex.getMessage());
             ex.printStackTrace();
             retVal = false;
         }
         catch (Exception ex) {
             System.err.println("Error WaveClient.reconnect() caught exception reconnecting to " + conn.socket.toString());
             System.err.println(ex.getMessage());
             ex.printStackTrace();
             retVal = false;
         }
         System.err.println("Reconnect successful");
         return retVal;
    }

/** Attempts to sends the input TCPMessage to the server host described by the TCPConn socket.
* Returns true if successful, false otherwise.
*/
    private static boolean sendRequest(TCPConnClient conn, TCPMessage requestMessage) {
        return conn.send(requestMessage);
    }

/** Returns a TCPMessage from the server host described by the TCPConn socket.
* If no response if completed by the specified timeout interval the request is aborted.
* Returns null if unsuccessful.
*/
    private static TCPMessage receiveResponse(TCPConnClient conn, int timeoutMilliSecs) {
        TCPMessage responseMessage = null;
        try {
            responseMessage = conn.receive(timeoutMilliSecs);
        }
        catch (TCPConnException ex) {
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Exception ex) {
            System.err.println("Error WaveClient.receiveResponse() caught exception ");
            ex.printStackTrace();
        }
        return responseMessage;
    }

/** Requests data from the server host described by the input TCPConn via a requesting TCPMessage.
* If no response if completed by the set number of connection retries the request is aborted.
* Returns the server generated response TCPMessage, or null if unsuccessful.
*/
    private TCPMessage requestReply(TCPConnClient conn, TCPMessage requestMessage) {
        TCPMessage responseMessage = null;
        for (int retry = 0; retry <= maxRetries; retry++) {
            if (sendRequest(conn, requestMessage)) {
                responseMessage = receiveResponse(conn, maxTimeout);
                if (responseMessage == null) {
                    System.err.println( "Error WaveClient.requestReply() invalid response message" );
                }
                else break;  // success
            }
            else System.err.println("Error WaveClient.requestReply() Unable to send request message to server");

            // reset connection
            if (maxRetries > 0) {
                if (reconnect(conn)) continue; // retry again with a new request/response iteration
                System.err.println("Error WaveClient.requestReply() reconnection attempt: " + String.valueOf(retry) + " failed");
                break; // failure can't reconnect;
            }
        }
        return responseMessage;
    }

/** Returns the TCMessage constructed from the specified input values.
* @exception WaveClientException message construction failed.
*/
    private static TCPMessage prepareMessage(int messageType, int requestSequenceNumber, TrinetSerial [] fields)
                 throws WaveClientException {

        TCPMessage requestMessage = null;

        try {
            if (fields == null)
                throw new NullPointerException("WaveClient.prepareMessage(...) null fields [] input parameter.");
            int fieldsLength = fields.length;
            // Construct the get data request message, prepare the request parameters
            requestMessage = new TCPMessage(messageType, fieldsLength);
            requestMessage.appendField(requestSequenceNumber);
            for (int index = 0; index < fieldsLength; index++) {
                requestMessage.appendField(fields[index].toByteArray());
            }
        }
        catch (Exception ex) {
            System.err.println(ex.getMessage());
            ex.printStackTrace();
            throw new WaveClientException("Error WaveClient.prepareMessage() caught exception creating request message fields");
        }
        return requestMessage;
    }

/** Returns the reference to the input responseMessage TCPMessage reference.
* @exception WaveClientException input parameter response message is null.
* @exceptionWaveClientIdException response sequence number does not match the request sequence number.
* @exception java.io.IOException response message sequence number cannot be parsed.
*/
    private static TCPMessage verifyResponseMessage(TCPMessage responseMessage, int requestSequenceNumber)
                   throws IOException, WaveClientException {
        if (responseMessage == null) throw new WaveClientException("WaveClient.verifyResponseMessage() null message");
        // Verify the message sequence number
// must set the message iterator
        int responseSequenceNumber = responseMessage.nextFieldValueAsInt();
        if (responseSequenceNumber != requestSequenceNumber)
            throw new WaveClientIdException("Error WaveClient.verifyResponseMessage() response id does not match request id: "
                                             + responseSequenceNumber + " != " + requestSequenceNumber);
        return responseMessage;
    }

/** Generates a request message, requests a server reply, then checks the server reponse for validity.
* Returns the response message.
* @exception WaveClientException error processing message.
* @exception java.io.IOException connection error or error parsing serialized data stream.
*/
    private TCPMessage processMessage(TCPConnClient conn, int requestMessageType, TrinetSerial [] fields)
             throws IOException, WaveClientException {
        // Create a new message identifier
        int requestSequenceNumber = sequenceNumberCounter.plus();

        // Create a request message type
        TCPMessage requestMessage = prepareMessage(requestMessageType, requestSequenceNumber, fields);

        // Submit the request, check for response
        TCPMessage responseMessage = requestReply(conn, requestMessage);

        // Check validity of message, if no exception thrown, return response message data
        return verifyResponseMessage(responseMessage, requestSequenceNumber);
    }

/** Processes a "getData" request message type.
* Returns TN_SUCCESS if the server response provided data, else returns an error code.
*/
    private int doGetData(TCPConnClient conn, Channel chan, TimeWindow requestedTimeWindow, Collection dataSegmentList) {
        // Prepare the request parameters
        TrinetSerial [] fields = new TrinetSerial[2];
        fields[0] = chan;
        fields[1] = requestedTimeWindow;
        int retVal = TN_FAILURE;
        try {
            // Check validity of message and get its content: either error code or data
            TCPMessage responseMessage = processMessage(conn, TN_TCP_GETDATA_REQ, fields);
            switch (responseMessage.getMessageType()) {
                case TN_TCP_ERROR_RESP:
                    retVal = responseMessage.nextFieldValueAsInt();
                    if (retVal == TN_FAILURE) retVal = TN_NODATA;  // TEMPORARY PATCH UNTIL DWS CODES FIXED
                    break;
                case TN_TCP_GETDATA_RESP:
                    chan.sampleRate = responseMessage.nextFieldValueAsDouble ();
                    int numberOfSegments = responseMessage.nextFieldValueAsInt();
                    for (; numberOfSegments > 0; numberOfSegments--) {
                        dataSegmentList.add(new DataSegment(responseMessage.nextFieldValueAsBytes()));
                    }
                    retVal = TN_SUCCESS;
                    break;
                default:
                    System.err.println("Error WaveClient.doGetData() Unrecognized response message");
            }
        }
        catch (WaveClientException ex) {
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (IOException ex) {
            System.err.println("Error WaveClient.doGetData() Failure parsing response message");
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Exception ex) {
            System.err.println("Error WaveClient.doGetData() caught exception.");
            ex.printStackTrace();
        }
        return retVal;
    }

/** Processes a "getSampleRate" request message type.
* Returns TN_SUCCESS if the server response provided data, else returns an error code.
*/
    private int doGetSampleRate(TCPConnClient conn, Channel chan) {
        // Prepare the request parameters
        TrinetSerial [] fields = new TrinetSerial[1];
        fields[0] = chan;
        int retVal = TN_FAILURE;
        try {
            // Check validity of message and get its content: either error code or data
            TCPMessage responseMessage = processMessage(conn, TN_TCP_GETRATE_REQ, fields);
            switch (responseMessage.getMessageType()) {
                case TN_TCP_ERROR_RESP:
                    retVal = responseMessage.nextFieldValueAsInt();
                    if (retVal == TN_FAILURE) retVal = TN_NODATA;  // TEMPORARY PATCH UNTIL DWS CODES FIXED
                    break;
                case TN_TCP_GETRATE_RESP:
                    chan.sampleRate = responseMessage.nextFieldValueAsDouble ();
                    retVal = TN_SUCCESS;
                    break;
                default:
                    System.err.println("Error WaveClient.doGetSampleRate() Unrecognized response message");
            }
        }
        catch (WaveClientException ex) {
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (IOException ex) {
            System.err.println("Error WaveClient.doGetSampleRate() Failure parsing response message");
            System.err.println(ex.getMessage());
            ex.printStackTrace();
        }
        catch (Exception ex) {
            System.err.println("Error WaveClient.doGetSampleRate() caught exception.");
            ex.printStackTrace();
        }
        return retVal;

⌨️ 快捷键说明

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