ClientApp.java 5.07 KB
package com.bsth.data.gpsdata.client;

import com.bsth.data.gpsdata.client.pd.codec.PdMessageCodecFactory;
import com.bsth.data.gpsdata.client.pd.handler.PdClientHandler;
import com.bsth.data.gpsdata.client.pd.protocol.Pd_31_0;
import com.bsth.data.gpsdata.client.pf.codec.PfMessageCodecFactory;
import com.bsth.data.gpsdata.client.pf.handler.PfClientHandler;
import com.bsth.util.ConfigUtil;
import org.apache.mina.core.future.ConnectFuture;
import org.apache.mina.core.future.WriteFuture;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.core.session.IoSessionConfig;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.logging.LogLevel;
import org.apache.mina.filter.logging.LoggingFilter;
import org.apache.mina.transport.socket.nio.NioSocketConnector;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.net.InetSocketAddress;

/**
 * Created by panzhao on 2017/5/4.
 */
@Component
public class ClientApp {

    private static NioSocketConnector pdDataConnector;
    private static NioSocketConnector pfDataConnector;

    @Autowired
    private PdClientHandler pdClient;
    @Autowired
    private PfClientHandler pfClient;
    @Autowired
    GpsBeforeBuffer gpsBeforeBuffer;

    static Logger logger = LoggerFactory.getLogger(ClientApp.class);

    public static boolean dconnect(String device) {
        boolean flag = false;
        try {
            ConnectFuture con = pdDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pd"), Integer.parseInt(ConfigUtil.get("gps.port.pd"))));
            con.awaitUninterruptibly();
            IoSession session = con.getSession();
            session.setAttribute("deviceId", device);
            com.bsth.data.gpsdata.client.pd.protocol.PdMessage msg = new com.bsth.data.gpsdata.client.pd.protocol.PdMessage();
            Pd_31_0 body = new Pd_31_0();
            body.setFunCode((short)0x15);
            body.setLineId(0);
            body.setDeviceId(device);
            msg.setMessageBody(body);
            msg.setVersion((short)1);
            msg.setSerialNo((short)1);
            msg.setCommandType((short)0x31);
            byte[] bytes = msg.write();
            WriteFuture write = session.write(bytes);
            write.awaitUninterruptibly();
            flag = true;

            logger.info("dconnect...");
            //SessionManager.getInstance().register(device, session);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    public static boolean fconnect(String device) {
        boolean flag = false;
        try {
            ConnectFuture con = pfDataConnector.connect(new InetSocketAddress(ConfigUtil.get("gps.server.pf"),  Integer.parseInt(ConfigUtil.get("gps.port.pf"))));
            con.awaitUninterruptibly();
            IoSession session = con.getSession();
            session.setAttribute("deviceId", device);
            flag = true;

            logger.info("fconnect...");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return flag;
    }

    public void init() {
        //exec = Executors.newFixedThreadPool(4);
        //sexec.scheduleAtFixedRate(new SessionChecker(), 1, 1, TimeUnit.MINUTES);
        /*******************************浦东********************************/
        pdDataConnector = new NioSocketConnector();

        LoggingFilter log = new LoggingFilter();
        log.setMessageReceivedLogLevel(LogLevel.DEBUG);
        pdDataConnector.getFilterChain().addLast("logger", log);

        pdDataConnector.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(new PdMessageCodecFactory()));

        IoSessionConfig config = pdDataConnector.getSessionConfig();

        config.setReadBufferSize(4096);
        config.setWriteTimeout(10000);
        config.setWriterIdleTime(60000);

        config.setIdleTime(IdleStatus.BOTH_IDLE, 60);

        pdDataConnector.setHandler(pdClient);

        dconnect(ConfigUtil.get("forward.device.name"));
        /*******************************浦东转发********************************/
        pfDataConnector = new NioSocketConnector();

        LoggingFilter log1 = new LoggingFilter();
        log1.setMessageReceivedLogLevel(LogLevel.DEBUG);
        pfDataConnector.getFilterChain().addLast("logger", log1);

        pfDataConnector.getFilterChain().addLast("codec",
                new ProtocolCodecFilter(new PfMessageCodecFactory()));

        IoSessionConfig config1 = pfDataConnector.getSessionConfig();

        config1.setReadBufferSize(4096);
        config1.setWriteTimeout(10000);
        config1.setWriterIdleTime(60000);

        config1.setIdleTime(IdleStatus.BOTH_IDLE, 60);

        pfDataConnector.setHandler(pfClient);
        fconnect(ConfigUtil.get("forward.device.name"));


        gpsBeforeBuffer.init();
    }
}