From 75201fffb3d5f469cfa4a77e2e71c98a13224f01 Mon Sep 17 00:00:00 2001 From: whycq <913841844@qq.com> Date: 星期四, 21 十一月 2024 14:59:15 +0800 Subject: [PATCH] # --- Monitor-APP/static/js/dispatcher.js | 41 +++ Monitor-APP/static/js/WebSocketClient.js | 191 +++++++++++++++ Monitor-APP/manifest.json | 173 +++++++++++++- Monitor-APP/static/js/WebSocketClient02.js | 141 +++++++++++ Monitor-APP/pages/home/home.vue | 161 +++++++++++-- 5 files changed, 665 insertions(+), 42 deletions(-) diff --git a/Monitor-APP/manifest.json b/Monitor-APP/manifest.json index 6c5100a..073ccc2 100644 --- a/Monitor-APP/manifest.json +++ b/Monitor-APP/manifest.json @@ -26,22 +26,165 @@ /* android鎵撳寘閰嶇疆 */ "android" : { "permissions" : [ - "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", - "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", - "<uses-permission android:name=\"android.permission.VIBRATE\"/>", - "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", - "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", - "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", - "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", - "<uses-permission android:name=\"android.permission.CAMERA\"/>", - "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", - "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", - "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", - "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", - "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", "<uses-feature android:name=\"android.hardware.camera\"/>", - "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>" - ] + "<uses-feature android:name=\"android.hardware.camera.autofocus\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_CHECKIN_PROPERTIES\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_COARSE_LOCATION\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_FINE_LOCATION\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_LOCATION_EXTRA_COMMANDS\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_MOCK_LOCATION\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_SURFACE_FLINGER\"/>", + "<uses-permission android:name=\"android.permission.ACCESS_WIFI_STATE\"/>", + "<uses-permission android:name=\"android.permission.ACCOUNT_MANAGER\"/>", + "<uses-permission android:name=\"android.permission.ADD_VOICEMAIL\"/>", + "<uses-permission android:name=\"android.permission.AUTHENTICATE_ACCOUNTS\"/>", + "<uses-permission android:name=\"android.permission.BATTERY_STATS\"/>", + "<uses-permission android:name=\"android.permission.BIND_ACCESSIBILITY_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_APPWIDGET\"/>", + "<uses-permission android:name=\"android.permission.BIND_CARRIER_MESSAGING_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_DEVICE_ADMIN\"/>", + "<uses-permission android:name=\"android.permission.BIND_DREAM_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_INPUT_METHOD\"/>", + "<uses-permission android:name=\"android.permission.BIND_NFC_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_NOTIFICATION_LISTENER_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_PRINT_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_REMOTEVIEWS\"/>", + "<uses-permission android:name=\"android.permission.BIND_TEXT_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_TV_INPUT\"/>", + "<uses-permission android:name=\"android.permission.BIND_VOICE_INTERACTION\"/>", + "<uses-permission android:name=\"android.permission.BIND_VPN_SERVICE\"/>", + "<uses-permission android:name=\"android.permission.BIND_WALLPAPER\"/>", + "<uses-permission android:name=\"android.permission.BLUETOOTH\"/>", + "<uses-permission android:name=\"android.permission.BLUETOOTH_ADMIN\"/>", + "<uses-permission android:name=\"android.permission.BLUETOOTH_PRIVILEGED\"/>", + "<uses-permission android:name=\"android.permission.BODY_SENSORS\"/>", + "<uses-permission android:name=\"android.permission.BRICK\"/>", + "<uses-permission android:name=\"android.permission.BROADCAST_PACKAGE_REMOVED\"/>", + "<uses-permission android:name=\"android.permission.BROADCAST_SMS\"/>", + "<uses-permission android:name=\"android.permission.BROADCAST_STICKY\"/>", + "<uses-permission android:name=\"android.permission.BROADCAST_WAP_PUSH\"/>", + "<uses-permission android:name=\"android.permission.CALL_PHONE\"/>", + "<uses-permission android:name=\"android.permission.CALL_PRIVILEGED\"/>", + "<uses-permission android:name=\"android.permission.CAMERA\"/>", + "<uses-permission android:name=\"android.permission.CAPTURE_AUDIO_OUTPUT\"/>", + "<uses-permission android:name=\"android.permission.CAPTURE_SECURE_VIDEO_OUTPUT\"/>", + "<uses-permission android:name=\"android.permission.CAPTURE_VIDEO_OUTPUT\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_COMPONENT_ENABLED_STATE\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_CONFIGURATION\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_NETWORK_STATE\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_MULTICAST_STATE\"/>", + "<uses-permission android:name=\"android.permission.CHANGE_WIFI_STATE\"/>", + "<uses-permission android:name=\"android.permission.CLEAR_APP_CACHE\"/>", + "<uses-permission android:name=\"android.permission.CLEAR_APP_USER_DATA\"/>", + "<uses-permission android:name=\"android.permission.CONTROL_LOCATION_UPDATES\"/>", + "<uses-permission android:name=\"android.permission.DELETE_CACHE_FILES\"/>", + "<uses-permission android:name=\"android.permission.DELETE_PACKAGES\"/>", + "<uses-permission android:name=\"android.permission.DEVICE_POWER\"/>", + "<uses-permission android:name=\"android.permission.DIAGNOSTIC\"/>", + "<uses-permission android:name=\"android.permission.DISABLE_KEYGUARD\"/>", + "<uses-permission android:name=\"android.permission.DUMP\"/>", + "<uses-permission android:name=\"android.permission.EXPAND_STATUS_BAR\"/>", + "<uses-permission android:name=\"android.permission.FACTORY_TEST\"/>", + "<uses-permission android:name=\"android.permission.FLASHLIGHT\"/>", + "<uses-permission android:name=\"android.permission.FORCE_BACK\"/>", + "<uses-permission android:name=\"android.permission.GET_ACCOUNTS\"/>", + "<uses-permission android:name=\"android.permission.GET_PACKAGE_SIZE\"/>", + "<uses-permission android:name=\"android.permission.GET_TASKS\"/>", + "<uses-permission android:name=\"android.permission.GET_TOP_ACTIVITY_INFO\"/>", + "<uses-permission android:name=\"android.permission.GLOBAL_SEARCH\"/>", + "<uses-permission android:name=\"android.permission.HARDWARE_TEST\"/>", + "<uses-permission android:name=\"android.permission.INJECT_EVENTS\"/>", + "<uses-permission android:name=\"android.permission.INSTALL_LOCATION_PROVIDER\"/>", + "<uses-permission android:name=\"android.permission.INSTALL_PACKAGES\"/>", + "<uses-permission android:name=\"android.permission.INSTALL_SHORTCUT\"/>", + "<uses-permission android:name=\"android.permission.INTERNAL_SYSTEM_WINDOW\"/>", + "<uses-permission android:name=\"android.permission.INTERNET\"/>", + "<uses-permission android:name=\"android.permission.KILL_BACKGROUND_PROCESSES\"/>", + "<uses-permission android:name=\"android.permission.LOCATION_HARDWARE\"/>", + "<uses-permission android:name=\"android.permission.MANAGE_ACCOUNTS\"/>", + "<uses-permission android:name=\"android.permission.MANAGE_APP_TOKENS\"/>", + "<uses-permission android:name=\"android.permission.MANAGE_DOCUMENTS\"/>", + "<uses-permission android:name=\"android.permission.MASTER_CLEAR\"/>", + "<uses-permission android:name=\"android.permission.MEDIA_CONTENT_CONTROL\"/>", + "<uses-permission android:name=\"android.permission.MODIFY_AUDIO_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.MODIFY_PHONE_STATE\"/>", + "<uses-permission android:name=\"android.permission.MOUNT_FORMAT_FILESYSTEMS\"/>", + "<uses-permission android:name=\"android.permission.MOUNT_UNMOUNT_FILESYSTEMS\"/>", + "<uses-permission android:name=\"android.permission.NFC\"/>", + "<uses-permission android:name=\"android.permission.PERSISTENT_ACTIVITY\"/>", + "<uses-permission android:name=\"android.permission.PROCESS_OUTGOING_CALLS\"/>", + "<uses-permission android:name=\"android.permission.READ_CALENDAR\"/>", + "<uses-permission android:name=\"android.permission.READ_CALL_LOG\"/>", + "<uses-permission android:name=\"android.permission.READ_CONTACTS\"/>", + "<uses-permission android:name=\"android.permission.READ_EXTERNAL_STORAGE\"/>", + "<uses-permission android:name=\"android.permission.READ_FRAME_BUFFER\"/>", + "<uses-permission android:name=\"android.permission.READ_HISTORY_BOOKMARKS\"/>", + "<uses-permission android:name=\"android.permission.READ_INPUT_STATE\"/>", + "<uses-permission android:name=\"android.permission.READ_LOGS\"/>", + "<uses-permission android:name=\"android.permission.READ_PHONE_STATE\"/>", + "<uses-permission android:name=\"android.permission.READ_PROFILE\"/>", + "<uses-permission android:name=\"android.permission.READ_SMS\"/>", + "<uses-permission android:name=\"android.permission.READ_SOCIAL_STREAM\"/>", + "<uses-permission android:name=\"android.permission.READ_SYNC_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.READ_SYNC_STATS\"/>", + "<uses-permission android:name=\"android.permission.READ_USER_DICTIONARY\"/>", + "<uses-permission android:name=\"android.permission.READ_VOICEMAIL\"/>", + "<uses-permission android:name=\"android.permission.REBOOT\"/>", + "<uses-permission android:name=\"android.permission.RECEIVE_BOOT_COMPLETED\"/>", + "<uses-permission android:name=\"android.permission.RECEIVE_MMS\"/>", + "<uses-permission android:name=\"android.permission.RECEIVE_SMS\"/>", + "<uses-permission android:name=\"android.permission.RECEIVE_WAP_PUSH\"/>", + "<uses-permission android:name=\"android.permission.RECORD_AUDIO\"/>", + "<uses-permission android:name=\"android.permission.REORDER_TASKS\"/>", + "<uses-permission android:name=\"android.permission.REQUEST_INSTALL_PACKAGES\"/>", + "<uses-permission android:name=\"android.permission.RESTART_PACKAGES\"/>", + "<uses-permission android:name=\"android.permission.SEND_RESPOND_VIA_MESSAGE\"/>", + "<uses-permission android:name=\"android.permission.SEND_SMS\"/>", + "<uses-permission android:name=\"android.permission.SET_ACTIVITY_WATCHER\"/>", + "<uses-permission android:name=\"android.permission.SET_ALARM\"/>", + "<uses-permission android:name=\"android.permission.SET_ALWAYS_FINISH\"/>", + "<uses-permission android:name=\"android.permission.SET_ANIMATION_SCALE\"/>", + "<uses-permission android:name=\"android.permission.SET_DEBUG_APP\"/>", + "<uses-permission android:name=\"android.permission.SET_ORIENTATION\"/>", + "<uses-permission android:name=\"android.permission.SET_POINTER_SPEED\"/>", + "<uses-permission android:name=\"android.permission.SET_PREFERRED_APPLICATIONS\"/>", + "<uses-permission android:name=\"android.permission.SET_PROCESS_LIMIT\"/>", + "<uses-permission android:name=\"android.permission.SET_TIME\"/>", + "<uses-permission android:name=\"android.permission.SET_TIME_ZONE\"/>", + "<uses-permission android:name=\"android.permission.SET_WALLPAPER\"/>", + "<uses-permission android:name=\"android.permission.SET_WALLPAPER_HINTS\"/>", + "<uses-permission android:name=\"android.permission.SIGNAL_PERSISTENT_PROCESSES\"/>", + "<uses-permission android:name=\"android.permission.STATUS_BAR\"/>", + "<uses-permission android:name=\"android.permission.SUBSCRIBED_FEEDS_READ\"/>", + "<uses-permission android:name=\"android.permission.SUBSCRIBED_FEEDS_WRITE\"/>", + "<uses-permission android:name=\"android.permission.SYSTEM_ALERT_WINDOW\"/>", + "<uses-permission android:name=\"android.permission.TRANSMIT_IR\"/>", + "<uses-permission android:name=\"android.permission.UNINSTALL_SHORTCUT\"/>", + "<uses-permission android:name=\"android.permission.UPDATE_DEVICE_STATS\"/>", + "<uses-permission android:name=\"android.permission.USE_CREDENTIALS\"/>", + "<uses-permission android:name=\"android.permission.USE_FINGERPRINT\"/>", + "<uses-permission android:name=\"android.permission.USE_SIP\"/>", + "<uses-permission android:name=\"android.permission.VIBRATE\"/>", + "<uses-permission android:name=\"android.permission.WAKE_LOCK\"/>", + "<uses-permission android:name=\"android.permission.WRITE_APN_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_CALENDAR\"/>", + "<uses-permission android:name=\"android.permission.WRITE_CALL_LOG\"/>", + "<uses-permission android:name=\"android.permission.WRITE_CONTACTS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_EXTERNAL_STORAGE\"/>", + "<uses-permission android:name=\"android.permission.WRITE_GSERVICES\"/>", + "<uses-permission android:name=\"android.permission.WRITE_HISTORY_BOOKMARKS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_PROFILE\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SECURE_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SMS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SOCIAL_STREAM\"/>", + "<uses-permission android:name=\"android.permission.WRITE_SYNC_SETTINGS\"/>", + "<uses-permission android:name=\"android.permission.WRITE_USER_DICTIONARY\"/>", + "<uses-permission android:name=\"android.permission.WRITE_VOICEMAIL\"/>", + "<uses-permission android:name=\"android.permission.RECEIVE_USER_PRESENT\"/>" + ], + "abiFilters" : [ "armeabi-v7a", "arm64-v8a", "x86" ] }, /* ios鎵撳寘閰嶇疆 */ "ios" : { diff --git a/Monitor-APP/pages/home/home.vue b/Monitor-APP/pages/home/home.vue index ac2912f..83b77f6 100644 --- a/Monitor-APP/pages/home/home.vue +++ b/Monitor-APP/pages/home/home.vue @@ -328,6 +328,7 @@ <script> import demodata from '@/mockdata/demodata.json'; import ycqdata from '@/pages/index/data.json'; + import {WebSocketClient} from "@/static/js/WebSocketClient" export default { data() { return { @@ -416,42 +417,148 @@ // this.getUrl() }, onLoad() { - // this.ws() setInterval(()=>{ this.getServerData() - this.initlineChart() - this.initPieChart() - this.getOther() - this.getDate() - this.getDate2() - this.getInfo() - this.getError() - // this.getInfo2() - // this.getError2() - this.getUrl() + // this.initlineChart() + // this.initPieChart() + // this.getOther() + // // this.getDate() + // this.getDate2() + // this.getInfo() + // this.getError() + // // this.getInfo2() + // // this.getError2() + // this.getUrl() this.controller() - + // this.statisticalModel() // 娴嬭瘯鐢� },1000) + setInterval(()=> { + setTimeout(()=>{ + plus.runtime.restart(); + },100) + + },1000*60*60*4) + + setInterval(()=> { + setTimeout(()=>{ + var time = new Date(); + var hh = time.getHours(); + var mm = time.getMinutes(); + if(hh > this.oldHours && mm >this.oldMin && this.oldMin - mm < 55){ + plus.runtime.restart(); + } + if(mm >this.oldMin && mm - this.oldMin >2){ + plus.runtime.restart(); + } + },100) + + },1000*30) + }, + created() { + let that = this + const BaseIP = uni.getStorageSync('BaseIp'); + const BaseLedId = uni.getStorageSync('BaseLedId'); + const BasePort = uni.getStorageSync('BasePort'); + const BaseCrnId = uni.getStorageSync('BaseCrnId'); + const PROJ = uni.getStorageSync('UPROJ'); + that.baseUrl = "pswcs" + that.baseIP = "10.10.10.230" + that.baseLedId = BaseLedId + that.basePort = "9090" + that.baseCrnId = BaseCrnId + that.webSockerInit(); }, methods: { - ws() { - let _this = this - _this.connectWS() - uni.onSocketOpen(function (res) { - console.log("Open"); - }) - uni.onSocketClose(function (res) { - console.log("Close"); - setInterval(()=>{ - _this.connectWS() - },1000) - }) - }, - connectWS() { - uni.connectSocket({ url: `http://127.0.0.1:9090/pswcs/console/websocket`, }) + webSockerInit(){ + let that = this; + that.commonUrl = that.baseIP + ':' +that.basePort + "/" +that.baseUrl + let socketUrl = "ws://"+that.commonUrl+"/led/"+that.baseLedId + // socketUrl = "ws://10.0.100.150:8080/gtctu/led/113" + const ws = new WebSocketClient(socketUrl); + ws.connect() + ws.onmessage((msg)=>{ + let data = JSON.parse(msg.data) + if(data.type === "default"){ + that.chartsData.Pie.series[0].data = data.pie + that.baseInfo.stockCount = data.stockCunt + that.baseInfo.emptyCount = data.emptyCount + that.baseInfo.noneCount =data.noneCount + that.baseInfo.used = data.used + that.baseInfo.usedPr = data.usedPr + + that.chartsData.Line.categories = [ + that.getDateFormat(-11),that.getDateFormat(-10),that.getDateFormat(-9),that.getDateFormat(-8), + that.getDateFormat(-7),that.getDateFormat(-6),that.getDateFormat(-5),that.getDateFormat(-4), + that.getDateFormat(-3),that.getDateFormat(-2),that.getDateFormat(-1),that.getDateFormat(0),] + that.chartsData.Line.series = data.rows + that.calendar = data.year + "骞�" + data.month + "鏈�" + data.day + "鏃� " + data.hour + ":" + data.minute + ":" + data.second + " " + data.week + that.currDate = data.year + "/" + data.month + "/" + data.day + that.locList = data.inventoryData + that.oldHours = data.hour + that.oldMin = data.minute + }else if(data.type === "error"){ + if (data.errMsg && data.errMsg !== "") { + var errorInfo = data.errMsg + if (that.infoType == 1) { + that.infoType = 3 + that.infoText.title = "鍏朵粬淇℃伅" + // that.infoText.title = "寮傚父" + that.infoText.error = errorInfo + return + } + that.infoType = 2 + that.infoText.title = "鍏朵粬淇℃伅" + // that.infoText.title = "寮傚父" + that.infoText.error = errorInfo + } else { + if (that.infoType == 1) { + return + } + that.infoType = 0 + } + }else if(data.type === "task"){ + if (data.taskList && data.taskList !== "" && data.taskList.length !=0) { + if (that.infoType == 2 || that.infoType == 3) { + return; + } + // infoType1:鍙湁鎷f枡绛変俊鎭� + that.infoType = 1 + if (data.taskList[0].ioType === 101) { + that.infoText.title = '鍏ㄦ澘鍑哄簱' + } else if(data.taskList[0].ioType === 103) { + that.infoText.title = '鎷f枡鍑哄簱' + } else if(data.taskList[0].ioType === 107) { + that.infoText.title = '鐩樼偣鍑哄簱' + } else if(data.taskList[0].ioType === 1) { + that.infoText.title = '鍏ュ簱' + } else if(data.taskList[0].ioType === 10) { + that.infoText.title = '绌烘墭鍏ュ簱' + } else if(data.taskList[0].ioType === 110) { + that.infoText.title = '绌烘墭鍑哄簱' + }else if(data.taskList[0].ioType === 104) { + that.infoText.title = '骞舵澘鍑哄簱' + } + that.infoText.barcode = data.taskList[0].barcode + that.infoText.workNo = data.taskList[0].workNo + that.infoText.sourceLocNo = data.taskList[0].sourceLocNo + that.infoText.staNo = data.taskList[0].staNo + that.swiperList = data.taskList[0].matDtos + // that.infoText.matnr = res.data[0].matDtos[0].matnr + // that.infoText.specs = res.data[0].matDtos[0].specs + // that.infoText.maknx = res.data[0].matDtos[0].maknx + // that.infoText.count = res.data[0].matDtos[0].count + } else { + if (that.infoType == 2 || that.infoType == 3) { + return; + } + that.infoType = 0 + } + } + + }) }, timeOut1() { console.log(this.times); diff --git a/Monitor-APP/static/js/WebSocketClient.js b/Monitor-APP/static/js/WebSocketClient.js new file mode 100644 index 0000000..c8a5b6a --- /dev/null +++ b/Monitor-APP/static/js/WebSocketClient.js @@ -0,0 +1,191 @@ +import { EventDispatcher } from './dispatcher'; + +export class WebSocketClient extends EventDispatcher { + // #socket閾炬帴 + url = ''; + // #socket瀹炰緥 + socket = null; + // #閲嶈繛娆℃暟 + reconnectAttempts = 0; + // #鏈�澶ч噸杩炴暟 + maxReconnectAttempts = 20; + // #閲嶈繛闂撮殧 + reconnectInterval = 60000; // 10 seconds + // #鍙戦�佸績璺虫暟鎹棿闅� + heartbeatInterval = 1000 * 30; + // #璁℃椂鍣╥d + heartbeatTimer = undefined; + // #褰诲簳缁堟ws + stopWs = false; + // *鏋勯�犲嚱鏁� + constructor(url) { + super(); + this.url = url; + } + // >鐢熷懡鍛ㄦ湡閽╁瓙 + onopen(callBack) { + this.addEventListener('open', callBack); + } + onmessage(callBack) { + this.addEventListener('message', callBack); + } + onclose(callBack) { + this.addEventListener('close', callBack); + } + onerror(callBack) { + this.addEventListener('error', callBack); + } + // >娑堟伅鍙戦�� + send(message) { + if (this.socket && this.socket.readyState === WebSocket.OPEN) { + this.socket.send({ + data:message, + }); + } else { + console.error('[WebSocket] 鏈繛鎺�'); + } + } + + // !鍒濆鍖栬繛鎺� + connect() { + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `鍒濆鍖栬繛鎺ヤ腑... ${this.url}`); + } + if (this.socket && this.socket.readyState === WebSocket.OPEN) { + return; + } + this.socket = uni.connectSocket({ + url: this.url, + complete: ()=> {} + }); + this.socket.onOpen((event)=>{ + this.stopWs = false; + // 閲嶇疆閲嶈繛灏濊瘯鎴愬姛杩炴帴 + this.reconnectAttempts = 0; + // 鍦ㄨ繛鎺ユ垚鍔熸椂鍋滄褰撳墠鐨勫績璺虫娴嬪苟閲嶆柊鍚姩 + this.startHeartbeat(); + this.log('WebSocket', `杩炴帴鎴愬姛,绛夊緟鏈嶅姟绔暟鎹帹閫乕onopen]... ${this.url}`); + this.dispatchEvent('open', event); + }) + // !websocket杩炴帴鎴愬姛 + // this.socket.onOpen = event => { + // this.stopWs = false; + // // 閲嶇疆閲嶈繛灏濊瘯鎴愬姛杩炴帴 + // this.reconnectAttempts = 0; + // // 鍦ㄨ繛鎺ユ垚鍔熸椂鍋滄褰撳墠鐨勫績璺虫娴嬪苟閲嶆柊鍚姩 + // this.startHeartbeat(); + // this.log('WebSocket', `杩炴帴鎴愬姛,绛夊緟鏈嶅姟绔暟鎹帹閫乕onopen]... ${this.url}`); + // this.dispatchEvent('open', event); + // }; + this.socket.onMessage((event)=>{ + this.dispatchEvent('message', event); + this.startHeartbeat(); + }) + // this.socket.onMessage = event => { + // console.log(event) + // this.dispatchEvent('message', event); + // this.startHeartbeat(); + // }; + this.socket.onClose((event)=>{ + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `杩炴帴鏂紑[onclose]... ${this.url}`); + } + if (!this.stopWs) { + this.handleReconnect(); + } + this.dispatchEvent('close', event); + }) + // this.socket.onClose = event => { + // if (this.reconnectAttempts === 0) { + // this.log('WebSocket', `杩炴帴鏂紑[onclose]... ${this.url}`); + // } + // if (!this.stopWs) { + // this.handleReconnect(); + // } + // this.dispatchEvent('close', event); + // }; + this.socket.onError((event)=>{ + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `杩炴帴寮傚父[onerror]... ${this.url}`); + } + if (!this.stopWs) { + this.handleReconnect(); + } + this.closeHeartbeat(); + this.dispatchEvent('error', event); + }) + + // uni.onSocketError((event)=>{ + // console.log("333") + // if (this.reconnectAttempts === 0) { + // this.log('WebSocket', `杩炴帴寮傚父[onerror]... ${this.url}`); + // } + // if (!this.stopWs) { + // this.handleReconnect(); + // } + // this.closeHeartbeat(); + // this.dispatchEvent('error', event); + // }) + // this.socket.onError = event => { + // if (this.reconnectAttempts === 0) { + // this.log('WebSocket', `杩炴帴寮傚父[onerror]... ${this.url}`); + // } + // this.closeHeartbeat(); + // this.dispatchEvent('error', event); + // }; + } + + // > 鏂綉閲嶈繛閫昏緫 + handleReconnect() { + if (this.reconnectAttempts < this.maxReconnectAttempts) { + this.reconnectAttempts++; + this.log('WebSocket', `灏濊瘯閲嶈繛... (${this.reconnectAttempts}/${this.maxReconnectAttempts}) ${this.url}`); + setTimeout(() => { + this.connect(); + }, this.reconnectInterval); + } else { + plus.runtime.restart(); + // this.closeHeartbeat(); + // this.log('WebSocket', `鏈�澶ч噸杩炲け璐ワ紝缁堟閲嶈繛: ${this.url}`); + } + } + + // >鍏抽棴杩炴帴 + close() { + if (this.socket) { + this.stopWs = true; + this.socket.close(); + this.socket = null; + this.removeEventListener('open'); + this.removeEventListener('message'); + this.removeEventListener('close'); + this.removeEventListener('error'); + } + this.closeHeartbeat(); + } + + // >寮�濮嬪績璺虫娴� -> 瀹氭椂鍙戦�佸績璺虫秷鎭� + startHeartbeat() { + if (this.stopWs) return; + if (this.heartbeatTimer) { + this.closeHeartbeat(); + } + this.heartbeatTimer = setInterval(() => { + if (this.socket) { + this.socket.send({ + data: JSON.stringify({ type: 'heartBeat', data: {} }), + + }); + this.log('WebSocket', '閫佸績璺虫暟鎹�...'); + } else { + console.error('[WebSocket] 鏈繛鎺�'); + } + }, this.heartbeatInterval); + } + + // >鍏抽棴蹇冭烦 + closeHeartbeat() { + clearInterval(this.heartbeatTimer); + this.heartbeatTimer = undefined; + } +} \ No newline at end of file diff --git a/Monitor-APP/static/js/WebSocketClient02.js b/Monitor-APP/static/js/WebSocketClient02.js new file mode 100644 index 0000000..7ea8584 --- /dev/null +++ b/Monitor-APP/static/js/WebSocketClient02.js @@ -0,0 +1,141 @@ +// import { EventDispatcher } from './dispatcher'; + +export class WebSocketClient extends EventDispatcher { + // #socket閾炬帴 + url = ''; + // #socket瀹炰緥 + socket = null; + // #閲嶈繛娆℃暟 + reconnectAttempts = 0; + // #鏈�澶ч噸杩炴暟 + maxReconnectAttempts = 5; + // #閲嶈繛闂撮殧 + reconnectInterval = 10000; // 10 seconds + // #鍙戦�佸績璺虫暟鎹棿闅� + heartbeatInterval = 1000 * 30; + // #璁℃椂鍣╥d + heartbeatTimer = undefined; + // #褰诲簳缁堟ws + stopWs = false; + // *鏋勯�犲嚱鏁� + constructor(url) { + super(); + this.url = url; + } + // >鐢熷懡鍛ㄦ湡閽╁瓙 + onopen(callBack) { + this.addEventListener('open', callBack); + } + onmessage(callBack) { + this.addEventListener('message', callBack); + } + onclose(callBack) { + this.addEventListener('close', callBack); + } + onerror(callBack) { + this.addEventListener('error', callBack); + } + // >娑堟伅鍙戦�� + send(message) { + if (this.socket && this.socket.readyState === WebSocket.OPEN) { + this.socket.send(message); + } else { + console.error('[WebSocket] 鏈繛鎺�'); + } + } + + // !鍒濆鍖栬繛鎺� + connect() { + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `鍒濆鍖栬繛鎺ヤ腑... ${this.url}`); + } + if (this.socket && this.socket.readyState === WebSocket.OPEN) { + return; + } + this.socket = new WebSocket(this.url); + + // !websocket杩炴帴鎴愬姛 + this.socket.onopen = event => { + this.stopWs = false; + // 閲嶇疆閲嶈繛灏濊瘯鎴愬姛杩炴帴 + this.reconnectAttempts = 0; + // 鍦ㄨ繛鎺ユ垚鍔熸椂鍋滄褰撳墠鐨勫績璺虫娴嬪苟閲嶆柊鍚姩 + this.startHeartbeat(); + this.log('WebSocket', `杩炴帴鎴愬姛,绛夊緟鏈嶅姟绔暟鎹帹閫乕onopen]... ${this.url}`); + this.dispatchEvent('open', event); + }; + + this.socket.onmessage = event => { + this.dispatchEvent('message', event); + this.startHeartbeat(); + }; + + this.socket.onclose = event => { + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `杩炴帴鏂紑[onclose]... ${this.url}`); + } + if (!this.stopWs) { + this.handleReconnect(); + } + this.dispatchEvent('close', event); + }; + + this.socket.onerror = event => { + if (this.reconnectAttempts === 0) { + this.log('WebSocket', `杩炴帴寮傚父[onerror]... ${this.url}`); + } + this.closeHeartbeat(); + this.dispatchEvent('error', event); + }; + } + + // > 鏂綉閲嶈繛閫昏緫 + handleReconnect() { + if (this.reconnectAttempts < this.maxReconnectAttempts) { + this.reconnectAttempts++; + this.log('WebSocket', `灏濊瘯閲嶈繛... (${this.reconnectAttempts}/${this.maxReconnectAttempts}) ${this.url}`); + setTimeout(() => { + this.connect(); + }, this.reconnectInterval); + } else { + this.closeHeartbeat(); + this.log('WebSocket', `鏈�澶ч噸杩炲け璐ワ紝缁堟閲嶈繛: ${this.url}`); + } + } + + // >鍏抽棴杩炴帴 + close() { + if (this.socket) { + this.stopWs = true; + this.socket.close(); + this.socket = null; + this.removeEventListener('open'); + this.removeEventListener('message'); + this.removeEventListener('close'); + this.removeEventListener('error'); + } + this.closeHeartbeat(); + } + + // >寮�濮嬪績璺虫娴� -> 瀹氭椂鍙戦�佸績璺虫秷鎭� + startHeartbeat() { + if (this.stopWs) return; + if (this.heartbeatTimer) { + this.closeHeartbeat(); + } + this.heartbeatTimer = setInterval(() => { + if (this.socket) { + this.socket.send(JSON.stringify({ type: 'heartBeat', data: {} })); + this.log('WebSocket', '閫佸績璺虫暟鎹�...'); + } else { + console.error('[WebSocket] 鏈繛鎺�'); + } + }, this.heartbeatInterval); + } + + // >鍏抽棴蹇冭烦 + closeHeartbeat() { + clearInterval(this.heartbeatTimer); + this.heartbeatTimer = undefined; + } +} \ No newline at end of file diff --git a/Monitor-APP/static/js/dispatcher.js b/Monitor-APP/static/js/dispatcher.js new file mode 100644 index 0000000..8259b48 --- /dev/null +++ b/Monitor-APP/static/js/dispatcher.js @@ -0,0 +1,41 @@ +class Log { + static console = true; + log(title, text) { + // if (!Log.console) return; + // if (import.meta.env.MODE === 'production') return; + const color = '#ff4d4f'; + console.log( + `%c ${title} %c ${text} %c`, + `background:${color};border:1px solid ${color}; padding: 1px; border-radius: 2px 0 0 2px; color: #fff;`, + `border:1px solid ${color}; padding: 1px; border-radius: 0 2px 2px 0; color: ${color};`, + 'background:transparent' + ); + } + closeConsole() { + Log.console = false; + } +} +export class EventDispatcher extends Log { + listeners = {}; + + addEventListener(type, listener) { + if (!this.listeners[type]) { + this.listeners[type] = []; + } + if (this.listeners[type].indexOf(listener) === -1) { + this.listeners[type].push(listener); + } + } + + removeEventListener(type) { + this.listeners[type] = []; + } + + dispatchEvent(type, data) { + const listenerArray = this.listeners[type] || []; + if (listenerArray.length === 0) return; + listenerArray.forEach(listener => { + listener.call(this, data); + }); + } +} \ No newline at end of file -- Gitblit v1.9.1