DigiScaleTransfer.java 2.9 KB
package com.wmdigit.digitransfer;

import android.util.Log;

import com.wmdigit.digitransfer.exception.ErrCode;
import com.wmdigit.digitransfer.exception.ScalesApiException;
import com.wmdigit.digitransfer.handler.ObjectHandler;
import com.wmdigit.digitransfer.handler.Printer;
import com.wmdigit.digitransfer.util.NetWorkUtils;

import java.io.IOException;
import java.net.ServerSocket;
import java.net.Socket;
import java.net.SocketTimeoutException;

public class DigiScaleTransfer {
    private static DigiScaleTransfer instance;
    private int addressFour;
    private ObjectHandler scalesApiHandler;
    private Printer printer;
    private final String TAG = DigiScaleTransfer.this.getClass().getSimpleName();

    private ServerSocket serverSocket;

    public static DigiScaleTransfer getInstance(ObjectHandler scalesApiHandler, Printer printer) {
        if (instance == null) {
            instance = new DigiScaleTransfer(scalesApiHandler,printer);
        }

        return instance;
    }

    private DigiScaleTransfer(ObjectHandler scalesApiHandler, Printer printer) {
        this.scalesApiHandler = scalesApiHandler;
        this.printer = printer;
        String hostAddress = null;
        hostAddress = NetWorkUtils.getLocalIp();
        int of = hostAddress.lastIndexOf(".");
        String addressFourStr = hostAddress.substring(of + 1);
        addressFour = Integer.parseInt(addressFourStr);
        printer.d("ip地址:" + hostAddress);

    }

    public void init() {
        ThreadCacheManager.getExecutorService().execute(new Runnable() {
            @Override
            public void run() {
                try {
                   serverSocket = new ServerSocket(addressFour + 2000);
                } catch (IOException var5) {
                    throw new ScalesApiException(ErrCode.PORT_OCCUPIED_EXCEPTION);
                }

                while (true) {
                    Socket socket = null;

                    try {
                        socket =serverSocket.accept();
                        int localPort = serverSocket.getLocalPort();
                        printer.i("端口号" + localPort);
                        scalesApiHandler.setSocket(socket, addressFour,printer);
                        ThreadCacheManager.getExecutorService().execute(scalesApiHandler);
//                        Thread thread = new Thread(this.scalesApiHandler);
//                        thread.start();
                    } catch (SocketTimeoutException var3) {
                        throw new ScalesApiException(ErrCode.OUT_TIME_EXCEPTION);
                    } catch (IOException var4) {
                        throw new ScalesApiException(ErrCode.RECEIVE_DATA_EXCEPTION);
                    }
                }
            }
        });



    }

    public void destroy() {
        try {
            this.serverSocket.close();
        } catch (IOException var2) {
            var2.printStackTrace();
        }

    }

}