| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- import {
- WSS_SERVER_URL,
- HEADER,
- SERVER_DEBUG,
- PINGINTERVAL
- } from './../config.js';
- export default class Server {
- constructor(app) {
- this.chatId = null // chat_id
- this.connectStatus = false // websocket 连接状态 false:未连接,true:已连接
- this.timer = null // 心跳
- this.watcherList = [] // 订阅者
- this.app = app // 方便在Chat内部操作app
- this.debug = SERVER_DEBUG //debug
- }
- connectSocket() {
- let that = this;
- this.chatId = new Date().getTime();
- this.SocketTask = wx.connectSocket({
- url: WSS_SERVER_URL,
- header: HEADER,
- method: 'post',
- success: res => {
- that.debug && console.log(res);
- },
- fail: err => {
- that.debug && console.log(err);
- }
- });
- wx.onSocketOpen(this.onOpen.bind(this));
- wx.onSocketMessage(this.onMessage.bind(this));
- wx.onSocketError(this.onError.bind(this));
- wx.onSocketClose(this.onClose.bind(this));
- }
- /**
- * 心跳
- */
- ping() {
- let that = this;
- this.timer = setInterval(() => {
- that.send({
- type: 'ping'
- });
- }, PINGINTERVAL);
- }
- /**
- * 关闭链接
- */
- close() {
- clearInterval(this.timer);
- this.SocketTask.close();
- this.connectStatus = false;
- }
- /**
- * 发送消息
- */
- send(data) {
- let that = this;
- return new Promise((reslove, reject) => {
- that.SocketTask.send({
- data: JSON.stringify(data),
- success: reslove,
- fail: reject,
- });
- });
- }
- onMessage(res) {
- this.debug && console.log(res);
- const {
- type,
- data = {}
- } = JSON.parse(res.data);
- this.$emit(type, data);
- }
- onClose() {
- this.close();
- }
- onError(res) {
- this.debug && console.log(res);
- this.$emit('socket_error', res);
- this.connectStatus = false;
- }
- onOpen(res) {
- this.debug && console.log('链接成功');
- this.connectStatus = true;
- if (this.app.globalData === undefined)
- console.error('无法获取token登录失败');
- else
- this.send({
- type: 'login',
- data: this.app.globalData.token
- });
- this.ping();
- }
- /**
- * 注册事件
- * @param string name 事件名称
- * @param callback successFun 回调函数
- */
- $on(name, successFun) {
- let taht = this;
- if (typeof name === 'object') {
- name.forEach(item => {
- if (!taht.watcherList[item]) this.watcherList[name] = [];
- taht.watcherList[item].push(successFun);
- })
- } else {
- if (!this.watcherList[name]) {
- this.watcherList[name] = []
- }
- this.watcherList[name].push(successFun);
- }
- }
- /**
- * 执行事件
- * @param string type 事件名称
- * @param array data 参数
- */
- $emit(type, data) {
- let onCallbacks = this.watcherList[type]
- onCallbacks.forEach(element => {
- element.apply(this, arguments, data)
- });
- }
- }
|