| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- // +---------------------------------------------------------------------
- // | CRMEB [ CRMEB赋能开发者,助力企业发展 ]
- // +---------------------------------------------------------------------
- // | Copyright (c) 2016~2023 https://www.crmeb.com All rights reserved.
- // +---------------------------------------------------------------------
- // | Licensed CRMEB并不是自由软件,未经许可不能去掉CRMEB相关版权
- // +---------------------------------------------------------------------
- // | Author: CRMEB Team <admin@crmeb.com>
- // +---------------------------------------------------------------------
- import { wss, getCookies, setCookies } from '@/libs/util';
- import Setting from '@/setting';
- import { getWorkermanUrl } from '@/api/kefu';
- import Vue from 'vue';
- const vm = new Vue();
- let wsAdminSocketUrl = getCookies('WS_ADMIN_URL') || '';
- let wsKefuSocketUrl = getCookies('WS_CHAT_URL') || '';
- class wsSocket {
- constructor(opt) {
- this.ws = null;
- this.opt = opt || {};
- this.init(opt.key);
- }
- onOpen(key = false) {
- this.opt.open && this.opt.open();
- let that = this;
- // this.send({
- // type: 'login',
- // data: util.cookies.get('token')
- // }).then(() => {
- // that.ping();
- // });
- that.ping();
- this.socketStatus = true;
- }
- init(key) {
- let wsUrl = '';
- if (key == 1) {
- wsUrl = wsAdminSocketUrl;
- }
- if (key == 2) {
- wsUrl = wsKefuSocketUrl;
- }
- if (wsUrl) {
- this.ws = new WebSocket(wsUrl);
- this.ws.onopen = this.onOpen.bind(this);
- this.ws.onerror = this.onError.bind(this);
- this.ws.onmessage = this.onMessage.bind(this);
- this.ws.onclose = this.onClose.bind(this);
- }
- }
- ping() {
- var that = this;
- this.timer = setInterval(function () {
- that.send({ type: 'ping' });
- }, 10000);
- }
- send(data) {
- return new Promise((resolve, reject) => {
- try {
- this.ws.send(JSON.stringify(data));
- resolve({ status: true });
- } catch (e) {
- reject({ status: false });
- }
- });
- }
- onMessage(res) {
- this.opt.message && this.opt.message(res);
- }
- onClose() {
- this.timer && clearInterval(this.timer);
- this.opt.close && this.opt.close();
- }
- onError(e) {
- this.opt.error && this.opt.error(e);
- }
- $on(...args) {
- vm.$on(...args);
- }
- }
- function createSocket(key) {
- getWorkermanUrl().then((res) => {
- wsAdminSocketUrl = res.data.admin;
- wsKefuSocketUrl = res.data.chat;
- setCookies('WS_ADMIN_URL', res.data.admin);
- setCookies('WS_CHAT_URL', res.data.chat);
- });
- return new Promise((resolve, reject) => {
- const ws = new wsSocket({
- key,
- open() {
- resolve(ws);
- },
- error(e) {
- reject(e);
- },
- message(res) {
- const { type, data = {} } = JSON.parse(res.data);
- vm.$emit(type, data);
- },
- close(e) {
- vm.$emit('close', e);
- },
- });
- });
- }
- export const adminSocket = createSocket(1);
- export const Socket = createSocket(2);
|