a
554325746@qq.com
2019-10-24 c61e776980f038bb0e195f7753a3d7e127d6028f
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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
package com.basic.security.utils;
 
import android.text.TextUtils;
 
import com.basic.security.model.ModelAdapter;
import com.basic.security.utils.socket.server.SqliteSocketServer;
import com.ericsson.otp.erlang.OtpAuthException;
import com.ericsson.otp.erlang.OtpConnection;
import com.ericsson.otp.erlang.OtpPeer;
import com.ericsson.otp.erlang.OtpSelf;
import com.ericsson.otp.erlang.OtpTransport;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
 
import java.io.IOException;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
public class MyOtpConnection extends OtpConnection {
    public boolean isLocal = false;
    public String nodeName = "";
 
    public MyOtpConnection(OtpSelf self, OtpTransport s) throws IOException, OtpAuthException {
        super(self, s);
    }
 
    public MyOtpConnection(OtpSelf self, OtpPeer other) throws IOException, OtpAuthException {
        super(self, other);
    }
 
    public MyOtpConnection() {
    }
 
    public String getNodeIp() {
        if (nodeName.contains("@")) {
            try {
                return nodeName.split("@")[1].trim();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return "";
    }
 
    public void executeSql(String databaseName, String sql) {
        getUrlResponseText(databaseName, sql);
    }
 
    public String getUrlResponseText(String databaseName, String sql) {
        String remoteIp = getNodeIp();
        if (!TextUtils.isEmpty(remoteIp)) {
            Map<String, String> requestMap = new HashMap<>();
            requestMap.put(SqliteSocketServer.sql_field, sql);
            requestMap.put(SqliteSocketServer.database_name_field, databaseName);
            Map<String, String> responseMap = SocketUtil.rpcCall(remoteIp, Constants.sqliteServerPort, requestMap);
            System.out.println("MyOtpConnection.getUrlResponseText " + responseMap);
            if (responseMap != null) {
                return responseMap.get(SqliteSocketServer.data_list_field);
            }
//            System.out.println("MyOtpConnection.getUrlResponseText databaseName="
//                    + databaseName+", sql="+sql
//                    +" responseMap="+responseMap +" frames="+FrameUtil.getFrames()
//            );
//            System.out.println("MyOtpConnection.getUrlResponseText request="+requestMap+" response=" + responseMap);
//            String url = "http://"+remoteIp+":8080/query?query="+sql;
//            try{
//                OkHttpClient okHttpClient = new OkHttpClient();
//                Request request = new Request.Builder()
//                        .url(url)
//                        .get()
//                        .build();
//                Call call = okHttpClient.newCall(request);
//                String responseJson = call.execute().body().toString();
//                System.out.println("MyOtpConnection.query responseJson = "+ responseJson);
//            }catch (Exception e){
//                e.printStackTrace();
//            }
        }
        return null;
    }
 
    public List<Map<String, String>> query(String databaseName, String sql) {
        String data_list_field = getUrlResponseText(databaseName, sql);
        List<Map<String, String>> queryList = new ArrayList<>();
//        "data_list_field" -> "[{"model":{"node_id":"liu123@192.168.1.119","father_node":" "}}]"
        if (!TextUtils.isEmpty(data_list_field)) {
            Type listType = new TypeToken<List<ModelAdapter>>() {
            }.getType();
            List<ModelAdapter> modelList = new Gson().fromJson(data_list_field, listType);
            for (ModelAdapter model : modelList) {
                Map<String, String> queryMap = new HashMap<>();
                for (Map.Entry<String, Object> entry : model.model.entrySet()) {
                    queryMap.put(entry.getKey(), entry.getValue() + "");
                }
                queryList.add(queryMap);
            }
        }
        return queryList;
    }
}