<script>
	export default {
		globalData: {
			apiUrl: 'http://192.168.3.32:81', //接口地址
			mobileUrl: 'http://172.19.2.177:8081', //语音调度网关地址
			fileUrl: 'http://192.168.3.32:1888' //文件资源前缀
		},
		data() {
			return {
				keepAlive: null,
				reTimenum: 2000, //3秒一次重新链接
				reTimer: null, //重新链接的对象
				headerTimer: null, //心跳定时器对象
				headerTime: 2000, //心跳时间
				closeTimer: null, //自动关闭连接定时器对象
				closeTime: 3000, //自动关闭时间
				employeeId: '',
				lockReconnect: false, //避免重复连接
				
			}
		},
		onLaunch: function() {
			console.log('App Launch');
			this.keepAlive = uni.requireNativePlugin('Ba-KeepAliveSuit');
		},
		onShow: function() {
			console.log('App Show');
			let userInfo = uni.getStorageSync('mobileInfo') ? JSON.parse(uni.getStorageSync('mobileInfo')) : null;
			if (userInfo && userInfo.employeeId != this.employeeId) {
				this.employeeId = userInfo.employeeId;
				// this.doConnectWebSocket();
			}
			if(this.keepAlive){
				this.keepAlive.onCancelNotify();
			}
		},
		onHide: function() {
			console.log('App Hide')
			if(this.keepAlive){
				setTimeout(() => {
					this.onShowNotify();
				}, 5000);
			}
		},
		methods: {
			onKeep() {
				//通用保活
				this.keepAlive.onKeep({
						//channelId: "Ba-KeepAlive",
						//channelName: "Ba-KeepAlive",
						title: "测试",
						content: "常驻通知描述",
					},
					(res) => {
						console.log(res);
					});
			},
			onAutoStart() { //去设置自启动、后台运行
				this.keepAlive.onAutoStart(
					(res) => {
						console.log(res);
						uni.showToast({
							title: res.msg,
							icon: "none",
							duration: 3000
						})
					});
			},
			requestIgnoreBattery() { //申请加入电池优化白名单
				this.keepAlive.requestIgnoreBattery(
					res => {
						console.log(res);
						uni.showToast({
							title: res.msg,
							icon: "none",
							duration: 3000
						})
					});
			},
			goIgnoreBattery() { //跳转到电池优化设置页
				this.keepAlive.goIgnoreBattery(
					res => {
						console.log(res);
						uni.showToast({
							title: res.msg,
							icon: "none",
							duration: 3000
						})
					});
			},
			isIgnoringBattery() { //是否加入电池优化白名单
				this.keepAlive.isIgnoringBattery(
					res => {
						console.log(res);
						// if (res.data) {
						//  this.msgList.unshift(JSON.stringify(res.data))
						//  this.msgList.unshift(dateUtil.now())
						// }
						uni.showToast({
							title: res.msg,
							icon: "none",
							duration: 3000
						})
					});
			},
			onShowNotify() { //常驻通知保活
				this.keepAlive.onShowNotify({
						//channelId: "Ba-KeepAlive",
						//channelName: "Ba-KeepAlive",
						ID: 99,
						title: "一楼202室无线入侵",
						content: "一楼202室无线入侵报警",
					},
					(res) => {
						console.log(res);
						// uni.showToast({
						// 	title: res.msg,
						// 	icon: "none",
						// 	duration: 3000
						// })
					});
			},
			onCancelNotify() { //取消常驻通知保活
				this.keepAlive.onCancelNotify({
						//channelId: "Ba-KeepAlive",
						//channelName: "Ba-KeepAlive",
						//ID:99
						//title: "测试",
						//content: "常驻通知描述",
					},
					(res) => {
						console.log(res);
						// uni.showToast({
						// 	title: res.msg,
						// 	icon: "none",
						// 	duration: 3000
						// })
					});
			},
			//websocket
			doConnectWebSocket() {
				this.connectWebSocket();
				//socket open监听
				uni.onSocketOpen((res) => {
					console.log('WebSocket连接已打开！');
					//链接打开，开启心跳
					this.sendHeader();
				});
				//监听WebSocket接受到服务器的消息事件
				uni.onSocketMessage((res) => {
					console.log('收到服务器内容：' + res.data);
					this.sendHeader();
				});
				uni.onSocketError((res) => {
					console.log('WebSocket连接打开失败，请检查！');
					this.reConnectWebSocket();
				});
				uni.onSocketClose((res) => {
					//关闭心跳  并重新链接
					this.headerTimer && clearInterval(this.headerTimer);
					console.log('WebSocket连接关闭，请检查！', res);
					if (res.code != null && res.code != 1000) {
						//非正常关闭  提示网络异常并开始重新链接
						//开启重复重连机制
						this.reConnectWebSocket();
					}
				});
			},
			//创建websocket
			connectWebSocket() {
				uni.connectSocket({
					url: '',
					method: 'GET',
					success(data) {
						console.log("websocket连接返回", data);
					},
				});
			},
			//重连机制
			reConnectWebScoket() {
				// 防止多个方法调用，多处重连
				if (this.lockReconnect) {
					return;
				};
				this.lockReconnect = true;

				console.log('准备重连');
				this.reTimer = setTimeout(() => {
					this.doConnectWebSocket();
					this.lockReconnect = false;
				}, this.reTimenum);
			},
			//心跳
			sendHeader() {
				console.log("发送心跳sendHeader")
				this.headerTimer && clearInterval(this.headerTimer)
				this.headerTimer = setInterval(() => {
					console.log("发送心跳")
					uni.sendSocketMessage({
						data: "header"
					});
				}, this.headerTime)
			},
			//关闭
			closeConn() {
				//6秒后没有心跳则  关闭链接
				this.closeTimer = setTimeout(() => {
					console.log("执行关闭定时器内容")
					uni.closeSocket({
						code: 1001,
						reason: '断线',
						complete(res) {
							console.log("websocket关闭complete", res)
						}
					})
				}, this.closeTime)
			},
			// 判断通知权限
			getPermis() {
				console.log(plus.os.name)
				var main = plus.android.runtimeMainActivity();
				var pkName = main.getPackageName();
				var uid = main.getApplicationInfo().plusGetAttribute("uid");
				var NotificationManagerCompat = plus.android.importClass("android.support.v4.app.NotificationManagerCompat");
				console.log('plus====', NotificationManagerCompat, uid)

				//android.support.v4升级为androidx
				if (NotificationManagerCompat == null) {
					NotificationManagerCompat = plus.android.importClass("androidx.core.app.NotificationManagerCompat");
				}
				var areNotificationsEnabled = NotificationManagerCompat.from(main).areNotificationsEnabled();
				// 未开通‘允许通知’权限，则弹窗提醒开通，并点击确认后，跳转到系统设置页面进行设置  
				console.log('areNotificationsEnabled', areNotificationsEnabled)
				if (!areNotificationsEnabled) {
					uni.showModal({
						title: '通知权限开启提醒',
						content: '您还没有开启通知权限，无法接受到消息通知，请前往设置！',
						showCancel: false,
						confirmText: '去设置',
						success: function(res) {
							if (res.confirm) {
								var Intent = plus.android.importClass('android.content.Intent');
								var Build = plus.android.importClass("android.os.Build");
								//android 8.0引导  
								if (Build.VERSION.SDK_INT >= 26) {
									var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
									intent.putExtra('android.provider.extra.APP_PACKAGE', pkName);
								} else if (Build.VERSION.SDK_INT >= 21) { //android 5.0-7.0  
									var intent = new Intent('android.settings.APP_NOTIFICATION_SETTINGS');
									intent.putExtra("app_package", pkName);
									intent.putExtra("app_uid", uid);
								} else { //(<21)其他--跳转到该应用管理的详情页  
									intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
									var uri = Uri.fromParts("package", mainActivity.getPackageName(), null);
									intent.setData(uri);
								}
								// 跳转到该应用的系统通知设置页  
								main.startActivity(intent);
							}
						}
					});
				}
			},
		}
	}
</script>

<style lang="scss">
	/*每个页面公共css */
	@import '@/uni_modules/uni-scss/index.scss';
	/* #ifndef APP-NVUE */
	@import '@/static/customicons.css';

	// 设置整个项目的背景色
	page {
		background-color: #f5f5f5;
	}

	/* #endif */
	.example-info {
		font-size: 14px;
		color: #333;
		padding: 10px;
	}
</style>