|
|
@@ -227,7 +227,14 @@ io.on('connection', function(socket) {
|
|
|
pkuid1='0',
|
|
|
pkuid2='0',
|
|
|
pktotal1='0',
|
|
|
- pktotal2='0';
|
|
|
+ pktotal2='0',
|
|
|
+ ifthreepk='0',
|
|
|
+ threepk_uid1='0',
|
|
|
+ threepk_uid2='0',
|
|
|
+ threepk_uid3='0',
|
|
|
+ threepk_total1='0',
|
|
|
+ threepk_total2='0',
|
|
|
+ threepk_total3='0';
|
|
|
|
|
|
//console.log('SendGift');
|
|
|
//console.log(resObj);
|
|
|
@@ -239,12 +246,34 @@ io.on('connection', function(socket) {
|
|
|
pktotal2=''+resObj['pktotal2'];
|
|
|
//console.log('pk');
|
|
|
}
|
|
|
+
|
|
|
+ // 检查是否是三人PK礼物
|
|
|
+ if(resObj['isthreepk']==1 ){
|
|
|
+ ifthreepk='1';
|
|
|
+ threepk_uid1=''+resObj['threepk_uid1'];
|
|
|
+ threepk_uid2=''+resObj['threepk_uid2'];
|
|
|
+ threepk_uid3=''+resObj['threepk_uid3'];
|
|
|
+ threepk_total1=''+resObj['threepk_total1'];
|
|
|
+ threepk_total2=''+resObj['threepk_total2'];
|
|
|
+ threepk_total3=''+resObj['threepk_total3'];
|
|
|
+ console.log('三人PK礼物');
|
|
|
+ }
|
|
|
+
|
|
|
dataObj['msg'][0]['ifpk']=ifpk;
|
|
|
dataObj['msg'][0]['pkuid1']=pkuid1;
|
|
|
dataObj['msg'][0]['pkuid2']=pkuid2;
|
|
|
dataObj['msg'][0]['pktotal1']=pktotal1;
|
|
|
dataObj['msg'][0]['pktotal2']=pktotal2;
|
|
|
dataObj['msg'][0]['roomnum']=socket.roomnum;
|
|
|
+
|
|
|
+ // 三人PK相关字段
|
|
|
+ dataObj['msg'][0]['ifthreepk']=ifthreepk;
|
|
|
+ dataObj['msg'][0]['threepk_uid1']=threepk_uid1;
|
|
|
+ dataObj['msg'][0]['threepk_uid2']=threepk_uid2;
|
|
|
+ dataObj['msg'][0]['threepk_uid3']=threepk_uid3;
|
|
|
+ dataObj['msg'][0]['threepk_total1']=threepk_total1;
|
|
|
+ dataObj['msg'][0]['threepk_total2']=threepk_total2;
|
|
|
+ dataObj['msg'][0]['threepk_total3']=threepk_total3;
|
|
|
|
|
|
|
|
|
console.log('---------礼物信息--------------------'+[JSON.stringify(dataObj)]);
|
|
|
@@ -253,9 +282,14 @@ io.on('connection', function(socket) {
|
|
|
|
|
|
io.sockets.in(socket.roomnum).emit('broadcastingListen',[JSON.stringify(dataObj)]);
|
|
|
if(pkuid2>0){
|
|
|
-
|
|
|
io.sockets.in(pkuid2).emit('broadcastingListen',[JSON.stringify(dataObj)]);
|
|
|
}
|
|
|
+
|
|
|
+ // 如果是三人PK,通知第三个房间
|
|
|
+ if(ifthreepk=='1' && threepk_uid3>0){
|
|
|
+ io.sockets.in(threepk_uid2).emit('broadcastingListen',[JSON.stringify(dataObj)]);
|
|
|
+ io.sockets.in(threepk_uid3).emit('broadcastingListen',[JSON.stringify(dataObj)]);
|
|
|
+ }
|
|
|
|
|
|
clientRedis.del(gifToken);
|
|
|
}
|
|
|
@@ -575,6 +609,133 @@ io.on('connection', function(socket) {
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
+ case 'LiveThreePK':{//三人主播PK
|
|
|
+ console.log("----------------三人主播PK------------"+data_str);
|
|
|
+
|
|
|
+ if(socket.roomnum != socket.uid){
|
|
|
+ //非主播不能操作
|
|
|
+ return !1;
|
|
|
+ }
|
|
|
+ var uid=msg['uid'];
|
|
|
+ var pkuid2=msg['pkuid2'];
|
|
|
+ var pkuid3=msg['pkuid3'];
|
|
|
+ //1:发起三人PK;2;接受三人PK;3:拒绝三人PK;4:三人PK成功通知;5.手动断开三人PK;7:对方正忙碌 8:对方无响应; 9:三人PK结果
|
|
|
+
|
|
|
+ if(action=='1'){
|
|
|
+ console.log('发起三人PK');
|
|
|
+ console.log(FormatNowDate());
|
|
|
+ console.log(socket.uid+'---'+pkuid2+'---'+pkuid3);
|
|
|
+
|
|
|
+ // 检查是否在三人连麦房间中
|
|
|
+ getRoomMembers(socket.uid, function(members) {
|
|
|
+ members = members.filter((element) => element !== "");
|
|
|
+ if(members.length >= 3 && members.includes(pkuid2) && members.includes(pkuid3)) {
|
|
|
+ // 向另外两个主播发送PK邀请
|
|
|
+ var invite_data = {
|
|
|
+ "msg":[{
|
|
|
+ "_method_":"LiveThreePK",
|
|
|
+ "action":"1",
|
|
|
+ "msgtype":"10",
|
|
|
+ "uid":""+socket.uid,
|
|
|
+ "uname":""+socket.nicename,
|
|
|
+ "pkuid2":""+pkuid2,
|
|
|
+ "pkuid3":""+pkuid3
|
|
|
+ }],
|
|
|
+ "retcode":"000000",
|
|
|
+ "retmsg":"OK"
|
|
|
+ };
|
|
|
+
|
|
|
+ var socket_pkuid2=sockets[pkuid2];
|
|
|
+ var socket_pkuid3=sockets[pkuid3];
|
|
|
+ if(socket_pkuid2){
|
|
|
+ socket_pkuid2.emit('broadcastingListen',[JSON.stringify(invite_data)]);
|
|
|
+ }
|
|
|
+ if(socket_pkuid3){
|
|
|
+ socket_pkuid3.emit('broadcastingListen',[JSON.stringify(invite_data)]);
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ // 房间成员不足或不匹配
|
|
|
+ var error_data = {
|
|
|
+ "msg":[{
|
|
|
+ "_method_":"LiveThreePK",
|
|
|
+ "action":"7", // 忙碌/不可用
|
|
|
+ "msgtype":"10",
|
|
|
+ "uid":""+socket.uid
|
|
|
+ }],
|
|
|
+ "retcode":"000000",
|
|
|
+ "retmsg":"OK"
|
|
|
+ };
|
|
|
+ socket.emit('broadcastingListen',[JSON.stringify(error_data)]);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+
|
|
|
+ if(action=='2'){
|
|
|
+ /* 接受三人PK并开始 */
|
|
|
+ console.log('接受三人PK');
|
|
|
+ console.log(FormatNowDate());
|
|
|
+ console.log(socket.uid+'---'+pkuid2+'---'+pkuid3);
|
|
|
+
|
|
|
+ var sign_data={uid:socket.uid,pkuid2:pkuid2,pkuid3:pkuid3};
|
|
|
+ var sign=setSign(sign_data);
|
|
|
+ request(config['WEBADDRESS']+"?service=Livepk.setThreePK&uid="+socket.uid + "&pkuid2=" + pkuid2+ "&pkuid3=" + pkuid3+ "&sign=" +sign,function(error, response, body){
|
|
|
+ if(error) return;
|
|
|
+ console.log('setThreePK response:', body);
|
|
|
+ var res = evalJson(body);
|
|
|
+ if( response.statusCode == 200 && res.data.code == 0){
|
|
|
+
|
|
|
+ var info = res.data.info[0];
|
|
|
+ console.log('三人PK开始成功:', info);
|
|
|
+
|
|
|
+ /* 通知三个房间PK开始 */
|
|
|
+ var pk_start_data={
|
|
|
+ "msg":[{
|
|
|
+ "_method_":"LiveThreePK",
|
|
|
+ "action":"4",
|
|
|
+ "msgtype":"10",
|
|
|
+ "uid1":""+socket.uid,
|
|
|
+ "uid2":""+pkuid2,
|
|
|
+ "uid3":""+pkuid3,
|
|
|
+ "room_id":""+info['room_id'],
|
|
|
+ "addtime":""+info['addtime']
|
|
|
+ }],
|
|
|
+ "retcode":"000000",
|
|
|
+ "retmsg":"OK"
|
|
|
+ };
|
|
|
+
|
|
|
+ // 通知三个房间
|
|
|
+ process_msg(io,socket.uid,JSON.stringify(pk_start_data));
|
|
|
+ process_msg(io,pkuid2,JSON.stringify(pk_start_data));
|
|
|
+ process_msg(io,pkuid3,JSON.stringify(pk_start_data));
|
|
|
+
|
|
|
+ setTimeout(function() {//定时发送结果 - 5分钟后自动结束
|
|
|
+ console.log('三人PK计时器到期');
|
|
|
+ console.log(FormatNowDate());
|
|
|
+ endThreePk(io,socket.uid,0,info['addtime']);
|
|
|
+ }, 5*60*1000);
|
|
|
+ } else {
|
|
|
+ console.log('三人PK开始失败:', res);
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }else if(action=='5'){
|
|
|
+ /* 手动结束三人PK */
|
|
|
+ console.log('手动结束三人PK');
|
|
|
+ console.log(FormatNowDate());
|
|
|
+ endThreePk(io,socket.uid,1,0);
|
|
|
+ }else{
|
|
|
+ // 其他action转发给相关用户
|
|
|
+ var socket_pkuid2=sockets[pkuid2];
|
|
|
+ var socket_pkuid3=sockets[pkuid3];
|
|
|
+ if(socket_pkuid2){
|
|
|
+ socket_pkuid2.emit('broadcastingListen',[data_str]);
|
|
|
+ }
|
|
|
+ if(socket_pkuid3){
|
|
|
+ socket_pkuid3.emit('broadcastingListen',[data_str]);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
case 'goodsLiveShow' :{//商品在直播间展示/不展示
|
|
|
process_msg(io,socket.roomnum,data_str);
|
|
|
@@ -1065,6 +1226,53 @@ function endLivePk(io,uid,type,addtime){
|
|
|
|
|
|
}
|
|
|
|
|
|
+/* 三人PK结束处理 */
|
|
|
+function endThreePk(io,uid,type,addtime){
|
|
|
+ console.log('结束三人PK');
|
|
|
+ console.log('uid-'+uid);
|
|
|
+ console.log('addtime-'+addtime);
|
|
|
+ console.log('type-'+type);
|
|
|
+ var sign_data={uid:uid,addtime:addtime,type:type};
|
|
|
+ var sign=setSign(sign_data);
|
|
|
+ request(config['WEBADDRESS']+"?service=Livepk.endThreePK&uid="+uid + "&addtime=" + addtime+ "&type=" + type+ "&sign=" +sign,function(error, response, body){
|
|
|
+ if(error) return;
|
|
|
+ console.log('endThreePK response:', body);
|
|
|
+ var res = evalJson(body);
|
|
|
+ if( response.statusCode == 200 && res.data.code == 0){
|
|
|
+ var info=res.data.info[0];
|
|
|
+ var data_obj={
|
|
|
+ "msg":[
|
|
|
+ {
|
|
|
+ "_method_":"LiveThreePK",
|
|
|
+ "action":"9",
|
|
|
+ "msgtype":"10",
|
|
|
+ "win_uid":""+info['win_uid'],
|
|
|
+ "uid1":""+info['uid1'],
|
|
|
+ "uid2":""+info['uid2'],
|
|
|
+ "uid3":""+info['uid3'],
|
|
|
+ "gift1":""+info['gift1'],
|
|
|
+ "gift2":""+info['gift2'],
|
|
|
+ "gift3":""+info['gift3'],
|
|
|
+ "room_id":""+info['room_id']
|
|
|
+ }
|
|
|
+ ],
|
|
|
+ "retcode":"000000",
|
|
|
+ "retmsg":"OK"
|
|
|
+ };
|
|
|
+
|
|
|
+ // 通知三个房间PK结果
|
|
|
+ process_msg(io,info['uid1'],JSON.stringify(data_obj));
|
|
|
+ process_msg(io,info['uid2'],JSON.stringify(data_obj));
|
|
|
+ process_msg(io,info['uid3'],JSON.stringify(data_obj));
|
|
|
+
|
|
|
+ } else {
|
|
|
+ console.log('三人PK结束失败:', res);
|
|
|
+ }
|
|
|
+
|
|
|
+ });
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
|
|
|
//时间格式化
|