uni-app 65egg.js聊天类chat.js封装

Posted 2019ab

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uni-app 65egg.js聊天类chat.js封装相关的知识,希望对你有一定的参考价值。

chat.js

import  $U from "./util.js";
class chat {
	constructor(arg) {
		this.url = arg.url 
		this.isOnline = false
		this.socket = null
		// 获取当前用户相关信息
		let user = $U.getStorage('user');
		this.user = user ? JSON.parse(user) : {}
		// 连接和监听
		if(this.user.token){
			this.connectSocket()
		}
	}
	// 连接socket
	connectSocket(){
		this.socket = uni.connectSocket({
			url:this.url+'?token='+this.user.token,
			complete:()=>{}
		})
		// 监听连接成功
		this.socket.onOpen(()=>this.onOpen())
		// 监听接收信息
		this.socket.onMessage((res)=>this.onMessage(res))
		// 监听断开
		this.socket.onClose(()=>this.onClose())
		// 监听错误
		this.socket.onError(()=>this.onError())
	}
	// 监听打开
	onOpen(){
		// 用户状态上线
		this.isOnline = true;
		console.log('socket连接成功');
		// 获取用户离线消息
	}
	// 监听关闭
	onClose(){
		// 用户下线
		this.isOnline = false;
		this.socket = null;
		console.log('socket连接关闭');
	}
	// 监听消息
	onMessage(data){
		console.log('监听消息',data);
	}
	// 监听连接错误
	onError(){
		// 用户下线
		this.isOnline = false;
		this.socket = null;
		console.log('socket连接错误');
	}
}
export default chat

store/module/user.js

import $U from '@/common/free-lib/util.js';
import $H from '@/common/free-lib/request.js';
import Chat from '@/common/free-lib/chat.js';
import $C from '@/common/free-lib/config.js';
export default {
	state: {
		user: false,
		apply: {
			rows: [],
			count: 0,
		},
		mailList:[],
		chat:null
	},
	actions: {
		// 登录后处理
		login({
			state,
			dispatch
		}, user) {
			// 存到状态种
			state.user = user;
			// 存储到本地存储中
			$U.setStorage('token', user.token);
			$U.setStorage('user', JSON.stringify(user));
			$U.setStorage('user_id', user.id);
			// 获取好友申请列表
			dispatch('getApply');
			// 更新角标提示
			dispatch('updateMailBadge');
			// 连接socket
			state.chat = new Chat({
				url:$C.socketUrl
			})
		},
		// 退出登录
		logout({
			state
		}) {
			// 清除登录状态
			state.user = false;
			// 清除本地存储数据
			$U.removeStorage('token');
			$U.removeStorage('user');
			$U.removeStorage('user_id');
			// 跳转到登录页
			uni.reLaunch({
				url: '/pages/common/login/login'
			})
		},
		// 初始化登录状态
		initLogin({
			state,
			dispatch
		}) {
			// 拿到存储的数据
			let user = $U.getStorage('user');
			if (user) {
				// 初始化登录状态
				state.user = JSON.parse(user);
				// 连接socket
				state.chat = new Chat({
					url:$C.socketUrl
				})
				// 获取离线信息
				// 获取好友申请列表
				dispatch('getApply');
			}
		},
		// 获取好友申请列表
		getApply({
			state,
			dispatch
		}, page = 1) {
			$H.get('/apply/' + page).then(res => {
				if (page === 1) {
					state.apply = res
				} else {
					// 下拉刷新
					state.apply.rows = [...state.apply.rows, ...res.rows]
					state.apply.count = res.count
				}

				// 更新通讯录角标提示
				dispatch('updateMailBadge');
			});
		},
		// 更新通讯录角标提示
		updateMailBadge({
			state
		}) {
			let count = state.apply.count > 99 ? '99+' : state.apply.count.toString();
			console.log(state.apply.count);
			if (state.apply.count > 0) {
				return uni.setTabBarBadge({
					index: 1,
					text: count
				})
			}

			uni.removeTabBarBadge({
				index: 1
			})

		},
		// 获取通讯录列表
		getMailList({state}){
			$H.get('/friend/list').then(res=>{
				state.mailList = res.rows.newList ? res.rows.newList : [];
			})
		}
	},
}

以上是关于uni-app 65egg.js聊天类chat.js封装的主要内容,如果未能解决你的问题,请参考以下文章

uni-app 24egg.js 基础课

uni-app 63egg.js后端用户上线和下线深度剖析

uni-app 67聊天类封装-创建销毁聊天对象

uni-app 73聊天类封装-添加聊天记录

uni-app 74聊天类封装-更新指定聊天记录

uni-app 70聊天类封装-发送消息