1
zhanghua
2024-09-26 c775c6953d9759e70f08acbfa8f6d7490aaae3d1
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
package com.netsdk.demo.customize.turkcell;
 
 
 
import com.netsdk.demo.util.CaseMenu;
import com.netsdk.lib.NetSDKLib;
import com.netsdk.lib.ToolKits;
import com.netsdk.lib.callback.impl.DefaultDisconnectCallback;
import com.netsdk.lib.callback.impl.DefaultHaveReconnectCallBack;
 
import java.io.File;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
 
import static com.netsdk.lib.NetSDKLib.EVENT_IVS_ALL;
 
/**
 * @author 47081
 * @version 1.0
 * @description MNVR订阅智能事件,上报内容:
 *              1.车牌抓图,上报内容包括时间、车牌图片、车牌信息
 *              2.打电话、吸烟、疲惫、不看路,上报内容包括事件类型、时间、图片
 * @date 2020/6/12
 */
public class TurkcellDemo {
    private NetSDKLib netsdk=NetSDKLib.NETSDK_INSTANCE;
    private NetSDKLib configsdk=NetSDKLib.CONFIG_INSTANCE;
    private NetSDKLib.LLong loginHandler;
    private List<NetSDKLib.LLong> realLoadHandlers;
    private NetSDKLib.fGPSRevEx gpsRev;
    private NetSDKLib.fAnalyzerDataCallBack analyzerDataCallBack;
    private NetSDKLib.NET_DEVICEINFO_Ex deviceInfo;
    private boolean bInit=false;
    private boolean bLogopen=true;
 
    /**
     * sdk init
     * sdk初始化
     * @return
     */
    public boolean init(){
        gpsRev= TurkcellGPSCallback.getInstance();
        analyzerDataCallBack= TurkcellAnalyzerCallback.getInstance();
        bInit = netsdk.CLIENT_Init(DefaultDisconnectCallback.getINSTANCE(), null);
        if(!bInit) {
            System.out.println("Initialize SDK failed");
            return false;
        }
 
        //打开日志,可选
        NetSDKLib.LOG_SET_PRINT_INFO setLog = new NetSDKLib.LOG_SET_PRINT_INFO();
        File path = new File("./sdklog/");
        if (!path.exists()) {
            path.mkdir();
        }
        String logPath = path.getAbsoluteFile().getParent() + "\\sdklog\\" + new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date()).toString() + ".log";
        setLog.nPrintStrategy = 0;
        setLog.bSetFilePath = 1;
        System.arraycopy(logPath.getBytes(), 0, setLog.szLogFilePath, 0, logPath.getBytes().length);
        System.out.println(logPath);
        setLog.bSetPrintStrategy = 1;
        bLogopen = netsdk.CLIENT_LogOpen(setLog);
        if(!bLogopen ) {
            System.err.println("Failed to open NetSDK log");
        }
 
        // 设置断线重连回调接口,设置过断线重连成功回调函数后,当设备出现断线情况,SDK内部会自动进行重连操作
        // 此操作为可选操作,但建议用户进行设置
        netsdk.CLIENT_SetAutoReconnect(DefaultHaveReconnectCallBack.getINSTANCE(), null);
 
        //设置登录超时时间和尝试次数,可选
        //登录请求响应超时时间设置为5S
        int waitTime = 5000;
        //登录时尝试建立链接1次
        int tryTimes = 3;
        netsdk.CLIENT_SetConnectTime(waitTime, tryTimes);
 
        // GDPR使能全局开关
        netsdk.CLIENT_SetGDPREnable(true);
 
        // 设置更多网络参数,NET_PARAM的nWaittime,nConnectTryNum成员与CLIENT_SetConnectTime
        // 接口设置的登录设备超时时间和尝试次数意义相同,可选
        NetSDKLib.NET_PARAM netParam = new NetSDKLib.NET_PARAM();
        // 登录时尝试建立链接的超时时间
        netParam.nConnectTime = 10000;
        // 设置子连接的超时时间
        netParam.nGetConnInfoTime = 3000;
        netsdk.CLIENT_SetNetworkParam(netParam);
        return bInit;
    }
 
    /**
     * login to the device
     */
    public boolean login(){
        //入参
        NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY pstInParam=new NetSDKLib.NET_IN_LOGIN_WITH_HIGHLEVEL_SECURITY();
        pstInParam.nPort=port;
        pstInParam.szIP=ip.getBytes();
        pstInParam.szPassword=password.getBytes();
        pstInParam.szUserName=username.getBytes();
        //出参
        deviceInfo=new NetSDKLib.NET_DEVICEINFO_Ex();
        NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY pstOutParam=new NetSDKLib.NET_OUT_LOGIN_WITH_HIGHLEVEL_SECURITY();
        pstOutParam.stuDeviceInfo=deviceInfo;
        loginHandler=netsdk.CLIENT_LoginWithHighLevelSecurity(pstInParam, pstOutParam);
        if(loginHandler.longValue() == 0) {
            System.err.printf("Login Device[%s] Port[%d]Failed. %s\n", ip, port, ToolKits.getErrorCode());
            return false;
        }
 
        System.out.println("Login Success [ ip: " + ip + ",port: "+port+" ]");
        return true;
    }
 
    /**
     * logout
     */
    public void logout(){
        boolean isLogout=netsdk.CLIENT_Logout(loginHandler);
        if(isLogout){
            netsdk.CLIENT_Cleanup();
            System.out.println("logout success.sdk cleaned");
        }else{
            System.out.println("failed to Logout.the error is:"+ToolKits.getErrorCode());
        }
    }
 
    /**
     * 订阅GPS信息,GPS信息处理在回调中进行
     */
    public void subGps(){
        //设置GPS订阅回调
        netsdk.CLIENT_SetSubcribeGPSCallBackEX(gpsRev,null);
        //订阅GPS信息
        //
        int bStart=1;
        int keepTime=-1;
        boolean isSubGps=netsdk.CLIENT_SubcribeGPS(loginHandler,bStart,keepTime,2);
        if(isSubGps){
            System.out.println("subcribeGPS success.");
        }else{
            System.out.println("subcribeGPS failed.the error is "+ToolKits.getErrorCode());
        }
    }
 
    /**
     * 不订阅GPS信息
     * bStart: 1: subcribe,0:dis subcribe
     */
    public void disSubGps(){
        int bStart=0;
        //unit: second
        int keepTime=-1;
        boolean isSubGPS=netsdk.CLIENT_SubcribeGPS(loginHandler,bStart,keepTime,2);
        if(isSubGPS){
            System.out.println("cancel subcribe gps.success");
        }else{
            System.out.println("failed to cancel subcribe gps.the error is "+ToolKits.getErrorCode());
 
        }
    }
 
    /**
     * 订阅智能事件,事件处理在回调中进行
     */
    public void subIntelligentEvent(){
        if(realLoadHandlers==null){
            realLoadHandlers=new ArrayList<NetSDKLib.LLong>();
        }else if(!realLoadHandlers.isEmpty()){
            realLoadHandlers.clear();
        }
        int channelID=0;
        int needPicture=1;
        NetSDKLib.LLong realLoadHandler;
        //sub channel 0,1,2
        for (int i = 0; i < 2; i++) {
            channelID=i;
            realLoadHandler=netsdk.CLIENT_RealLoadPictureEx(loginHandler,channelID,EVENT_IVS_ALL,needPicture,analyzerDataCallBack,null,null);
            if(realLoadHandler.longValue()!=0){
                realLoadHandlers.add(realLoadHandler);
                System.out.println("RealLoadPicture channel "+i+" success.");
            }else{
                System.out.println("RealLoadPicture channel "+i+" failed. the error is: "+ToolKits.getErrorCode());
            }
        }
    }
 
    /**
     * 取消订阅
     */
    public void disSubIntelligentEvent(){
        for (NetSDKLib.LLong realLoadHandler:realLoadHandlers) {
            boolean isDisSub=netsdk.CLIENT_StopLoadPic(realLoadHandler);
            if(isDisSub){
                realLoadHandlers.remove(realLoadHandler);
                System.out.println("cancel intelligentEvent,handler: "+realLoadHandler.longValue()+" subscribe success.");
            }else{
                System.out.println("failed to cancel intelligentEvent subscribe.the error is "+ToolKits.getErrorCode());
            }
        }
    }
    public void runTest(){
        CaseMenu menu=new CaseMenu();
        menu.addItem(new CaseMenu.Item(this,"订阅GPS信息","subGps"));
        menu.addItem(new CaseMenu.Item(this,"取消订阅GPS信息","disSubGps"));
        menu.addItem(new CaseMenu.Item(this,"订阅智能分析事件","subIntelligentEvent"));
        menu.addItem(new CaseMenu.Item(this,"取消订阅智能分析事件","disSubIntelligentEvent"));
        menu.run();
    }
 
    private final String ip="192.168.1.1";
    private final int port=37777;
    private final String username="admin";
    private final String password="admin";
 
    public static void main(String[] args){
        TurkcellDemo demo=new TurkcellDemo();
        if(demo.init()){
            if(demo.login()){
                demo.runTest();
            }
        }
        demo.logout();
    }
}