- 30
- 0
聊天程序,用户可以抢马甲,如果两个用户同时抢,两个用户都会抢到这个马甲,如何让第一个用户操作表时阻塞这个表?
像下面这样的逻辑我该如何使用事务呢?
rob_vest: async function (data, socket) {
let vest_time = Date.now()
console.log('时间错', vest_time)
let sequlize = await db
let phone = data.phone
let room = data.room
let url = data.url
//查询马甲是否有人在使用
let vest = await sequlize.models.user_vest.findOne({ where: { url: data.url, have_vest: 1, online: 1, room: room }, raw: true })
let cool_vest = await sequlize.models.used_vest.findOne({ where: { phone, room, url }, raw: true })
if (vest) {
io.sockets.connected[socket.id].emit('rob_vest', { success: false, message: 'not avilable vest' })
return
}
//判断是否在冷却时间
if (!cool_vest) {
console.log('*userd_time', vest_time)
let used_time = vest_time
console.log('userddddddddtime------------------', used_time)
let data = await sequlize.models.used_vest.create({ phone, room, url, used_time })
} else {
let begin_time = cool_vest.used_time + 60 * 60 * 2 * 1000
let stop_time = begin_time + 60 * 60 * 2 * 1000
console.log(begin_time, vest_time, stop_time, '8989898989898', vest_time < stop_time && begin_time < vest_time)
if (begin_time < vest_time && vest_time < stop_time) {
io.sockets.connected[socket.id].emit('rob_vest', { success: false, msg: "马甲在冷却时间内不可以抢夺" })
return
} else {
let used_time = vest_time
sequlize.models.used_vest.update({ used_time }, { where: { phone, room, url } })
}
}
//更新用户信息
let update_user = await sequlize.models.chat_user.update({ have_vest: 1, url: data.url, vest_name: data.vest_name, vest_time: vest_time, room: room }, { where: { phone }, raw: true })
// let update_vest = sequlize.models.chat_vest.update({ is_used: 1, used_time: vest_time }, { where: { url: data.url }, raw: true })
if (update_user) {
//抢马甲成功向房间内所有人广播
io.to(room).emit('rob_vest', { success: true, phone: phone })
schedules.addListenVest(io)
} else {
//抢马甲失败,向用户自己广播失败
io.sockets.connected[socket.id].emit('rob_vest', { success: false, phone: phone })
}
} 1
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部
