socket-io

// 引入express,并获得express的实例
const express = require('express');
//解决跨域问题
const cors = require('cors');
// 中间件 获取参数的
const bodyParser = require('body-parser');
var session = require('express-session');
var getSmscode = require('./getSmscode')
var msg1 = require('./syncfunctest')





const path = require("path")
const app = express()
app.use(cors());
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({
	extended: true
}));
app.use(session({
	secret: 'secret', // 对session id 相关的cookie 进行签名
	resave: true,
	saveUninitialized: false, // 是否保存未初始化的会话
	cookie: {
		maxAge: 1000 * 60 * 3, // 设置 session 的有效时间,单位毫秒
	},
}));
const axios = require("axios");
const http = require('http');
const userList = require("./store/userList.json")
const robotReply = require("./store/robotReply.json")


app.all("*", function(req, res, next) {
	res.header("Access-Control-Allow-Origin", "*");
	res.header("Access-Control-Allow-Headers", "X-Requested-With");
	res.header("Access-Control-Allow-Methods", "PUT,POST,GET,DELETE,OP0TIONS");
	res.header("X-Powered-By", "3.2.1");
	res.header("Content-Type", "application/json;charset=utf-8");
	next();
});

// 用http模块创建一个服务并把express的实例挂载上去
const server = http.Server(app);
// 引入socket.io并立即实例化,把server挂载上去
const io = require('socket.io')(server);

//记录所有已经登录的用户
let users = []
let userDict = {}
//随机生成指定范围数字
function randomNum(minNum, maxNum) {
	switch (arguments.length) {
		case 1:
			return parseInt(Math.random() * minNum + 1, 10);
			break;
		case 2:
			return parseInt(Math.random() * (maxNum - minNum + 1) + minNum, 10);
			break;
		default:
			return 0;
			break;
	}
}
app.use('/chatroom', express.static(path.join(__dirname, '/chatroom')))
let sock = null;
io.on('connection', socket => {
	// 这条消息正是由于io 的实例化调用触发的
	console.log("xxxxxxxxxxxxxxxxx  用户已经登录 !")
	console.log(socket.id);
	// console.log(JSON.stringify(socket));
	sock = socket;
	//发送信息给机器人

	//发送消息



	socket.on("joinChat", data => {
		console.log(JSON.stringify(data))
		userDict[data.uid] = socket.id
		socket.join(socket.id);
		console.log("now userdict :", JSON.stringify(userDict))
	})
	
	socket.on("sendmsg2", data => {
		console.log("rcv sendmsg 1 ", JSON.stringify(data))
		// console.log("now userdict :", JSON.stringify(userDict))
		let to = userDict[data.receiver.uid] || ''
		if (to == '') {
			console.log(to + " not online ")
			return
		}
		socket.to(to).emit("reviceMsg", data);
	})
	
	socket.on("sendmsg", data => {
		console.log("rcv sendmsg 1 ", JSON.stringify(data))
		// console.log("now userdict :", JSON.stringify(userDict))
		let to = userDict[data.to] || ''
		if (to == '') {
			console.log(to + " not online ")
			return
		}
		socket.to(to).emit("reviceMsg", data);
	})

	//客服手动离线


	socket.on("restart", (data) => {
		console.log("rcv  restart ")
		// socket.broadcast.emit('toStart');
		// sock = socket;
		console.log(data);
		for (let item of data) {
			socket.to(item.socket).emit("toStart");
		}
	})

	// 用户断开连接的功能  比如关闭客服浏览器  应该是底层触发,不是客服端主动触发的。

	socket.on("disconnect", () => {
		console.log("rcv  disconnect ")
		//获取客服房间的OutTradeNo
		let serviceOutTradeNo = "";
		let user = users.filter(x => x.OutTradeNo === socket.id);
		if (user.length > 0) {
			if (!user[0].IsService) {
				serviceOutTradeNo = users.filter(x => x.SendId === user[0].ReviceId)[0].OutTradeNo;
			} else {
				serviceOutTradeNo = user[0].OutTradeNo;
			}
		}
		//将该会员从users列表删除
		if (socket.SendId && socket.SendId > 0) {
			users = users.filter(x => (x.OutTradeNo != socket.id && x.ReviceId != socket.SendId));
		}
		//会员离线
		if (user.length > 0 && !user[0].IsService && serviceOutTradeNo) {
			socket.to(serviceOutTradeNo).emit('customerDisconnect', {
				SendId: socket.SendId,
				Users: users
			})
		}
		//客服离线
		else if (user.length > 0 && user[0].IsService && serviceOutTradeNo) {
			io.in(serviceOutTradeNo).emit('serviceDisconnect', {
				SendId: socket.SendId,
				Users: users
			});
		}
	})
});

var ret_data = {
	errorMsg: "",
	errorCode: 1,
	data: {
		curPage: 1,
		datas: [],
		offset: 1,
		over: true,
		pageCount: 1,
		size: 20,
		total: 111
	}
};



app.get('/user/list/:page', function(req, res) {
	console.log(req.params)
	// res.sendStatus(200);
	var point = new Point(1, 3)
	res.json(ret_data)
})

const code_dict = {}

app.post('/sendsms', async function(req, res) {
	let phone = req.body.phone || ""
	let code = req.body.code || ""
	let istest = req.body.istest || true
	// 如果是测试的话,直接保存相关信息  ,然后返回


	if (phone == "") {
		ret_data['errorMsg'] = "phone is null"
		res.json(ret_data)
		return
	}

	// 发送成功后,将phone 信息保存在本地
	code_dict[phone] = code
	resopose = await msg1.msg()
	// console.log(JSON.stringify(resopose))




	var sendsms = new getSmscode()
	// 入参: 手机号和code

	// 本地保存 phone 和code 的关系
	console.log(JSON.stringify(sendsms))

	res.json(ret_data)
})



// sms 用户登录
app.post('/smslogin', function(req, res) {

	let phone = req.body.phone || ""
	let code = req.body.code || ""

	if (req.body.username == 'admin' && req.body.pwd == 'admin') {
		req.session.userName = req.body.username; // 登录成功,设置 session
		res.json({
			ret_code: 0,
			ret_msg: '登录成功'
		});
	} else {
		res.json({
			ret_code: 1,
			ret_msg: '账号或密码错误'
		}); // 若登录失败,重定向到登录页面
	}
});

// //首页
// @GET("/article/list/{page}/json")
// suspend fun getIndexList(@Path("page") page: Int): BasicBean<ListWrapper<Article>>
// //广场
// @GET("/user_article/list/{page}/json")
// suspend fun getSquareData(@Path("page") page: Int): BasicBean<ListWrapper<Article>>

// 用户登录
app.post('/login', function(req, res) {
	if (req.body.username == 'admin' && req.body.pwd == 'admin') {
		req.session.userName = req.body.username; // 登录成功,设置 session
		res.json({
			ret_code: 0,
			ret_msg: '登录成功'
		});
	} else {
		res.json({
			ret_code: 1,
			ret_msg: '账号或密码错误'
		}); // 若登录失败,重定向到登录页面
	}
});

// 获取主页
app.get('/home', function(req, res) {
	if (req.session.userName) { //判断session 状态,如果有效,则返回主页,否则转到登录页面
		res.json({
			ret_code: 0,
			ret_msg: '用户已经登录,可以获取相关数据 '
		});
	} else {
		res.json({
			ret_code: 1,
			ret_msg: '用户未登录'
		});
	}
})


app.post('/clearMiniCache', function(req, res) {
	let id = req._parsedUrl.query.replace("id=", "");
	//调取清除小程序缓存的接口
	// io.emit('toStart');
	console.log(sock.id, id);
	sock.to(id).emit("toStart");
	res.status(200)
	res.json({
		state: 1
	})
	// sock.to(sock.id).emit("reviceMsg", data);
});
server.listen(3100, function() {
	console.log('服务端启动成功!端口3100');
});

/home/10043467@zte.intra/.npm-global/bin/supervisor   app.js
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值