autojs websocket 核心示例代码,云控技术
阅读原文时间:2023年07月13日阅读:1

//初始化方法
function recordInit(scriptName){
//let ipInfoJson = getIP()
// let ip = ipInfoJson.cip
// let location = ipInfoJson.cname
let deviceIMEI = '',deviceBrand='',deviceModel='',AndroidVer='',deviceWH='',deviceBoard='',deviceMac='',AndroidId=''
try {
deviceBrand = device.brand;//制造厂商
deviceBoard = device.board;//主板
deviceMac = device.getMacAddress()//Mac地址
AndroidId = device.getAndroidId()//安卓ID

        data={  
            "category":1,  
            "uuid":"55421",  
            "device\_code":"086",  
            "configure":"5656E",  
            "owner":"1",  
            "model":device.model,  
            "release": device.release,  
            "memory":~~(device.getAvailMem()/1024/1024)+'MB',  
            "imei":device.getIMEI(),  
            "width":device.width,  
            "height":device.height,  
            "battery":device.getBattery()  
        }  
        var token=setting.storage.get('access\_token')  
        var res = http.postJson(setting.api\_domain+'device/?access-token='+token,data);  
        if(res.statusCode==200){  
            log('已添加')  
            return true  
        }  
        else if(res.statusCode==201){  
            log("已更新")  
            return true  
        }else{  
            log("添加设备失败")  
            return false  
        }

    } catch (error) {  
        log(error)  
        return false;  
    }  
}

var ws = {
run:function(){
setting.ws_status =true;
console.log('使用软件的过程中,请确保您的网络流畅~')
console.log('Websocket连接中..')
setting.ws = web.newWebSocket(setting.websocket_domain, {
//eventThread: 'this'
});

    //ws监听  
    setting.ws.on("open", (res) => {  
        log("WebSocket连接成功!");  
        //心跳检测

        let hi={'type':'connect','uuid':'033246','device\_code':'003'}  
        setting.ws.send(JSON.stringify(hi));

        setting.heartbeat = threads.start(function(){  
            setInterval(function(){  
                console.log('发送心跳包');  
            }, 10000);  
        });

    }).on("failure", (err, res) => {  
        // 关闭心跳包线程  
        setting.heartbeat.interrupt();  
        //console.error(err);  
        setting.ws\_status =false;  
        // 断线重连  
        if(setting.allow\_ws\_re){  
            console.error('与总控的连接已断开,五秒后重连...');  
            sleep(5000)  
            this.run()  
        }  
        // 改变“连接总控”颜色  
        ui.run(function(){  
            ui.start.setBackgroundColor(colors.parseColor("#d6d7d7"))  
            ui.start.text("连接总控")  
            ui.start.setTextColor(colors.parseColor("#000000"))  
        });  
        //alert("提示","ws通道已断开!");  
        //exit();  
    }).on("closing", (code, reason) => {  
        log("WebSocket关闭中");  
    }).on("text", (text) => {  
        log("收到消息")

        try {

            let data = JSON.parse(text);  
            switch(data.type){  
                case 'init':  
                    console.log('等待总控响应...')  
                    var ret=recordInit('init')  
                    console.error("初始化返回:"+ret )  
                    if(ret){  
                        toastLog('成功与总控建立连接')  
                        console.info('大功告成,您可以在总控端控制该终端了~');  
                        // 改变"连接总控"颜色  
                        ui.run(function(){  
                            // 如果在主界面  
                            if(ui.start){  
                                if(setting.sys\_name == "闲鱼助手"){  
                                    ui.start.setBackgroundColor(colors.parseColor("#009688"))  
                                }else{  
                                    ui.start.setTextColor(colors.parseColor("#ffffff"))  
                                    ui.start.setBackgroundColor(colors.parseColor(setting.baozeng\_colour))  
                                }  
                                ui.start.text("已连接")  
                            }

                        });  
                        device.vibrate(500);//震动700毫秒  
                    }else{  
                        setting.ws\_status =false;  
                        let err\_msg = r\['msg'\]  
                        alert(err\_msg);console.error(err\_msg)  
                    }  
                    break;

                case 'start':  
                    log('接到任务:',json.task)  
                    let sid = json.sid  
                    stopEngine()  
                    try {try {if(main\_thread) main\_thread.interrupt()} catch (error) {   }} catch (error) {   }  
                    if(getScriptConfig(sid)){  
                        send\_Log('\[开始运行\]'+json.task,true)  
                        main\_thread = threads.start(function () {  
                            doTask(sid)  
                        });  
                    }else{  
                        send\_Log('\[启动失败\]设备获取脚本配置失败!',true)  
                    }  
                    break;

                case 'web\_to\_aj\_command':  
                    //执行web发来的命令  
                    //console.warn(data.task\_type + '('+data.task\_id+')');  
                    threads.start(function () {  
                        eval(data.task\_type + '('+data.task\_id+')');  
                        console.log('等待总控命令中....')  
                    });  
                    break;

                case 'exec\_command':

                    break;  
                case 'NO':  
                    log(data.msg)  
                    toast(data.msg)  
                    setting.ws.closed();  
                    break;

                case 'web\_to\_aj\_chat\_message':  
                    //web\_to\_aj\_chat\_message  
                    console.log(data)  
                    // console.log('web\_to\_aj\_chat\_message')  
                    setting.message.push({name:data\['name'\],message:data\['message'\]})  
                    break;  
                default:  
                    console.log('defautl')  
                    console.log(data)  
            }

        } catch (error) {  
            log("解析返回来的数据错误")  
            log(error)  
        }  
    }).on("closed", (code, reason) => {  
        //log("WebSocket已关闭: code = %d, reason = %s", code, reason);  
        setting.ws\_status =false;  
        alert("提示","ws通道已断开2");  
        console.error('ws通道已断开2')  
        //exit();  
    });  
}  

}

// 函数导出
module.exports = ws;