<template>
  <div id="app">
    <router-view />
  </div>
</template>

<script>
export default {
  name: 'App',
  created() {
    this.webSocket() // token过期提示
  },
  methods: {
    webSocket() {
      const that = this
      if (typeof (WebSocket) === 'undefined') {
        this.$notify({
          title: '提示',
          message: '当前浏览器无法接收实时报警信息，请使用谷歌浏览器！',
          type: 'warning',
          duration: 0
        })
      } else {
        const id = 'exp-token'
        // 获取token保存到vuex中的用户信息，此处仅适用于本项目，注意删除或修改
        // 实例化socket，这里我把用户名传给了后台，使后台能判断要把消息发给哪个用户，其实也可以后台直接获取用户IP来判断并推送
        // const socketUrl = process.env.VUE_APP_WS_API + id
        const wsUri = window.g.prod.VUE_APP_BASE_API.replace('http', 'ws') + '/webSocket/' + id
        this.socket = new WebSocket(wsUri)
        // 监听socket打开
        this.socket.onopen = function() {
          that.socket.send('测试客户端发送消息')
        }
        const _this = this
        // 监听socket消息接收
        this.socket.onmessage = function(msg) {
          const data = JSON.parse(msg.data)
          _this.$confirm(data.msg, '提示', {
            confirmButtonText: '确定',
            closeOnClickModal: false,
            showCancelButton: false,
            type: 'warning'
          }).then(() => {
            _this.$router.push('/login')
          }).catch(() => {
            this.$message({
              type: 'info',
              message: '已取消'
            })
          })
        }

        // 监听socket错误
        this.socket.onerror = function() {
          that.$notify({
            title: '错误',
            message: '服务器错误，无法接收实时报警信息',
            type: 'error',
            duration: 0
          })
        }
        // 监听socket关闭
        this.socket.onclose = function() {
          console.log('WebSocket已关闭')
        }
      }
    }
  }
}
</script>
