a
554325746@qq.com
2019-12-25 603cb36a5123e46656b06a5deb8d7ac7ff81307f
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.basic.security.utils.socket.outdoor;
 
import android.os.SystemClock;
 
import com.basic.security.manager.BaseSettingManager;
import com.basic.security.manager.DeviceManager;
import com.basic.security.model.Outdoor;
import com.basic.security.utils.Constants;
import com.basic.security.utils.SocketUtil;
 
import java.util.HashMap;
import java.util.Map;
import java.util.PriorityQueue;
import java.util.Queue;
 
public class OutdoorSendIpSocketClientFromBaseSetting extends Thread {
    public static final Object lock = new Object();
    public static Queue<String> queue = new PriorityQueue<>();
    public String serverIp;
 
    public static void notifyChanged() {
        synchronized (OutdoorSendIpSocketClientFromBaseSetting.lock) {
            OutdoorSendIpSocketClientFromBaseSetting.queue.add("1");
            OutdoorSendIpSocketClientFromBaseSetting.lock.notify();
        }
    }
 
    public void run() {
        SocketUtil socketUtil = new SocketUtil();
        while (true) {
            try {
                serverIp = BaseSettingManager.getIndoorDeviceIp();
//                System1.out.println("OutdoorSocketClient.run getIndoorDeviceIp=" + serverIp);
                socketUtil.openSocket(serverIp, Constants.indoorServerPort);
                while (true) {
                    synchronized (lock) {
                        if (queue.peek() == null) {
                            lock.wait(10 * 1000);
                            if (queue.size() > 0) {
                                queue.remove();
                            }
                        } else {
                            if (queue.size() > 0) {
                                queue.remove();
                            }
                        }
                    }
                    Map<String, String> outdoorInfoMap = new HashMap<>();
                    outdoorInfoMap.put(Outdoor.outdoor_device_ip, DeviceManager.getDeviceIp());
                    outdoorInfoMap.put(Outdoor.outdoor_device_id, DeviceManager.getDeviceId());
                    String passMode = BaseSettingManager.getDevicePassMode();
                    String indoorDeviceIp = BaseSettingManager.getIndoorDeviceIp();
                    String valid = Constants.FALSE;//BaseSettingManager.getValid();
                    if ("确认通行".equals(passMode) && indoorDeviceIp.length() > 0) {
                        valid = Constants.TRUE;
                    }
                    valid = Constants.TRUE;
                    outdoorInfoMap.put(Outdoor.valid, valid);
                    outdoorInfoMap.put(Outdoor.outdoor_device_name, DeviceManager.getDeviceName());
                    socketUtil.writeMap(outdoorInfoMap);
//                    System1.out.println("OutdoorSocketClient.run " + outdoorInfoMap);
                }
            } catch (Exception e) {
//                e.printStackTrace();
                System1.out.println("OutdoorSendIpSocketClientFromBaseSetting.run " + e.getMessage());
                SystemClock.sleep(2 * 1000);
            } finally {
                socketUtil.close();
            }
        }
    }
}