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

📄 serialconnector.java

📁 mina是以Java实现的一个开源的网络程序框架
💻 JAVA
字号:
/* *  Licensed to the Apache Software Foundation (ASF) under one *  or more contributor license agreements.  See the NOTICE file *  distributed with this work for additional information *  regarding copyright ownership.  The ASF licenses this file *  to you under the Apache License, Version 2.0 (the *  "License"); you may not use this file except in compliance *  with the License.  You may obtain a copy of the License at * *    http://www.apache.org/licenses/LICENSE-2.0 * *  Unless required by applicable law or agreed to in writing, *  software distributed under the License is distributed on an *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY *  KIND, either express or implied.  See the License for the *  specific language governing permissions and limitations *  under the License. * */package org.apache.mina.transport.serial;import gnu.io.CommPortIdentifier;import gnu.io.PortInUseException;import gnu.io.SerialPort;import gnu.io.UnsupportedCommOperationException;import java.io.IOException;import java.net.SocketAddress;import java.util.Enumeration;import java.util.TooManyListenersException;import java.util.concurrent.Executor;import org.apache.mina.core.service.AbstractIoConnector;import org.apache.mina.core.future.ConnectFuture;import org.apache.mina.core.future.DefaultConnectFuture;import org.apache.mina.core.session.IdleStatusChecker;import org.apache.mina.core.service.IoConnector;import org.apache.mina.core.future.IoFuture;import org.apache.mina.core.session.IoSessionInitializer;import org.apache.mina.core.service.TransportMetadata;import org.slf4j.Logger;import org.slf4j.LoggerFactory;/** * {@link IoConnector} for serial communication transport. * * @author The Apache MINA Project (dev@mina.apache.org) * @version $Rev: 529576 $, $Date: 2007-04-17 14:25:07 +0200 (mar., 17 avr. 2007) $ */public final class SerialConnector extends AbstractIoConnector {    private final Logger log;        private IdleStatusChecker idleChecker;    public SerialConnector() {        this(null);    }    public SerialConnector(Executor executor) {        super(new DefaultSerialSessionConfig(), executor);        log = LoggerFactory.getLogger(SerialConnector.class);                idleChecker = new IdleStatusChecker();        // we schedule the idle status checking task in this service exceutor        // it will be woke up every seconds        executeWorker(idleChecker.getNotifyingTask(), "idleStatusChecker");            }    @Override    protected ConnectFuture connect0(            SocketAddress remoteAddress, SocketAddress localAddress,            IoSessionInitializer<? extends ConnectFuture> sessionInitializer) {        CommPortIdentifier portId;        Enumeration<?> portList = CommPortIdentifier.getPortIdentifiers();        SerialAddress portAddress = (SerialAddress) remoteAddress;        // looping around found ports        while (portList.hasMoreElements()) {            portId = (CommPortIdentifier) portList.nextElement();            if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL) {                if (log.isDebugEnabled()) {                    log.debug("Serial port discovered : " + portId.getName());                }                if (portId.getName().equals(portAddress.getName())) {                    try {                        if (log.isDebugEnabled()) {                            log                                    .debug("Serial port found : "                                            + portId.getName());                        }                        SerialPort serialPort = initializePort("Apache MINA",                                portId, portAddress);                        ConnectFuture future = new DefaultConnectFuture();                        SerialSessionImpl session = new SerialSessionImpl(                                this, getListeners(), portAddress, serialPort);                        initSession(session, future, sessionInitializer);                        session.start();                        return future;                    } catch (PortInUseException e) {                        if (log.isDebugEnabled()) {                            log.debug("Port In Use Exception : ", e);                        }                        return DefaultConnectFuture.newFailedFuture(e);                    } catch (UnsupportedCommOperationException e) {                        if (log.isDebugEnabled()) {                            log.debug("Comm Exception : ", e);                        }                        return DefaultConnectFuture.newFailedFuture(e);                    } catch (IOException e) {                        if (log.isDebugEnabled()) {                            log.debug("IOException : ", e);                        }                        return DefaultConnectFuture.newFailedFuture(e);                    } catch (TooManyListenersException e) {                        if (log.isDebugEnabled()) {                            log.debug("TooManyListenersException : ", e);                        }                        return DefaultConnectFuture.newFailedFuture(e);                    }                }            }        }        return DefaultConnectFuture                .newFailedFuture(new SerialPortUnavailableException(                        "Serial port not found"));    }    @Override    protected IoFuture dispose0() throws Exception {    	// stop the idle checking task    	idleChecker.getNotifyingTask().cancel();        return null;    }    public TransportMetadata getTransportMetadata() {        return SerialSessionImpl.METADATA;    }    private SerialPort initializePort(String user, CommPortIdentifier portId,            SerialAddress portAddress)            throws UnsupportedCommOperationException, PortInUseException {        SerialSessionConfig config = (SerialSessionConfig) getSessionConfig();        long connectTimeout = getConnectTimeoutMillis();        if (connectTimeout > Integer.MAX_VALUE) {            connectTimeout = Integer.MAX_VALUE;        }        SerialPort serialPort = (SerialPort) portId.open(                user, (int) connectTimeout);        serialPort.setSerialPortParams(portAddress.getBauds(), portAddress                .getDataBitsForRXTX(), portAddress.getStopBitsForRXTX(),                portAddress.getParityForRXTX());        serialPort.setFlowControlMode(portAddress.getFLowControlForRXTX());        serialPort.notifyOnDataAvailable(true);        if (config.isLowLatency()) {            serialPort.setLowLatency();        }        serialPort.setInputBufferSize(config.getInputBufferSize());        serialPort.setOutputBufferSize(config.getOutputBufferSize());        if (config.getReceiveThreshold() >= 0) {            serialPort.enableReceiveThreshold(config.getReceiveThreshold());        } else {            serialPort.disableReceiveThreshold();        }        return serialPort;    }    IdleStatusChecker getIdleStatusChecker0() {        return idleChecker;    }}

⌨️ 快捷键说明

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