// import store from '@/store/index'
// import {NotificationBackend} from '@/api/index'

class webscoketUtill {
    constructor(url = '') {
        //连接地址
        this.url = url
        //连接器
        this.ws = null
        //避免重复连接
        this.is_open_scoket = false
          //心跳
          this.heartbeatMessage = 0
        //心跳时间
        this.timeout = 150*1000
        //心跳定时器
        this.heartbeatInterval = null
        //重连次数
        this.reconnectionTimes = 9
        //多久重连一次
        this.reconnectionTimeout = null
        //连接次数
        this.numberConnections = 0

        try {
            this.init()
        } catch (e) {
            throw  new Error(e)
        }

    }

    init() {

        //判断是否有连接
        if (this.ws) {
            this.ws.close()
        }      
        //创建webscoket
        this.ws = new WebSocket(this.url)
        //监听链接是否成功
        this.ws.onopen = (e) => {
            this.is_open_scoket = true
            this.numberConnections = 0
            clearInterval(this.heartbeatInterval)
            clearTimeout(this.reconnectionTimeout)
            this.heartbeat()
            this.onmessage()
            this.onclose()
            let obj = {
                id: 1,
                channel: "check"
              }
              this.ws.send(JSON.stringify(obj))
            

        }
        this.onerror()
    }

    //接收后端信息
    onmessage(handelData) {
     
        this.ws.onmessage = (res) => {
            // if (this.isJSON(res.data)) {
            //     return e
            //     // let data = JSON.parse(e.data)
            //     // if (data.code === 201) {
            //     //     NotificationBackend({
            //     //         symbol: store.state.currency,
            //     //         time: '30s',
            //     //         client_id: data.data.client_id
            //     //     })
            //     // }
            //     // if (data.code === 202) {
            //     //     let arr = []
            //     //     data.data.history.forEach(item => {
            //     //         arr.push(JSON.parse(item))
            //     //     })
            //     //     store.commit({
            //     //         type: 'on_K_line_array',
            //     //         data: arr
            //     //     })
            //     // }
            //     // if (data.code === 203) {
            //     //     store.commit({
            //     //         type: 'onSecondData',
            //     //         data: JSON.parse(data.data)
            //     //     })
            //     // }
            //     // if (data.code === 204) {
            //     //     store.commit({
            //     //         type: 'onBranchData',
            //     //         data: data.data || false
            //     //     })
            //     // }
            // }
        }

    }

    //发送消息
    send(val) {
        let str = ''
        if (typeof val === 'string') {
            str = val
        } else {
            str = JSON.stringify(val)
        }
        this.ws.send(str)
    }

    //检测心跳
    heartbeat() {
        this.heartbeatInterval = setInterval(() => {
            this.send(JSON.stringify("ping"))
        }, this.timeout)
    }

    //重连
    reconnection() {
        clearInterval(this.heartbeatInterval)
        clearTimeout(this.reconnectionTimeout)
        if (!this.is_open_scoket) {
            if (this.numberConnections < this.reconnectionTimes) {
                this.close()
                this.init()
                this.numberConnections++
                this.reconnectionTimeout = setTimeout(() => {
                    this.reconnection()
                }, 3000)
            }
        }
    }

    //后端连接断开
    onclose() {
        this.ws.onclose = (e) => {
            this.is_open_scoket = false
            this.reconnection()
        }
    }

    close() {
        this.send({
            code: 2,
            data: '我已关闭！'
        })
        this.ws.close()

    }

    //连接失败
    onerror() {
        console.log(123)
        this.ws.onerror = (e) => {
            this.is_open_scoket = false
            this.reconnection()
        }
    }

    //判断是否是json
    isJSON(str) {
        if (typeof str === 'string') {
            try {
                let obj = JSON.parse(str)
                if (typeof obj === 'object' && obj) {
                    return true
                } else {
                    return false
                }
            } catch (e) {
                return false
            }
        }
    }
}

export default webscoketUtill