登录后台

页面导航

本文编写于 417 天前,最后修改于 415 天前,其中某些信息可能已经过时。

企想提供给智能家居Android的jar包被我拆开魔改了。希望不要收到律师函(害怕),最新1.0版本。

package com.etang.serverdemo;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.os.Handler;

/**
 * 连接服务器
 * 
 * @author Administrator
 * @year 2020
 * @Todo TODO
 * @package_name com.etang.serverdemo
 * @project_name ServerDemo
 * @file_name LinkTools.java
 * @我的博客 https://naiyouhuameitang.club/
 */
public interface LinkTools {

    // 当前版本 V2.0
    public static int version = 2;

    /**
     * 由原SocketClient拆分
     * 
     * @author Administrator
     * @year 2020
     * @Todo TODO
     * @package_name com.etang.serverdemo
     * @project_name ServerDemo
     * @file_name LinkTools.java
     * @我的博客 https://naiyouhuameitang.club/
     */
    class SocketClient {
        private static SocketClient mInstance;
        private static DataCallback<DeviceBean> mDataCallback;
        private WeakReference<Socket> mSocket;
        public ReadThread mReadThread;
        private long sendTime = 0L;

        // 默认IP地址
        public static String ip = "10.1.3.168";

        // 默认端口地址
        int port = 6006;

        private LoginCallback mLoginCallback;

        public static SocketClient getInstance() {
            if (mInstance == null) {
                mInstance = new SocketClient();
            }
            return mInstance;
        }

        public boolean creatConnect() {
            if (this.mSocket == null) {
                (new InitSocketThread()).start();
            } else {
                disConnect();
                release();
                (new InitSocketThread()).start();
            }
            return false;
        }

        class InitSocketThread extends Thread {
            public void run() {
                super.run();
                SocketClient.this.initSocket();
            }
        }

        private void initSocket() {
            try {
                Socket socket = new Socket();
                socket.connect(new InetSocketAddress(ip, this.port), 3000);
                this.mSocket = new WeakReference(socket);
                this.mReadThread = new ReadThread(socket);
                this.mReadThread.start();
                this.mHandler.postDelayed(this.heartBeatRunnable, 10000L);
                if (this.mSocket != null) {
                    if (this.mLoginCallback != null)
                        this.mLoginCallback.onEvent(ConstantUtil.SUCCESS);
                    ControlUtils.getData();
                }
            } catch (IOException e) {
                e.printStackTrace();
                if (this.mLoginCallback != null)
                    this.mLoginCallback.onEvent(ConstantUtil.FAILURE);
                disConnect();
            }
        }

        private Handler mHandler = new Handler();
        private Runnable heartBeatRunnable = new Runnable() {
            public void run() {
                try {
                    if (System.currentTimeMillis() - SocketClient.this.sendTime >= 10000L) {
                        boolean isSuccess = SocketClient.this
                                .sendData("{\"Type\": \"HeartBeat\"}");
                        if (!isSuccess) {
                            if (SocketClient.this.mLoginCallback != null)
                                SocketClient.this.mLoginCallback
                                        .onEvent("NoConnect");
                            SocketClient.this.mHandler
                                    .removeCallbacks(SocketClient.this.heartBeatRunnable);
                            SocketClient.this.mReadThread.release();
                            new SocketClient.InitSocketThread().start();
                            // (new
                            // SocketClient.InitSocketThread(SocketClient.this))
                            // .start();
                        }
                    }
                    SocketClient.this.mHandler.postDelayed(this, 15000L);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        };

        private boolean isSocket = false;

        public boolean sendData(final String msg) {
            if (this.mSocket == null || this.mSocket.get() == null) {
                this.isSocket = false;
                return false;
            }
            final Socket soc = (Socket) this.mSocket.get();
            try {
                if (!soc.isClosed() && !soc.isOutputShutdown()) {
                    new Thread(new Runnable() {

                        @Override
                        public void run() {
                            // TODO Auto-generated method stub
                            try {
                                PrintWriter dataWriter = new PrintWriter(soc
                                        .getOutputStream());
                                dataWriter.write(String.valueOf(msg) + "\r\n");
                                dataWriter.flush();
                                SocketClient.this.isSocket = true;
                                SocketClient.this.sendTime = System
                                        .currentTimeMillis();
                            } catch (Exception e) {
                                // TODO: handle exception
                                e.printStackTrace();
                                SocketClient.this.isSocket = false;
                            }
                        }
                    }).start();
                    // if (!soc.isClosed() && !soc.isOutputShutdown()) {
                    // (new Thread(new Runnable(this, soc, msg) {
                    // public void run() {
                    // try {
                    // PrintWriter DataWrite = new PrintWriter(soc
                    // .getOutputStream());
                    // DataWrite.write(String.valueOf(msg) + "\r\n");
                    // DataWrite.flush();
                    // SocketClient.this.isSocket = true;
                    // SocketClient.this.sendTime = System
                    // .currentTimeMillis();
                    // } catch (IOException e) {
                    // e.printStackTrace();
                    // SocketClient.this.isSocket = false;
                    // }
                    //
                    // }
                    // })).start();
                } else {
                    this.isSocket = false;
                }
            } catch (Exception e) {
                e.printStackTrace();
                this.isSocket = false;
            }
            return this.isSocket;
        }

        private class ReadThread extends Thread {
            private WeakReference<Socket> mWeakSocket;

            private boolean isStart = true;

            public ReadThread(Socket socket) {
                this.mWeakSocket = new WeakReference(socket);
            }

            public void release() {
                this.isStart = false;
                SocketClient.this.disConnect();
            }

            public void run() {
                super.run();
                Socket socket = (Socket) this.mWeakSocket.get();
                if (socket != null) {
                    try {
                        String response = "";
                        BufferedReader DataRead = new BufferedReader(
                                new InputStreamReader(socket.getInputStream()));
                        while (!socket.isClosed() && this.isStart) {
                            while ((response = DataRead.readLine()) != null) {
                                JSONObject obj = new JSONObject(response);
                                setData(obj);
                            }
                        }
                    } catch (JSONException e1) {
                        e1.printStackTrace();
                    } catch (Exception e1) {
                        this.isStart = false;
                        SocketClient.this.mSocket = null;
                        e1.printStackTrace();
                    }
                }
            }

            public void setData(JSONObject obj) throws JSONException {
                DeviceBean bean = new DeviceBean();
                if (obj.has("Data")) {
                    try {
                        JSONArray array = new JSONArray(obj.get("Data")
                                .toString());
                        for (int i = 0; i < array.length(); i++) {
                            try {
                                JSONObject jsonObject = array.getJSONObject(i);
                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Temperature))
                                        DeviceBean.setTemperature(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Humidity))
                                        DeviceBean.setHumidity(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Illumination))
                                        DeviceBean.setIllumination(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Smoke))
                                        DeviceBean.setSmoke(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Gas))
                                        DeviceBean.setGas(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.PM25))
                                        DeviceBean.setPM25(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.CO2))
                                        DeviceBean.setCo2(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.AirPressure))
                                        DeviceBean.setAirPressure(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject
                                            .getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.StateHumanInfrared))
                                        DeviceBean
                                                .setStateHumanInfrared(jsonObject
                                                        .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Lamp))
                                        DeviceBean.setLamp(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.WarningLight))
                                        DeviceBean.setWarningLight(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Curtain))
                                        DeviceBean.setCurtain(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject
                                            .getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.RFID_Open_Door))
                                        DeviceBean.setRFID_Open_Door(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                                try {
                                    if (jsonObject.getString("SensorType")
                                            .toString()
                                            .equals(ConstantUtil.Fan))
                                        DeviceBean.setFan(jsonObject
                                                .getString("Value"));
                                } catch (JSONException jSONException) {
                                }

                            } catch (JSONException e) {
                                e.printStackTrace();
                            }
                        }
                    } catch (JSONException e) {
                        e.printStackTrace();
                    }
                }
                if (mDataCallback != null) {
                    mDataCallback.onResult(bean);
                }
            }
        }

        public void disConnect() {
            try {
                if (this.mSocket != null) {
                    Socket sk = (Socket) this.mSocket.get();
                    if (!sk.isClosed()) {
                        sk.close();
                    }
                    sk = null;
                    this.mSocket = null;
                }
            } catch (IOException e) {
                e.printStackTrace();
            }
        }

        public void release() {
            try {
                if (mInstance != null) {
                    mInstance.disConnect();
                    mInstance = null;
                }
                if (this.mReadThread != null)
                    this.mReadThread.release();
                if (this.mHandler != null)
                    this.mHandler.removeCallbacks(this.heartBeatRunnable);
            } catch (Exception exception) {
            }
        }

        public void login(LoginCallback callback) {
            this.mLoginCallback = callback;
        }

        public void getData(DataCallback callback) {
            mDataCallback = callback;
        }
    }

    /**
     * 由原ConstantUtil拆分
     * 
     * @author Administrator
     * @year 2020
     * @Todo TODO
     * @package_name com.etang.serverdemo
     * @project_name ServerDemo
     * @file_name LinkTools.java
     * @我的博客 https://naiyouhuameitang.club/
     */
    class ConstantUtil {
        public static String CMDCODE = "1";
        public static String SUCCESS = "Success";
        public static String FAILURE = "Failure";
        public static String CLOSE = "0";
        public static String OPEN = "1";
        public static String CHANNEL_1 = "1";
        public static String CHANNEL_2 = "2";
        public static String CHANNEL_3 = "4";
        public static String CHANNEL_ALL = "7";
        public static String Temperature = "0";
        public static String Humidity = "1";
        public static String Illumination = "2";
        public static String Smoke = "3";
        public static String Gas = "4";
        public static String PM25 = "5";
        public static String CO2 = "6";
        public static String StateHumanInfrared = "8";
        public static String AirPressure = "7";
        public static String Fan = "9";
        public static String Curtain = "12";
        public static String Lamp = "10";
        public static String WarningLight = "11";
        public static String RFID_Open_Door = "15";
        public static String INFRARED_1_SERVE = "13";
    }

    /**
     * 由原ControlUtils拆分
     * 
     * @author Administrator
     * @year 2020
     * @Todo TODO
     * @package_name com.etang.serverdemo
     * @project_name ServerDemo
     * @file_name LinkTools.java
     * @我的博客 https://naiyouhuameitang.club/
     */
    class ControlUtils {
        private static String mUserName;
        private static String mPassword;

        public static void setUser(String UserName, String Password, String ip) {
            mUserName = UserName;
            mPassword = Password;
            SocketClient.ip = ip;
        }

        public static boolean getData() {
            try {
                JSONObject object = new JSONObject();
                object.put("Type", "GetDevicState");
                object.put("UserName", mUserName);
                object.put("Password", mPassword);
                object.put("CurrentTime", (new SimpleDateFormat(
                        "yyyy-MM-dd HH:mm:ss")).format(new Date()));
                SocketClient.getInstance().sendData(object.toString());
            } catch (JSONException e) {
                e.printStackTrace();
            }
            return true;
        }

        public static boolean control(String SensorType, String Channel,
                String Command) {
            try {
                JSONObject object = new JSONObject();
                object.put("Type", "Control");
                object.put("UserName", "bizideal");
                object.put("CurrentTime", (new SimpleDateFormat(
                        "yyyy-MM-dd HH:mm:ss")).format(new Date()));
                object.put("SensorType", SensorType);
                object.put("CmdCode", ConstantUtil.CMDCODE);
                object.put("Channel", Channel);
                object.put("Command", Command);
                SocketClient.getInstance().sendData(object.toString());
            } catch (Exception e) {

                e.printStackTrace();
            }
            return true;
        }
    }

    /**
     * 由原DeviceBean拆分
     * 
     * @author Administrator
     * @year 2020
     * @Todo TODO
     * @package_name com.etang.serverdemo
     * @project_name ServerDemo
     * @file_name LinkTools.java
     * @我的博客 https://naiyouhuameitang.club/
     */
    class DeviceBean {
        private static String SensorType;
        private static String CmdCode;
        private static String Value;
        public static String Temperature;
        public static String Humidity;
        public static String Illumination;
        public static String Smoke;
        public static String Gas;
        public static String PM25;
        private static String Co2;
        public static String StateHumanInfrared;
        public static String AirPressure;
        public static String Fan;
        public static String Curtain;
        public static String Socket;
        public static String Lamp;
        public static String WarningLight;
        public static String RFID_Open_Door;
        public static String Name;
        public static String Time;

        public static String getSensorType() {
            return SensorType;
        }

        public static void setSensorType(String sensorType) {
            SensorType = sensorType;
        }

        public static String getCmdCode() {
            return CmdCode;
        }

        public static void setCmdCode(String cmdCode) {
            CmdCode = cmdCode;
        }

        public static String getValue() {
            return Value;
        }

        public static void setValue(String value) {
            Value = value;
        }

        public static String getTemperature() {
            return Temperature;
        }

        public static void setTemperature(String temperature) {
            Temperature = temperature;
        }

        public static String getHumidity() {
            return Humidity;
        }

        public static void setHumidity(String humidity) {
            Humidity = humidity;
        }

        public static String getIllumination() {
            return Illumination;
        }

        public static void setIllumination(String illumination) {
            Illumination = illumination;
        }

        public static String getSmoke() {
            return Smoke;
        }

        public static void setSmoke(String smoke) {
            Smoke = smoke;
        }

        public static String getGas() {
            return Gas;
        }

        public static void setGas(String gas) {
            Gas = gas;
        }

        public static String getPM25() {
            return PM25;
        }

        public static void setPM25(String PM25) {
            DeviceBean.PM25 = PM25;
        }

        public static String getCo2() {
            return Co2;
        }

        public static void setCo2(String co2) {
            Co2 = co2;
        }

        public static String getStateHumanInfrared() {
            return StateHumanInfrared;
        }

        public static void setStateHumanInfrared(String stateHumanInfrared) {
            StateHumanInfrared = stateHumanInfrared;
        }

        public static String getAirPressure() {
            return AirPressure;
        }

        public static void setAirPressure(String airPressure) {
            AirPressure = airPressure;
        }

        public static String getFan() {
            return Fan;
        }

        public static void setFan(String fan) {
            Fan = fan;
        }

        public static String getCurtain() {
            return Curtain;
        }

        public static void setCurtain(String curtain) {
            Curtain = curtain;
        }

        public static String getLamp() {
            return Lamp;
        }

        public static void setLamp(String lamp) {
            Lamp = lamp;
        }

        public static String getWarningLight() {
            return WarningLight;
        }

        public static void setWarningLight(String warningLight) {
            WarningLight = warningLight;
        }

        public static String getRFID_Open_Door() {
            return RFID_Open_Door;
        }

        public static void setRFID_Open_Door(String RFID_Open_Door) {
            DeviceBean.RFID_Open_Door = RFID_Open_Door;
        }

        public static String getName() {
            return Name;
        }

        public static void setName(String name) {
            Name = name;
        }

        public static String getTime() {
            return Time;
        }

        public static void setTime(String time) {
            Time = time;
        }

        public static String getSocket() {
            return Socket;
        }

        public static void setSocket(String socket) {
            Socket = socket;
        }
    }

    interface LoginCallback {
        void onEvent(String paramString);
    }

    interface DataCallback<T> {
        void onEvent(String paramString);

        void onResult(DeviceBean bean);
    }
}