moonsflyer 6 luni în urmă
părinte
comite
548106c5a3

+ 1 - 6
app/common.php

@@ -44,12 +44,7 @@
         return 0;
 		
 	}
-    /*
- * 导出数据到日志文件
- * */
-    function outFileLog($data,$filename='log',$title='data'){
-        file_put_contents($_SERVER['DOCUMENT_ROOT'] . '/'.$filename.'.txt', PHP_EOL .date('Y-m-d h:i:s', time()).'~'.$title.':' . json_encode($data,JSON_UNESCAPED_UNICODE), FILE_APPEND);
-    }
+
 	/* 去除emoji表情 */
 	function filterEmoji($str){
 		$str = preg_replace_callback(

+ 1 - 1
dspIM/config.js

@@ -5,5 +5,5 @@ module.exports = {
 	'TOKEN'		: '1234567',
 	'sign_key'	: '562d4226cb2a2b4f74b3ef4340828b5d',
 	'socket_port': '19968',
-	'WEBADDRESS': 'http://live.fangqiuwangluo.com//appapi/' //站点域名
+	'WEBADDRESS': 'https://yjzb.yunchao2u.com' //站点域名
 }

+ 193 - 193
dspIM/exposure.js

@@ -1,193 +1,193 @@
-var site='http://xxxxxx.com'; //站点域名
-var schedule = require("node-schedule");
-var request  = require('request');
-
-function FormatNowDate(){
-	var mDate = new Date();
-	var Y = mDate.getFullYear();
-	var M = mDate.getMonth()+1;
-	var D = mDate.getDate();
-	var H = mDate.getHours();
-	var i = mDate.getMinutes();
-	var s = mDate.getSeconds();
-	return Y +'-' + M + '-' + D + ' ' + H + ':' + i + ':' + s;
-}
-
-//定时减曝光值
-var rule = new schedule.RecurrenceRule();
-
-var times = [];
-  for(var i=0; i<24; i++){
-    times.push(i);
-  }
-var lastid=0;
-rule.hour = times;
-rule.minute = 0;
-rule.second = 0;
-// console.log(times);
-
-var j = schedule.scheduleJob(rule, function(){
-
-    //time=FormatNowDate();
-    // console.log("执行任务:"+time);
-    setVal(lastid);
-
-
-});
-
-
-//定时返回上热门剩余钻石数
-var pop_rule = new schedule.RecurrenceRule();
-
-var pop_times = [];
-var minutes=0;
-
-for(var i=0; i<6; i++){
-    minutes=i*10;
-    pop_times.push(minutes);
-}
-
-var pop_lastid=0;
-pop_rule.minute = pop_times;
-pop_rule.second = 0;
-//console.log(pop_times);
-
-var j_pop = schedule.scheduleJob(pop_rule, function(){
-
-    time=FormatNowDate();
-    //console.log("执行任务:"+time);
-    setPopular(pop_lastid);
-
-
-});
-
-
-
-//定时处理直播
-var rule2 = new schedule.RecurrenceRule();
-
-var times2 = [];
-
-for(var i=0; i<12; i++){
-    times2.push(i*5);
-}
-
-rule2.second = times2;
-// console.log(times);
-
-var j2 = schedule.scheduleJob(rule2, function(){
-    // time=FormatNowDate();
-    // console.log("执行任务:"+time);
-    upLive();
-});
-
-
-//定时处理订单状态
-var goodsorder_rule = new schedule.RecurrenceRule();
-
-var goodsorder_times = [];
-var goodsorder_minutes=0;
-
-for(var i=0; i<12; i++){
-    goodsorder_minutes=i*5;
-    goodsorder_times.push(goodsorder_minutes);
-}
-
-var goodsorder_lastid=0;
-goodsorder_rule.minute = goodsorder_times;
-goodsorder_rule.second = 0;
-// console.log(times);
-
-var goodsorder_j = schedule.scheduleJob(goodsorder_rule, function(){
-    // time=FormatNowDate();
-    // console.log("执行任务:"+time);
-    changeShopOrder(goodsorder_lastid);
-});
-
-
-//视频曝光值定时任务
-function setVal(lastid){
-    var time=FormatNowDate();
-    // console.log("执行任务setVal"+lastid+'--'+time);
-    request(site+"/appapi/video/updateshowval?lastid="+lastid,function(error, response, body){
-    	//console.log(error);
-        if(error) return;
-        if(!body) return;
-        // console.log('setVal-body-'+lastid+'--'+time);
-        // console.log(body);
-        if(body!='NO'){
-            var strs=[];
-            strs=body.split("-");
-            
-            // console.log(strs);
-            if(strs[0]=='OK' && strs[1]!='0'){
-                setVal(strs[1]);
-            }
-            
-        }
-    });
-    
-}
-
-//上热门的视频未达到指定播放量 退还剩余钻石
-function setPopular(lastid){
-    var time=FormatNowDate();
-    //console.log("执行任务setPopular"+lastid+'--'+time);
-    request(site+"/appapi/video/updatePopular?lastid="+lastid,function(error, response, body){
-        //console.log(error);
-        if(error) return;
-        if(!body) return;
-         //console.log('setPopular-body-'+lastid+'--'+time);
-         //console.log(body);
-        if(body!='NO'){
-            var strs=[];
-            strs=body.split("-");
-            
-             //console.log(strs);
-            if(strs[0]=='OK' && strs[1]!='0'){
-                setPopular(strs[1]);
-            }
-            
-        }
-    });
-    
-}
-
-
-//定期处理订单状态
-function upLive(){
-    // var time=FormatNowDate();
-    // console.log("执行任务setVal"+lastid+'--'+time);
-    request(site+"/appapi/liveback/uplive",function(error, response, body){
-        //console.log(error);
-        if(error) return;
-        if(!body) return;
-        // console.log('setVal-body-'+lastid+'--'+time);
-        // console.log(body);
-    });
-    
-}
-
-//定期处理订单状态
-function changeShopOrder(lastid){
-    // var time=FormatNowDate();
-    // console.log("执行任务setVal"+lastid+'--'+time);
-    request(site+"/appapi/shoporder/checkOrder?lastid="+lastid,function(error, response, body){
-        //console.log(error);
-        if(error) return;
-        if(!body) return;
-        // console.log('setVal-body-'+lastid+'--'+time);
-        // console.log(body);
-        if(body!='NO'){
-            var strs=[];
-            strs=body.split("-");
-            
-            // console.log(strs);
-            if(strs[0]=='OK' && strs[1]!='0'){
-                changeShopOrder(strs[1]);
-            }
-            
-        }
-    });
-    
-}
+var site='https://yjzb.yunchao2u.com'; //站点域名
+var schedule = require("node-schedule");
+var request  = require('request');
+
+function FormatNowDate(){
+	var mDate = new Date();
+	var Y = mDate.getFullYear();
+	var M = mDate.getMonth()+1;
+	var D = mDate.getDate();
+	var H = mDate.getHours();
+	var i = mDate.getMinutes();
+	var s = mDate.getSeconds();
+	return Y +'-' + M + '-' + D + ' ' + H + ':' + i + ':' + s;
+}
+
+//定时减曝光值
+var rule = new schedule.RecurrenceRule();
+
+var times = [];
+  for(var i=0; i<24; i++){
+    times.push(i);
+  }
+var lastid=0;
+rule.hour = times;
+rule.minute = 0;
+rule.second = 0;
+// console.log(times);
+
+var j = schedule.scheduleJob(rule, function(){
+
+    //time=FormatNowDate();
+    // console.log("执行任务:"+time);
+    setVal(lastid);
+
+
+});
+
+
+//定时返回上热门剩余钻石数
+var pop_rule = new schedule.RecurrenceRule();
+
+var pop_times = [];
+var minutes=0;
+
+for(var i=0; i<6; i++){
+    minutes=i*10;
+    pop_times.push(minutes);
+}
+
+var pop_lastid=0;
+pop_rule.minute = pop_times;
+pop_rule.second = 0;
+//console.log(pop_times);
+
+var j_pop = schedule.scheduleJob(pop_rule, function(){
+
+    time=FormatNowDate();
+    //console.log("执行任务:"+time);
+    setPopular(pop_lastid);
+
+
+});
+
+
+
+//定时处理直播
+var rule2 = new schedule.RecurrenceRule();
+
+var times2 = [];
+
+for(var i=0; i<12; i++){
+    times2.push(i*5);
+}
+
+rule2.second = times2;
+// console.log(times);
+
+var j2 = schedule.scheduleJob(rule2, function(){
+    // time=FormatNowDate();
+    // console.log("执行任务:"+time);
+    upLive();
+});
+
+
+//定时处理订单状态
+var goodsorder_rule = new schedule.RecurrenceRule();
+
+var goodsorder_times = [];
+var goodsorder_minutes=0;
+
+for(var i=0; i<12; i++){
+    goodsorder_minutes=i*5;
+    goodsorder_times.push(goodsorder_minutes);
+}
+
+var goodsorder_lastid=0;
+goodsorder_rule.minute = goodsorder_times;
+goodsorder_rule.second = 0;
+// console.log(times);
+
+var goodsorder_j = schedule.scheduleJob(goodsorder_rule, function(){
+    // time=FormatNowDate();
+    // console.log("执行任务:"+time);
+    changeShopOrder(goodsorder_lastid);
+});
+
+
+//视频曝光值定时任务
+function setVal(lastid){
+    var time=FormatNowDate();
+    // console.log("执行任务setVal"+lastid+'--'+time);
+    request(site+"/appapi/video/updateshowval?lastid="+lastid,function(error, response, body){
+    	//console.log(error);
+        if(error) return;
+        if(!body) return;
+        // console.log('setVal-body-'+lastid+'--'+time);
+        // console.log(body);
+        if(body!='NO'){
+            var strs=[];
+            strs=body.split("-");
+            
+            // console.log(strs);
+            if(strs[0]=='OK' && strs[1]!='0'){
+                setVal(strs[1]);
+            }
+            
+        }
+    });
+    
+}
+
+//上热门的视频未达到指定播放量 退还剩余钻石
+function setPopular(lastid){
+    var time=FormatNowDate();
+    //console.log("执行任务setPopular"+lastid+'--'+time);
+    request(site+"/appapi/video/updatePopular?lastid="+lastid,function(error, response, body){
+        //console.log(error);
+        if(error) return;
+        if(!body) return;
+         //console.log('setPopular-body-'+lastid+'--'+time);
+         //console.log(body);
+        if(body!='NO'){
+            var strs=[];
+            strs=body.split("-");
+            
+             //console.log(strs);
+            if(strs[0]=='OK' && strs[1]!='0'){
+                setPopular(strs[1]);
+            }
+            
+        }
+    });
+    
+}
+
+
+//定期处理订单状态
+function upLive(){
+    // var time=FormatNowDate();
+    // console.log("执行任务setVal"+lastid+'--'+time);
+    request(site+"/appapi/liveback/uplive",function(error, response, body){
+        //console.log(error);
+        if(error) return;
+        if(!body) return;
+        // console.log('setVal-body-'+lastid+'--'+time);
+        // console.log(body);
+    });
+    
+}
+
+//定期处理订单状态
+function changeShopOrder(lastid){
+    // var time=FormatNowDate();
+    // console.log("执行任务setVal"+lastid+'--'+time);
+    request(site+"/appapi/shoporder/checkOrder?lastid="+lastid,function(error, response, body){
+        //console.log(error);
+        if(error) return;
+        if(!body) return;
+        // console.log('setVal-body-'+lastid+'--'+time);
+        // console.log(body);
+        if(body!='NO'){
+            var strs=[];
+            strs=body.split("-");
+            
+            // console.log(strs);
+            if(strs[0]=='OK' && strs[1]!='0'){
+                changeShopOrder(strs[1]);
+            }
+            
+        }
+    });
+    
+}

+ 1064 - 1063
dspIM/s1.js

@@ -1,1063 +1,1064 @@
-
-//引入http模块
-var socketio = require('socket.io'),
-	fs 	= require('fs'),
-	https     = require('http'),
-	domain   = require('domain'),
-	redis    = require('redis'),
-    redisio  = require('socket.io-redis'),
-    request  = require('request'),
-    md5  = require('md5-node'),
-    config   = require('./config.js');
-
-var d = domain.create();
-d.on("error", function(err) {
-	//console.log(err);
-});
-
-//var numscount=0;// 在线人数统计
-var sockets = {};
-var chat_history={};
-var chat_interval={};
-/* 主播连麦关系 */
-var LiveConnect={};
-var LiveConnect_pull={};
-
-
-// redis 链接
-var clientRedis  = redis.createClient(config['REDISPORT'],config['REDISHOST']);
-clientRedis.auth(config['REDISPASS']);
-//var server = https.createServer(options,function(req, res) {
-var server = https.createServer(function(req, res) {
-	res.writeHead(200, {
-		'Content-type': 'text/html;charset=utf-8'
-	});
-   //res.write("人数: " + numscount );
-	res.end();
-}).listen(config['socket_port'], function() {
-	////console.log('服务开启19965');
-});
-
-var io = socketio.listen(server,{
-	pingTimeout: 60000,
-  	pingInterval: 25000
-});
-/* var pub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
- var sub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
- io.adapter(redisio({ pubClient: pub, subClient: sub })); */
-//setInterval(function(){
-  //global.gc();
-  ////console.log('GC done')
-//}, 1000*30); 
-
-io.on('connection', function(socket) {
-	//console.log('连接成功');
-	//numscount++;
-							
-	var interval;
-
-	//进入房间
-	socket.on('conn', function(data) {
-		
-		if(!data || !data.token){
-				return !1;
-		}
-		
-		userid=data.uid;
-		old_socket = sockets[userid];
-		if (old_socket && old_socket != socket) {
-			
-			if(data.uid != data.roomnum && data.uid==old_socket.roomnum){
-                /* 进房间 但旧链接是 主播 */
-                var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
-				old_socket.emit('broadcastingListen',[data_str]);
-			}else if(data.uid== data.roomnum && data.stream==old_socket.stream){
-                /* 主播重连 */
-				old_socket.reusing = 1;
-				//console.log("重用");
-			}else if(data.uid== data.roomnum && data.stream!=old_socket.stream){
-                /* 主播多端开播 */
-				var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
-				old_socket.emit('broadcastingListen',[data_str]);
-			}
-			old_socket.disconnect()
-		}
-		
-		clientRedis.get(data.token,function(error,res){
-			if(error){
-				return;
-			}else if(res==null){
-				//console.log("[获取token失败]"+data.uid);
-			}else{
-				if(res != null){
-					
-					var userInfo = evalJson(res);
-					if(userInfo['id'] == data.uid ){
-						//console.log("[初始化验证成功]--"+data.uid+"---"+data.roomnum+'---'+data.stream);
-						//获取验证token
-						socket.token   = data.token; 
-						socket.roomnum = data.roomnum;
-						socket.stream = data.stream;
-						socket.nicename = userInfo['user_nickname'];
-						socket.avatar = userInfo['avatar'];
-						socket.sign = Number(userInfo['sign']);
-						socket.usertype   = parseInt(userInfo['usertype']);
-						socket.uid     = data.uid;
-						socket.reusing = 0;
-						
-						socket.join(data.roomnum);
-						sockets[userid] = socket;
-						socket.emit('conn',['ok']);
-                        
-						if( socket.roomnum!=socket.uid && socket.uid >0 ){
-                            
-                            
-							var data_obj={
-                                            "msg":[
-                                                {
-                                                    "_method_":"SendMsg",
-                                                    "action":"0",
-                                                    "ct":{
-                                                        "id":''+userInfo['id'],
-                                                        "user_nickname":''+userInfo['user_nickname'],
-                                                        "avatar":userInfo['avatar'],
-                                                        "avatar_thumb":userInfo['avatar_thumb'],
-                                                        "usertype":''+userInfo['usertype'],
-														"guard_type":''+userInfo['guard_type'],
-														"contribution":''+userInfo['contribution'],
-
-                                                    },
-                                                    "msgtype":"0"
-                                                }
-                                            ],
-                                            "retcode":"000000",
-                                            "retmsg":"OK"
-                                        };
-							process_msg(io,socket.roomnum,JSON.stringify(data_obj));
-							if(socket.stream){
-								clientRedis.zadd('user_'+socket.stream,socket.sign,userInfo['id']);	
-							}
-						}
-
-						
-						//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
-						var stemMgs='直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~';
-						if(userInfo['lang']=='en'){
-							stemMgs='If the live content contains any vulgar, explicit, or pornographic content, the account will be banned; The security department will conduct 24-hour inspections~';
-						}
-                        sendSystemMsg(socket,stemMgs);
-
-						
-						
-
-						return;
-					}else{
-						socket.disconnect();
-					}
-				}
-			}
-			
-			socket.emit('conn',['no']);
-		});
-        
-		
-	});
-
-	socket.on('broadcast',function(data){
-            ////console.log(data);
-		    if(socket.token != undefined){
-		    	var dataObj  = typeof data == 'object'?data:evalJson(data);
-				
-				//console.log('==================='+data);
-			    var msg      = dataObj['msg'][0]; 
-			    var token    = dataObj['token'];
-				var method   = msg['_method_'];
-			    var action   = msg['action'];
-			    var data_str =  typeof data == 'object'?JSON.stringify(data):data;
-			    switch(method){
-			    	case 'SendMsg':{     //聊天 
-
-			    		//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
-
-						clientRedis.hget( "super",socket.uid,function(error,res){
-							if(error) return;
-							if(res != null){
-								var data_str2={
-                                                "msg":[
-                                                    {
-                                                        "_method_":"SystemNot",
-                                                        "action":"1",
-                                                        "ct":''+dataObj['msg'][0]['ct'],
-                                                        "msgtype":"4"
-                                                    }
-                                                ],
-                                                "retcode":"000000",
-                                                "retmsg":"OK"
-                                            };
-
-                                
-								process_msg(io,socket.roomnum,JSON.stringify(data_str2));
-		    				}else{
-								clientRedis.hget(socket.roomnum + "shutup",socket.uid,function(error,res){
-									if(error) return;
-									if(res != null){
-                                        var newData  = dataObj;
-                                        newData['retcode'] = '409002';
-                                        socket.emit('broadcastingListen',[JSON.stringify(newData)]);
-									}else{
-										process_msg(io,socket.roomnum,data_str);
-									}	
-								});
-		    				}							
-						});
-			    		break;
-			    	}
-			    	case 'SendGift':{    //送礼物
-						var gifToken = dataObj['msg'][0]['ct'];
-			    		clientRedis.get(gifToken,function(error,res){
-			    			if(!error&&res != null){
-			    				var resObj = evalJson(res);
-			    				dataObj['msg'][0]['ct'] = resObj;
-								
-								var ifpk='0',
-                                    pkuid1='0',
-                                    pkuid2='0',
-                                    pktotal1='0',
-                                    pktotal2='0';
-                                
-                                //console.log('SendGift');
-                                //console.log(resObj);
-                                if(resObj['ispk']==1 ){
-                                    ifpk='1';
-                                    pkuid1=''+resObj['pkuid1'];
-                                    pkuid2=''+resObj['pkuid2'];
-                                    pktotal1=''+resObj['pktotal1'];
-                                    pktotal2=''+resObj['pktotal2'];
-                                    //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;
-								
-								
-								console.log('---------礼物信息--------------------'+[JSON.stringify(dataObj)]);
-								
-
-                                
-								io.sockets.in(socket.roomnum).emit('broadcastingListen',[JSON.stringify(dataObj)]);
-								if(pkuid2>0){
-
-                                    io.sockets.in(pkuid2).emit('broadcastingListen',[JSON.stringify(dataObj)]);
-                                }
-                                  
-			    				clientRedis.del(gifToken);
-			    			}
-			    		});
-			    		break;
-			    	}
-					case 'ConnectVideo' :{ //用户和主播连麦
-                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.发起者断开连麦;6:主播断开连麦;7:主播正忙碌 8:主播无响应
-                        if(action=='5' || action=='6'){
-                            clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
-                                if(error){
-                                    return !1;
-                                }
-                                if(!res){
-                                    return !1;
-                                }
-                                var res_j=JSON.parse(res);
-                                
-                                if( socket.uid==res_j['uid'] || socket.uid==socket.roomnum ){
-                                    clientRedis.hdel('ShowVideo',socket.roomnum);
-                                    process_msg(io,socket.roomnum,data_str);									
-                                }							 
-                            });                           
-                        }else if(action=='2'){
-                            //console.log('主播同意连麦');
-                            var touid=msg['touid'];
-							//console.log(touid);
-                            
-                            request(config['WEBADDRESS']+"?service=Live.showVideo&uid="+socket.uid + "&token=" + socket.token+ "&touid="+touid+"&pull_url=''",function(error, response, body){
-                                //console.log('showVideo');
-                                //console.log(body);
-                            });
-                            
-							process_msg(io,socket.roomnum,data_str);
-                        }else{
-                            process_msg(io,socket.roomnum,data_str);
-                        }
-	                    break;
-			    	}
-					
-					case 'light' :{     //点亮
-						process_msg(io,socket.roomnum,data_str);
-	                    break;
-			    	}
-					
-					case 'updateVotes' :{//更新映票[暂时不用]
-						process_msg(io,socket.roomnum,data_str);
-	                    break;
-			    	}
-			    	case 'CloseLive' :{//关闭直播
-			    		if(socket.usertype == 50 ){
-							process_msg(io,socket.roomnum,data_str);
-			    	    }
-	                    break;
-			    	}
-			    	case 'KickUser' :{//踢人
-						process_msg(io,socket.roomnum,data_str);
-	                    break;
-			    	}
-			    	case 'ShutUpUser' :{//禁言
-						process_msg(io,socket.roomnum,data_str);
-	                    break;
-			    	}
-					case 'stopLive' :{//超管关播
-						clientRedis.hget( "super",socket.uid,function(error,res){
-							if(error) return;
-							if(res != null){
-								process_msg(io,socket.roomnum,data_str);								
-		    				}							
-						});
-						break;
-			    	}
-			    	case 'ResumeUser' :{//恢复发言
-			    		if(socket.usertype == 50 || socket.usertype == 40){
-							process_msg(io,socket.roomnum,data_str);
-			    	    }
-			    	    break;
-			    	} 
-                    case 'setAdmin' :{//设置/取消管理员
-                    	//console.log(data_str);
-                    	//console.log(socket.usertype);
-			    		if(socket.usertype == 50 ){
-							process_msg(io,socket.roomnum,data_str);
-							
-			    	    }
-			    	    break;
-			    	} 
-			    	case 'StartEndLive':{
-			    		if(socket.usertype == 50 ){
-			    		   socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
-			    	    }else{
-			    	    	clientRedis.get("LiveAuthority" + socket.uid,function(error,res){
-			    	    		if(error) return;
-			    	    		if(parseInt(res) == 5 ||parseInt(res) == 1 || parseInt(res) == 2){
-		    	    				socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
-		    	    			}
-			    	    	})
-			    	    }
-			    	    break;
-
-			    	}
-					
-					case 'BuyGuard':{//购买守护
-					
-						
-						process_msg(io,socket.roomnum,data_str);
-			    		break;
-			    	}
-					
-					case 'LiveConnect':{//主播和主播连麦
-                        if(socket.roomnum != socket.uid){
-                            //非主播不能操作
-                            return !1;
-                        }
-                        var pkuid=msg['pkuid'];
-                        var pkpull=msg['pkpull'];
-
-                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应 9:主播繁忙(游戏)
-                        if(action=='1'){
-                            // console.log('发起连麦');
-                            // console.log(FormatNowDate());
-                            // console.log(socket.uid+'---'+pkuid);
-                            // console.log(pkpull);
-                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
-                            LiveConnect_pull[socket.uid]=pkpull;
-                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
-                        }
-                        if(action=='2'){
-//                            // console.log('接受连麦');
-//                            // console.log(FormatNowDate());
-//                            // console.log(socket.uid+'---'+pkuid);
-//                            // console.log(pkpull);
-//                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
-//                            LiveConnect_pull[socket.uid]=pkpull;
-//                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
-//
-//                            /* 更新数据库 */
-//                            var sign_data={uid:socket.uid,pkuid:pkuid,type:1};
-//                            var sign=setSign(sign_data);
-//                            request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+socket.uid + "&pkuid=" + pkuid+ "&type=1&sign=" +sign,function(error, response, body){
-//                                // console.log('changeLive');
-//                                // console.log(body);
-//
-//                            });
-//
-//                            /* 发送连麦成功信息 */
-//                            /* 当前房间 */
-//                            var data_obj={
-//                                        "msg":[
-//                                            {
-//                                                "_method_":"LiveConnect",
-//                                                "action":"4",
-//                                                "msgtype":"10",
-//                                                "pkuid":""+pkuid,
-//                                                "pkpull":""+LiveConnect_pull[pkuid],
-//                                                "uid":""+socket.uid,
-//                                                "uname":""+socket.nicename
-//                                            }
-//                                        ],
-//                                        "retcode":"000000",
-//                                        "retmsg":"OK"
-//                                    };
-//                            // console.log(data_obj);
-//                            process_msg(io,socket.roomnum,JSON.stringify(data_obj));
-//                            /* 对方房间 */
-//                            var data_obj_pk={
-//                                        "msg":[
-//                                            {
-//                                                "_method_":"LiveConnect",
-//                                                "action":"4",
-//                                                "msgtype":"10",
-//                                                "pkuid":""+socket.uid,
-//                                                "pkpull":""+LiveConnect_pull[socket.uid],
-//                                                "uid":""+socket.uid,
-//                                                "uname":""+socket.nicename
-//                                            }
-//                                        ],
-//                                        "retcode":"000000",
-//                                        "retmsg":"OK"
-//                                    };
-//                            // console.log(data_obj_pk);
-//                            process_msg(io,pkuid,JSON.stringify(data_obj_pk));
-                            // 接受连麦(扩展为多人房间)
-                                    LiveConnect_pull[socket.uid]=pkpull;
-                                    clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
-
-                                    /* 更新数据库 */
-                                    var sign_data={uid:socket.uid,pkuid:pkuid,type:1};
-                                    var sign=setSign(sign_data);
-                                    request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+socket.uid + "&pkuid=" + pkuid+ "&type=1&sign=" +sign,function(error, response, body){
-                                        if(error) return;
-
-                                        // 获取房间所有成员并通知
-                                        getRoomMembers(socket.uid, function(members) {
-                                            notifyRoomMembers(io, members, socket.uid, pkuid, 'join');
-                                        });
-                                    });
-                        }else if(action=='5'){ //主播和主播断开连麦
-                            /* 清除连麦信息 */
-                            //console.log('endLiveConnect--action--5');
-//                            endLiveConnect(io,socket.uid);
-                              endLiveConnectWithRoom(io, socket.uid);
-                        }else{
-                            var socket_pkuid=sockets[pkuid];
-                            if(socket_pkuid){
-                                socket_pkuid.emit('broadcastingListen',[data_str]);
-                            }
-                            
-                        }
-	                    break;
-			    	}
-					case 'LivePK':{//主播PK
-						console.log("----------------主播PK------------"+data_str);
-					
-                        if(socket.roomnum != socket.uid){
-                            //非主播不能操作
-                            return !1;
-                        }
-                        var uid=msg['uid'];
-                        var pkuid=msg['pkuid'];
-                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应; 9:PK结果
-                        if(action=='1'){
-                            console.log('发起PK');
-                            console.log(FormatNowDate());
-                            console.log(socket.uid+'---'+pkuid);
-                        }
-                        if(action=='2'){
-                            /* 更新PK状态 */
-                            console.log('LivePK');
-                            console.log(socket.uid);
-                            console.log(pkuid);
-                            console.log('开始PK');
-                            console.log(FormatNowDate());
-                            console.log(socket.uid+'---'+pkuid);
-                            var sign_data={uid:socket.uid,pkuid:pkuid};
-                            var sign=setSign(sign_data);
-                            request(config['WEBADDRESS']+"?service=Livepk.setPK&uid="+socket.uid + "&pkuid=" + pkuid+ "&sign=" +sign,function(error, response, body){
-                                if(error) return;
-                                // console.log('setPK');
-                                // console.log(body);
-                                var res = evalJson(body);
-                                if( response.statusCode == 200 && res.data.code == 0){
-                                    
-                                    var info = res.data.info[0];
-                                    // console.log('info');
-                                    // console.log(info);
-                                    /* 发送连麦成功信息 */
-                                    /* 当前房间 */
-                                    var data_obj={
-                                                "msg":[
-                                                    {
-                                                        "_method_":"LivePK",
-                                                        "action":"4",
-                                                        "msgtype":"10",
-                                                        "pkuid":""+pkuid,
-                                                        "uid":""+socket.uid,
-                                                        "uname":""+socket.nicename
-                                                    }
-                                                ],
-                                                "retcode":"000000",
-                                                "retmsg":"OK"
-                                            };
-                                    
-                                    process_msg(io,socket.roomnum,JSON.stringify(data_obj));
-                                    /* 对方房间 */
-                                    var data_obj_pk={
-                                                "msg":[
-                                                    {
-                                                        "_method_":"LivePK",
-                                                        "action":"4",
-                                                        "msgtype":"10",
-                                                        "pkuid":""+socket.uid,
-                                                        "uid":""+socket.uid,
-                                                        "uname":""+socket.nicename
-                                                    }
-                                                ],
-                                                "retcode":"000000",
-                                                "retmsg":"OK"
-                                            };
-                                    process_msg(io,pkuid,JSON.stringify(data_obj_pk));
-                                    
-                                    setTimeout(function() {//定时发送结果
-                                        // console.log('计时器');
-                                        // console.log(FormatNowDate());
-                                        // console.log('uid---'+socket.uid);
-                                        endLivePk(io,socket.uid,0,info['addtime']);
-                                    }, 5*60*1000);
-                                }
-
-                            });
-                        }else if(action=='5'){
-                            /* 清除PK信息 */
-                            // console.log('endLivePk --action--5');
-                            // console.log(FormatNowDate());
-                            endLivePk(io,socket.uid,1,0);
-                        }else{
-                            var socket_pkuid=sockets[pkuid];
-                            if(socket_pkuid){
-                                socket_pkuid.emit('broadcastingListen',[data_str]);
-                            }
-                            //process_msg(io,pkuid,data_str);
-                        }
-	                    break;
-			    	}
-					
-			    	
-                    case 'goodsLiveShow' :{//商品在直播间展示/不展示
-                        process_msg(io,socket.roomnum,data_str);
-                        break;
-                    }
-                    
-			    	case 'SystemNot':{//系统通知
-						process_msg(io,socket.roomnum,data_str);
-			    		break;
-			    	}
-			    	case 'requestFans':{ //暂时不用
-							request(config['WEBADDRESS']+"?service=Live.getZombie&stream=" + socket.stream+"&uid=" + socket.uid,function(error, response, body){
-								if(error) return;
-								var res = evalJson(body);
-								if( response.statusCode == 200 && res.data.code == 0){
-									var data_str2="{\"msg\":[{\"_method_\":\"requestFans\",\"action\":\"3\",\"ct\": "+ body + ",\"msgtype\":\"0\"}],\"retcode\":\"000000\",\"retmsg\":\"OK\"}";
-									process_msg(io,socket.roomnum,data_str2);
-								}
-							});
-			    	}
-					
-					case 'SystemWarning':{//警告通知
-						process_msg(io,socket.roomnum,data_str);
-			    		break;
-			    	}
-						
-			    }
-		    }
-		    
-	});
-
-	/*封禁通知*/
-	socket.on('LiveBanadmin',function(data){
-    	if(data['token'] == config['TOKEN']){
-			var data_obj={
-				"retmsg":"ok",
-				"retcode":"000000",
-				"msg":[
-					{
-						"msgtype":"1",
-						"_method_":"stopLive",
-						"action":"1",
-						"uid":"0",
-						"ct":''+ data['content'],
-					}
-				]
-			};
-			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
-    	}
-    });
-	
-	/*警告通知*/
-	socket.on('warningadmin',function(data){
-    	if(data['token'] == config['TOKEN']){
-
-			var data_obj={
-				"retmsg":"ok",
-				"retcode":"000000",
-				"msg":[
-					{
-						"msgtype":"1",
-						"_method_":"SystemWarning",
-						"action":"1",
-						"ct":''+ data['content'],
-					}
-				]
-			};
-			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
-    	}
-    });
-	
-	/*关播通知*/
-	socket.on('superadminaction',function(data){
-
-		//console.log(data['token']);
-		//console.log(config['TOKEN']);
-		
-    	if(data['token'] == config['TOKEN']){
-			var data_obj={
-				"retmsg":"ok",
-				"retcode":"000000",
-				"msg":[
-					{
-						"msgtype":"1",
-						"_method_":"stopLive",
-						"action":"1",
-						"uid":"0",
-						"ct":''+ data['content'],
-					}
-				]
-			};
-			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
-			
-			
-            /* io.sockets.in(data['roomnum']).emit("broadcastingListen", ['stopplay']); */
-    	}
-    });
-	
-	/* 系统信息 */
-	socket.on('systemadmin',function(data){
-    	if(data['token'] == config['TOKEN']){
-            var data_obj={
-                            "msg":[
-                                {
-                                    "_method_":"SystemNot",
-                                    "action":"1",
-                                    "ct":''+ data.content,
-                                    "msgtype":"4"
-                                }
-                            ],
-                            "retcode":"000000",
-                            "retmsg":"OK"
-                        };
-    		io.emit('broadcastingListen',[JSON.stringify(data_obj)]);
-    	}
-    });
-	
-    //资源释放
-	socket.on('disconnect', function() { 
-			/* numscount--; 
-            if(numscount<0){
-				numscount=0;
-			}   */
-          			
-			if(socket.roomnum ==null || socket.token==null || socket.uid <=0){
-				return !1;
-			}
-				
-			d.run(function() {
-				
-				/* 用户连麦 */
-				clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
-                    if(error){
-                        return !1;
-                    }
-                    if(!res){
-                        return !1;
-                    }
-                    var res_j=JSON.parse(res);
-                    
-                    if( socket.uid == res_j['uid'] || socket.uid == socket.roomnum ){
-                        clientRedis.hdel('ShowVideo',socket.roomnum);
-                        var data_obj={
-                                        "msg":[
-                                            {
-                                                "_method_":"ConnectVideo",
-                                                "action":"5",
-                                                "msgtype":"10",
-                                                "uid":""+socket.uid,
-                                                "uname":""+socket.nicename
-                                            }
-                                        ],
-                                        "retcode":"000000",
-                                        "retmsg":"OK"
-                                    };
-                        process_msg(io,socket.roomnum,JSON.stringify(data_obj));									
-                    }	
-					 
-				});
-				
-				
-				if(socket.roomnum==socket.uid){
-					//console.log("主播socket断开");
-					/* 主播 */ 
-					if(socket.reusing==0){
-						//console.log("请求关播接口");
-						//console.log(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream);
-						request(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream,function(error, response, body){
-							//console.log("error:"+error);
-                            var data_obj={
-                                        "retmsg":"ok",
-                                        "retcode":"000000",
-                                        "msg":[
-                                            {
-                                                "msgtype":"1",
-                                                "_method_":"StartEndLive",
-                                                "action":"18",
-                                                "ct":"直播关闭"
-                                            }
-                                        ]
-                                    };
-                            process_msg(io,socket.roomnum,JSON.stringify(data_obj));
-                            // console.log('关播');
-                            // console.log(FormatNowDate());
-                            // console.log('uid---'+socket.uid);
-                        });
-                        endLiveConnect(io,socket.uid);
-					}
-                    
-                    
-                    
-				}else{
-					/* 观众 */
-                    clientRedis.zrem('user_'+socket.stream,socket.uid,function(error,res){
-						if(error) return;
-						if(res){
-							
-							//用于每日任务--用户观看直播时长统计
-							request(config['WEBADDRESS']+"?service=Live.signOutWatchLive&uid="+socket.uid + "&token=" + socket.token,function(error, response, body){});
-							
-							var data_obj={
-                                            "msg":[
-                                                {
-                                                    "_method_":"disconnect",
-                                                    "action":"1",
-                                                    "ct":{
-                                                        "id":''+socket.uid,
-                                                        "user_nickname":''+socket.nicename,
-                                                        "avatar":socket.avatar
-                                                    },
-                                                    "msgtype":"0",
-                                                    "uid":''+socket.uid,
-                                                    "uname":socket.nicename
-                                                }
-                                            ],
-                                            "retcode":"000000",
-                                            "retmsg":"OK"
-                                        };
-                            //console.log(JSON.stringify(data_obj));
-							process_msg(io,socket.roomnum,JSON.stringify(data_obj));	
-						}
-						
-					});
-					
-				}
-				//console.log(socket.roomnum+"==="+socket.token+"===="+socket.uid+"======"+socket.stream);
-				
-				socket.leave(socket.roomnum);
-				delete io.sockets.sockets[socket.id];
-				sockets[socket.uid] = null;
-				delete sockets[socket.uid];
-
-			});
-	});
-
-});
-
-	// 获取房间成员
-    function getRoomMembers(uid, callback) {
-        clientRedis.hget('LiveRoomMaster', uid, function(error, room_id) {
-            if(error || !room_id) {
-                callback([]);
-                return;
-            }
-
-            clientRedis.hget('LiveRoom', room_id, function(error, members_str) {
-                if(error || !members_str) {
-                    callback([]);
-                    return;
-                }
-
-                var members = members_str.split(',');
-                callback(members);
-            });
-        });
-    }
-
-    // 通知房间所有成员
-    function notifyRoomMembers(io, members, new_uid, inviter_uid, action) {
-        var msg_data = {
-            "_method_": "LiveConnect",
-            "action": "4",
-            "msgtype": "10",
-            "room_members": members,
-            "new_uid": new_uid,
-            "inviter_uid": inviter_uid,
-            "action_type": action
-        };
-
-        var data_obj = {
-            "msg": [msg_data],
-            "retcode": "000000",
-            "retmsg": "OK"
-        };
-
-        // 通知房间内所有成员
-        members.forEach(function(member_uid) {
-            if(member_uid && member_uid != new_uid) {
-                // 获取该成员的拉流地址
-                clientRedis.hget('LiveConnect_pull', member_uid, function(error, pull_url) {
-                    var member_msg = Object.assign({}, msg_data);
-                    member_msg.pkuid = member_uid;
-                    member_msg.pkpull = pull_url || '';
-
-                    var member_data_obj = {
-                        "msg": [member_msg],
-                        "retcode": "000000",
-                        "retmsg": "OK"
-                    };
-
-                    process_msg(io, new_uid, JSON.stringify(member_data_obj));
-                });
-            }
-
-            // 通知该成员房间有新人加入
-            process_msg(io, member_uid, JSON.stringify(data_obj));
-        });
-    }
-
-    // 扩展的结束连麦处理
-    function endLiveConnectWithRoom(io, uid) {
-        // 获取房间信息
-        clientRedis.hget('LiveRoomMaster', uid, function(error, room_id) {
-            if(error || !room_id) {
-                // 没有房间信息,使用原有逻辑
-                endLiveConnect(io, uid);
-                return;
-            }
-
-            // 获取房间成员
-            clientRedis.hget('LiveRoom', room_id, function(error, members_str) {
-                if(error || !members_str) {
-                    endLiveConnect(io, uid);
-                    return;
-                }
-
-                var members = members_str.split(',');
-
-                // 通知房间成员有人离开
-                var leave_msg = {
-                    "_method_": "LiveConnect",
-                    "action": "5",
-                    "msgtype": "10",
-                    "leave_uid": uid,
-                    "room_members": members.filter(m => m != uid)
-                };
-
-                var leave_data_obj = {
-                    "msg": [leave_msg],
-                    "retcode": "000000",
-                    "retmsg": "OK"
-                };
-
-                members.forEach(function(member_uid) {
-                    if(member_uid != uid) {
-                        process_msg(io, member_uid, JSON.stringify(leave_data_obj));
-                    }
-                });
-
-                // 调用原有的结束连麦逻辑
-                endLiveConnect(io, uid);
-            });
-        });
-    }
-
-function sendSystemMsg(socket,msg){
-    var data_obj={
-                    "msg":[
-                        {
-                            "_method_":"SystemNot",
-                            "action":"1",
-                            "ct":""+ msg,
-                            "msgtype":"4"
-                        }
-                    ],
-                    "retcode":"000000",
-                    "retmsg":"OK"
-                };
-	socket.emit('broadcastingListen',[JSON.stringify(data_obj)]);
-						
-}
-
-function evalJson(data){
-	return eval("("+data+")");
-}
-
-function process_msg(io,roomnum,data){
-	if(!chat_history[roomnum]){
-		chat_history[roomnum]=[];
-	}
-	chat_history[roomnum].push(data);
-	chat_interval[roomnum] || (chat_interval[roomnum]=setInterval(function(){
-		if(chat_history[roomnum].length>0){
-			send_msg(io,roomnum);
-		}else{
-			clearInterval(chat_interval[roomnum]);
-			chat_interval[roomnum]=null;
-		}
-	},200));
-}
-
-function send_msg(io,roomnum){
-	var data=chat_history[roomnum].splice(0,chat_history[roomnum].length);
-    io.sockets.in(roomnum).emit("broadcastingListen", data);
-}
-
-
-/* 主播连麦结束处理 */
-function endLiveConnect(io,uid){
-    
-    //console.log('结束连麦');
-    //console.log(FormatNowDate());
-    //console.log('uid--'+uid);
-    clientRedis.hget('LiveConnect',uid,function(error,res){
-        //console.log('res');
-        if(error){
-            return !1;
-        }
-        if(!res){
-            return !1;
-        }
-        var pkuid=res;
-        //console.log('pkuid---'+pkuid);
-        /* 更新数据库 */
-        var sign_data={uid:uid,pkuid:pkuid,type:0};
-        var sign=setSign(sign_data);
-        request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+uid + "&pkuid=" + pkuid+ "&type=0&sign=" +sign,function(error, response, body){
-            if(error) return;
-           
-            var res = evalJson(body);
-            if( response.statusCode == 200 && res.data.code == 0){
-                var data_obj={
-                        "msg":[
-                            {
-                                "_method_":"LiveConnect",
-                                "action":"5",
-                                "msgtype":"10",
-                                "uid":""+uid,
-                                "uname":""
-                            }
-                        ],
-                        "retcode":"000000",
-                        "retmsg":"OK"
-                    };
-        
-                process_msg(io,uid,JSON.stringify(data_obj));
-                process_msg(io,pkuid,JSON.stringify(data_obj)); 
-                
-            }        
-            
-        });	
-         
-    });
-        
-}
-
-/* PK结束处理 */
-function endLivePk(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.endPK&uid="+uid + "&addtime=" + addtime+ "&type=" + type+ "&sign=" +sign,function(error, response, body){
-        if(error) return;
-        // console.log('endPK');
-        // console.log(body);
-        var res = evalJson(body);
-        if( response.statusCode == 200 && res.data.code == 0){
-            var info=res.data.info[0];
-            var data_obj={
-                    "msg":[
-                        {
-                            "_method_":"LivePK",
-                            "action":"9",
-                            "msgtype":"10",
-                            "win_uid":""+info['win_uid'],
-                            "uid":""+uid,
-                            "uname":""
-                        }
-                    ],
-                    "retcode":"000000",
-                    "retmsg":"OK"
-                };
-    
-            process_msg(io,uid,JSON.stringify(data_obj));
-            process_msg(io,info['pkuid'],JSON.stringify(data_obj));
-            
-        }
-        
-    });
-    
-}
-
-
-
-//时间格式化
-function FormatNowDate(){
-	var mDate = new Date();
-	var Y = mDate.getFullYear();
-	var M = mDate.getMonth()+1;
-	var D = mDate.getDate();
-	var H = mDate.getHours();
-	var i = mDate.getMinutes();
-	var s = mDate.getSeconds();
-	return Y +'-' + M + '-' + D + ' ' + H + ':' + i + ':' + s;
-}
-
-/* sign加密 */
-function setSign(obj) {//排序的函数
-    var str='';
-    var newkey = Object.keys(obj).sort();
-//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
-    var newObj = {};//创建一个新的对象,用于存放排好序的键值对
-    for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
-        //newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
-        str+=newkey[i]+'='+obj[newkey[i]]+'&';
-    }
-    str+=config['sign_key'];
-    
-    var sign=md5(str);
-    return sign;
-}
+
+//引入http模块
+var socketio = require('socket.io'),
+	fs 	= require('fs'),
+	https     = require('https'),
+	domain   = require('domain'),
+	redis    = require('redis'),
+    redisio  = require('socket.io-redis'),
+    request  = require('request'),
+    md5  = require('md5-node'),
+    config   = require('./config.js');
+
+var d = domain.create();
+d.on("error", function(err) {
+// 	console.log(err);
+});
+
+//var numscount=0;// 在线人数统计
+var sockets = {};
+var chat_history={};
+var chat_interval={};
+/* 主播连麦关系 */
+var LiveConnect={};
+var LiveConnect_pull={};
+
+var options = {
+  key:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/privkey.key'),
+  cert:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/fullchain.pem')
+}; 
+
+// redis 链接
+var clientRedis  = redis.createClient(config['REDISPORT'],config['REDISHOST']);
+clientRedis.auth(config['REDISPASS']);
+var server = https.createServer(options,function(req, res) {
+// var server = https.createServer(function(req, res) {
+	res.writeHead(200, {
+		'Content-type': 'text/html;charset=utf-8'
+	});
+   //res.write("人数: " + numscount );
+	res.end();
+}).listen(config['socket_port'], function() {
+	////console.log('服务开启19965');
+});
+
+var io = socketio.listen(server,{
+	pingTimeout: 60000,
+  	pingInterval: 25000
+});
+/* var pub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
+ var sub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
+ io.adapter(redisio({ pubClient: pub, subClient: sub })); */
+//setInterval(function(){
+  //global.gc();
+  ////console.log('GC done')
+//}, 1000*30); 
+
+io.on('connection', function(socket) {
+	//console.log('连接成功');
+	//numscount++;
+							
+	var interval;
+
+	//进入房间
+	socket.on('conn', function(data) {
+		
+		if(!data || !data.token){
+				return !1;
+		}
+		
+		userid=data.uid;
+		old_socket = sockets[userid];
+		if (old_socket && old_socket != socket) {
+			
+			if(data.uid != data.roomnum && data.uid==old_socket.roomnum){
+                /* 进房间 但旧链接是 主播 */
+                var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
+				old_socket.emit('broadcastingListen',[data_str]);
+			}else if(data.uid== data.roomnum && data.stream==old_socket.stream){
+                /* 主播重连 */
+				old_socket.reusing = 1;
+				//console.log("重用");
+			}else if(data.uid== data.roomnum && data.stream!=old_socket.stream){
+                /* 主播多端开播 */
+				var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
+				old_socket.emit('broadcastingListen',[data_str]);
+			}
+			old_socket.disconnect()
+		}
+		
+		clientRedis.get(data.token,function(error,res){
+			if(error){
+				return;
+			}else if(res==null){
+				//console.log("[获取token失败]"+data.uid);
+			}else{
+				if(res != null){
+					
+					var userInfo = evalJson(res);
+					if(userInfo['id'] == data.uid ){
+						//console.log("[初始化验证成功]--"+data.uid+"---"+data.roomnum+'---'+data.stream);
+						//获取验证token
+						socket.token   = data.token; 
+						socket.roomnum = data.roomnum;
+						socket.stream = data.stream;
+						socket.nicename = userInfo['user_nickname'];
+						socket.avatar = userInfo['avatar'];
+						socket.sign = Number(userInfo['sign']);
+						socket.usertype   = parseInt(userInfo['usertype']);
+						socket.uid     = data.uid;
+						socket.reusing = 0;
+						
+						socket.join(data.roomnum);
+						sockets[userid] = socket;
+						socket.emit('conn',['ok']);
+                        
+						if( socket.roomnum!=socket.uid && socket.uid >0 ){
+                            
+                            
+							var data_obj={
+                                            "msg":[
+                                                {
+                                                    "_method_":"SendMsg",
+                                                    "action":"0",
+                                                    "ct":{
+                                                        "id":''+userInfo['id'],
+                                                        "user_nickname":''+userInfo['user_nickname'],
+                                                        "avatar":userInfo['avatar'],
+                                                        "avatar_thumb":userInfo['avatar_thumb'],
+                                                        "usertype":''+userInfo['usertype'],
+														"guard_type":''+userInfo['guard_type'],
+														"contribution":''+userInfo['contribution'],
+
+                                                    },
+                                                    "msgtype":"0"
+                                                }
+                                            ],
+                                            "retcode":"000000",
+                                            "retmsg":"OK"
+                                        };
+							process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+							if(socket.stream){
+								clientRedis.zadd('user_'+socket.stream,socket.sign,userInfo['id']);	
+							}
+						}
+
+						
+						//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
+						var stemMgs='直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~';
+						if(userInfo['lang']=='en'){
+							stemMgs='If the live content contains any vulgar, explicit, or pornographic content, the account will be banned; The security department will conduct 24-hour inspections~';
+						}
+                        sendSystemMsg(socket,stemMgs);
+
+						
+						
+
+						return;
+					}else{
+						socket.disconnect();
+					}
+				}
+			}
+			
+			socket.emit('conn',['no']);
+		});
+        
+		
+	});
+
+	socket.on('broadcast',function(data){
+            ////console.log(data);
+		    if(socket.token != undefined){
+		    	var dataObj  = typeof data == 'object'?data:evalJson(data);
+				
+				//console.log('==================='+data);
+			    var msg      = dataObj['msg'][0]; 
+			    var token    = dataObj['token'];
+				var method   = msg['_method_'];
+			    var action   = msg['action'];
+			    var data_str =  typeof data == 'object'?JSON.stringify(data):data;
+			    switch(method){
+			    	case 'SendMsg':{     //聊天 
+
+			    		//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
+
+						clientRedis.hget( "super",socket.uid,function(error,res){
+							if(error) return;
+							if(res != null){
+								var data_str2={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"SystemNot",
+                                                        "action":"1",
+                                                        "ct":''+dataObj['msg'][0]['ct'],
+                                                        "msgtype":"4"
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+
+                                
+								process_msg(io,socket.roomnum,JSON.stringify(data_str2));
+		    				}else{
+								clientRedis.hget(socket.roomnum + "shutup",socket.uid,function(error,res){
+									if(error) return;
+									if(res != null){
+                                        var newData  = dataObj;
+                                        newData['retcode'] = '409002';
+                                        socket.emit('broadcastingListen',[JSON.stringify(newData)]);
+									}else{
+										process_msg(io,socket.roomnum,data_str);
+									}	
+								});
+		    				}							
+						});
+			    		break;
+			    	}
+			    	case 'SendGift':{    //送礼物
+						var gifToken = dataObj['msg'][0]['ct'];
+			    		clientRedis.get(gifToken,function(error,res){
+			    			if(!error&&res != null){
+			    				var resObj = evalJson(res);
+			    				dataObj['msg'][0]['ct'] = resObj;
+								
+								var ifpk='0',
+                                    pkuid1='0',
+                                    pkuid2='0',
+                                    pktotal1='0',
+                                    pktotal2='0';
+                                
+                                //console.log('SendGift');
+                                //console.log(resObj);
+                                if(resObj['ispk']==1 ){
+                                    ifpk='1';
+                                    pkuid1=''+resObj['pkuid1'];
+                                    pkuid2=''+resObj['pkuid2'];
+                                    pktotal1=''+resObj['pktotal1'];
+                                    pktotal2=''+resObj['pktotal2'];
+                                    //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;
+								
+								
+								console.log('---------礼物信息--------------------'+[JSON.stringify(dataObj)]);
+								
+
+                                
+								io.sockets.in(socket.roomnum).emit('broadcastingListen',[JSON.stringify(dataObj)]);
+								if(pkuid2>0){
+
+                                    io.sockets.in(pkuid2).emit('broadcastingListen',[JSON.stringify(dataObj)]);
+                                }
+                                  
+			    				clientRedis.del(gifToken);
+			    			}
+			    		});
+			    		break;
+			    	}
+					case 'ConnectVideo' :{ //用户和主播连麦
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.发起者断开连麦;6:主播断开连麦;7:主播正忙碌 8:主播无响应
+                        if(action=='5' || action=='6'){
+                            clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
+                                if(error){
+                                    return !1;
+                                }
+                                if(!res){
+                                    return !1;
+                                }
+                                var res_j=JSON.parse(res);
+                                
+                                if( socket.uid==res_j['uid'] || socket.uid==socket.roomnum ){
+                                    clientRedis.hdel('ShowVideo',socket.roomnum);
+                                    process_msg(io,socket.roomnum,data_str);									
+                                }							 
+                            });                           
+                        }else if(action=='2'){
+                            //console.log('主播同意连麦');
+                            var touid=msg['touid'];
+							//console.log(touid);
+                            
+                            request(config['WEBADDRESS']+"?service=Live.showVideo&uid="+socket.uid + "&token=" + socket.token+ "&touid="+touid+"&pull_url=''",function(error, response, body){
+                                //console.log('showVideo');
+                                //console.log(body);
+                            });
+                            
+							process_msg(io,socket.roomnum,data_str);
+                        }else{
+                            process_msg(io,socket.roomnum,data_str);
+                        }
+	                    break;
+			    	}
+					
+					case 'light' :{     //点亮
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+					
+					case 'updateVotes' :{//更新映票[暂时不用]
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+			    	case 'CloseLive' :{//关闭直播
+			    		if(socket.usertype == 50 ){
+							process_msg(io,socket.roomnum,data_str);
+			    	    }
+	                    break;
+			    	}
+			    	case 'KickUser' :{//踢人
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+			    	case 'ShutUpUser' :{//禁言
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+					case 'stopLive' :{//超管关播
+						clientRedis.hget( "super",socket.uid,function(error,res){
+							if(error) return;
+							if(res != null){
+								process_msg(io,socket.roomnum,data_str);								
+		    				}							
+						});
+						break;
+			    	}
+			    	case 'ResumeUser' :{//恢复发言
+			    		if(socket.usertype == 50 || socket.usertype == 40){
+							process_msg(io,socket.roomnum,data_str);
+			    	    }
+			    	    break;
+			    	} 
+                    case 'setAdmin' :{//设置/取消管理员
+                    	//console.log(data_str);
+                    	//console.log(socket.usertype);
+			    		if(socket.usertype == 50 ){
+							process_msg(io,socket.roomnum,data_str);
+							
+			    	    }
+			    	    break;
+			    	} 
+			    	case 'StartEndLive':{
+			    		if(socket.usertype == 50 ){
+			    		   socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
+			    	    }else{
+			    	    	clientRedis.get("LiveAuthority" + socket.uid,function(error,res){
+			    	    		if(error) return;
+			    	    		if(parseInt(res) == 5 ||parseInt(res) == 1 || parseInt(res) == 2){
+		    	    				socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
+		    	    			}
+			    	    	})
+			    	    }
+			    	    break;
+
+			    	}
+					
+					case 'BuyGuard':{//购买守护
+					
+						
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+					
+					case 'LiveConnect':{//主播和主播连麦
+                        if(socket.roomnum != socket.uid){
+                            //非主播不能操作
+                            return !1;
+                        }
+                        var pkuid=msg['pkuid'];
+                        var pkpull=msg['pkpull'];
+
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应 9:主播繁忙(游戏)
+                        if(action=='1'){
+                            // console.log('发起连麦');
+                            // console.log(FormatNowDate());
+                            // console.log(socket.uid+'---'+pkuid);
+                            // console.log(pkpull);
+                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
+                            LiveConnect_pull[socket.uid]=pkpull;
+                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
+                        }
+                        if(action=='2'){
+                            // console.log('接受连麦');
+                            // console.log(FormatNowDate());
+                            // console.log(socket.uid+'---'+pkuid);
+                            // console.log(pkpull);
+                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
+                            LiveConnect_pull[socket.uid]=pkpull;
+                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
+
+                            /* 更新数据库 */
+                            var sign_data={uid:socket.uid,pkuid:pkuid,type:1};
+                            var sign=setSign(sign_data);
+                            request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+socket.uid + "&pkuid=" + pkuid+ "&type=1&sign=" +sign,function(error, response, body){
+                                // console.log('changeLive');
+                                // console.log(body);
+                                if(error) return;
+
+                                // 获取房间所有成员并通知
+                                getRoomMembers(socket.uid, function(members) {
+                                    if(members.length >0){
+                                        notifyRoomMembers(io, members, socket.uid, pkuid, 'join');
+                                    }else{
+                                                                                /* 发送连麦成功信息 */
+                                        /* 当前房间 */
+                                        var data_obj={
+                                                    "msg":[
+                                                        {
+                                                            "_method_":"LiveConnect",
+                                                            "action":"4",
+                                                            "msgtype":"10",
+                                                            "pkuid":""+pkuid,
+                                                            "pkpull":""+LiveConnect_pull[pkuid],
+                                                            "uid":""+socket.uid,
+                                                            "uname":""+socket.nicename
+                                                        }
+                                                    ],
+                                                    "retcode":"000000",
+                                                    "retmsg":"OK"
+                                                };
+                                        // console.log(data_obj);
+                                        process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                                        /* 对方房间 */
+                                        var data_obj_pk={
+                                                    "msg":[
+                                                        {
+                                                            "_method_":"LiveConnect",
+                                                            "action":"4",
+                                                            "msgtype":"10",
+                                                            "pkuid":""+socket.uid,
+                                                            "pkpull":""+LiveConnect_pull[socket.uid],
+                                                            "uid":""+socket.uid,
+                                                            "uname":""+socket.nicename
+                                                        }
+                                                    ],
+                                                    "retcode":"000000",
+                                                    "retmsg":"OK"
+                                                };
+                                        // console.log(data_obj_pk);
+                                        process_msg(io,pkuid,JSON.stringify(data_obj_pk));
+                                    }
+                                    
+                                });
+                            });
+                            
+
+                            
+                        }else if(action=='5'){ //主播和主播断开连麦
+                            /* 清除连麦信息 */
+                            //console.log('endLiveConnect--action--5');
+//                            endLiveConnect(io,socket.uid);
+                            /* 清除连麦信息并处理房间 */
+                            endLiveConnectWithRoom(io, socket.uid);
+                        }else{
+                            var socket_pkuid=sockets[pkuid];
+                            if(socket_pkuid){
+                                socket_pkuid.emit('broadcastingListen',[data_str]);
+                            }
+                            
+                        }
+	                    break;
+			    	}
+					case 'LivePK':{//主播PK
+						console.log("----------------主播PK------------"+data_str);
+					
+                        if(socket.roomnum != socket.uid){
+                            //非主播不能操作
+                            return !1;
+                        }
+                        var uid=msg['uid'];
+                        var pkuid=msg['pkuid'];
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应; 9:PK结果
+                        if(action=='1'){
+                            console.log('发起PK');
+                            console.log(FormatNowDate());
+                            console.log(socket.uid+'---'+pkuid);
+                        }
+                        if(action=='2'){
+                            /* 更新PK状态 */
+                            console.log('LivePK');
+                            console.log(socket.uid);
+                            console.log(pkuid);
+                            console.log('开始PK');
+                            console.log(FormatNowDate());
+                            console.log(socket.uid+'---'+pkuid);
+                            var sign_data={uid:socket.uid,pkuid:pkuid};
+                            var sign=setSign(sign_data);
+                            request(config['WEBADDRESS']+"?service=Livepk.setPK&uid="+socket.uid + "&pkuid=" + pkuid+ "&sign=" +sign,function(error, response, body){
+                                if(error) return;
+                                // console.log('setPK');
+                                // console.log(body);
+                                var res = evalJson(body);
+                                if( response.statusCode == 200 && res.data.code == 0){
+                                    
+                                    var info = res.data.info[0];
+                                    // console.log('info');
+                                    // console.log(info);
+                                    /* 发送连麦成功信息 */
+                                    /* 当前房间 */
+                                    var data_obj={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"LivePK",
+                                                        "action":"4",
+                                                        "msgtype":"10",
+                                                        "pkuid":""+pkuid,
+                                                        "uid":""+socket.uid,
+                                                        "uname":""+socket.nicename
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+                                    
+                                    process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                                    /* 对方房间 */
+                                    var data_obj_pk={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"LivePK",
+                                                        "action":"4",
+                                                        "msgtype":"10",
+                                                        "pkuid":""+socket.uid,
+                                                        "uid":""+socket.uid,
+                                                        "uname":""+socket.nicename
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+                                    process_msg(io,pkuid,JSON.stringify(data_obj_pk));
+                                    
+                                    setTimeout(function() {//定时发送结果
+                                        // console.log('计时器');
+                                        // console.log(FormatNowDate());
+                                        // console.log('uid---'+socket.uid);
+                                        endLivePk(io,socket.uid,0,info['addtime']);
+                                    }, 5*60*1000);
+                                }
+
+                            });
+                        }else if(action=='5'){
+                            /* 清除PK信息 */
+                            // console.log('endLivePk --action--5');
+                            // console.log(FormatNowDate());
+                            endLivePk(io,socket.uid,1,0);
+                        }else{
+                            var socket_pkuid=sockets[pkuid];
+                            if(socket_pkuid){
+                                socket_pkuid.emit('broadcastingListen',[data_str]);
+                            }
+                            //process_msg(io,pkuid,data_str);
+                        }
+	                    break;
+			    	}
+					
+			    	
+                    case 'goodsLiveShow' :{//商品在直播间展示/不展示
+                        process_msg(io,socket.roomnum,data_str);
+                        break;
+                    }
+                    
+			    	case 'SystemNot':{//系统通知
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+			    	case 'requestFans':{ //暂时不用
+							request(config['WEBADDRESS']+"?service=Live.getZombie&stream=" + socket.stream+"&uid=" + socket.uid,function(error, response, body){
+								if(error) return;
+								var res = evalJson(body);
+								if( response.statusCode == 200 && res.data.code == 0){
+									var data_str2="{\"msg\":[{\"_method_\":\"requestFans\",\"action\":\"3\",\"ct\": "+ body + ",\"msgtype\":\"0\"}],\"retcode\":\"000000\",\"retmsg\":\"OK\"}";
+									process_msg(io,socket.roomnum,data_str2);
+								}
+							});
+			    	}
+					
+					case 'SystemWarning':{//警告通知
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+						
+			    }
+		    }
+		    
+	});
+	
+	
+	/*封禁通知*/
+	socket.on('LiveBanadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"stopLive",
+						"action":"1",
+						"uid":"0",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+    	}
+    });
+	
+	/*警告通知*/
+	socket.on('warningadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"SystemWarning",
+						"action":"1",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+    	}
+    });
+	
+	/*关播通知*/
+	socket.on('superadminaction',function(data){
+
+		//console.log(data['token']);
+		//console.log(config['TOKEN']);
+		
+    	if(data['token'] == config['TOKEN']){
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"stopLive",
+						"action":"1",
+						"uid":"0",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+			
+			
+            /* io.sockets.in(data['roomnum']).emit("broadcastingListen", ['stopplay']); */
+    	}
+    });
+	
+	/* 系统信息 */
+	socket.on('systemadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+            var data_obj={
+                            "msg":[
+                                {
+                                    "_method_":"SystemNot",
+                                    "action":"1",
+                                    "ct":''+ data.content,
+                                    "msgtype":"4"
+                                }
+                            ],
+                            "retcode":"000000",
+                            "retmsg":"OK"
+                        };
+    		io.emit('broadcastingListen',[JSON.stringify(data_obj)]);
+    	}
+    });
+	
+    //资源释放
+	socket.on('disconnect', function() { 
+			/* numscount--; 
+            if(numscount<0){
+				numscount=0;
+			}   */
+          			
+			if(socket.roomnum ==null || socket.token==null || socket.uid <=0){
+				return !1;
+			}
+				
+			d.run(function() {
+				
+				/* 用户连麦 */
+				clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
+                    if(error){
+                        return !1;
+                    }
+                    if(!res){
+                        return !1;
+                    }
+                    var res_j=JSON.parse(res);
+                    
+                    if( socket.uid == res_j['uid'] || socket.uid == socket.roomnum ){
+                        clientRedis.hdel('ShowVideo',socket.roomnum);
+                        var data_obj={
+                                        "msg":[
+                                            {
+                                                "_method_":"ConnectVideo",
+                                                "action":"5",
+                                                "msgtype":"10",
+                                                "uid":""+socket.uid,
+                                                "uname":""+socket.nicename
+                                            }
+                                        ],
+                                        "retcode":"000000",
+                                        "retmsg":"OK"
+                                    };
+                        process_msg(io,socket.roomnum,JSON.stringify(data_obj));									
+                    }	
+					 
+				});
+				
+				
+				if(socket.roomnum==socket.uid){
+					//console.log("主播socket断开");
+					/* 主播 */ 
+					if(socket.reusing==0){
+						//console.log("请求关播接口");
+						//console.log(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream);
+						request(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream,function(error, response, body){
+							//console.log("error:"+error);
+                            var data_obj={
+                                        "retmsg":"ok",
+                                        "retcode":"000000",
+                                        "msg":[
+                                            {
+                                                "msgtype":"1",
+                                                "_method_":"StartEndLive",
+                                                "action":"18",
+                                                "ct":"直播关闭"
+                                            }
+                                        ]
+                                    };
+                            process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                            // console.log('关播');
+                            // console.log(FormatNowDate());
+                            // console.log('uid---'+socket.uid);
+                        });
+                        endLiveConnect(io,socket.uid);
+					}
+                    
+                    
+                    
+				}else{
+					/* 观众 */
+                    clientRedis.zrem('user_'+socket.stream,socket.uid,function(error,res){
+						if(error) return;
+						if(res){
+							
+							//用于每日任务--用户观看直播时长统计
+							request(config['WEBADDRESS']+"?service=Live.signOutWatchLive&uid="+socket.uid + "&token=" + socket.token,function(error, response, body){});
+							
+							var data_obj={
+                                            "msg":[
+                                                {
+                                                    "_method_":"disconnect",
+                                                    "action":"1",
+                                                    "ct":{
+                                                        "id":''+socket.uid,
+                                                        "user_nickname":''+socket.nicename,
+                                                        "avatar":socket.avatar
+                                                    },
+                                                    "msgtype":"0",
+                                                    "uid":''+socket.uid,
+                                                    "uname":socket.nicename
+                                                }
+                                            ],
+                                            "retcode":"000000",
+                                            "retmsg":"OK"
+                                        };
+                            //console.log(JSON.stringify(data_obj));
+							process_msg(io,socket.roomnum,JSON.stringify(data_obj));	
+						}
+						
+					});
+					
+				}
+				//console.log(socket.roomnum+"==="+socket.token+"===="+socket.uid+"======"+socket.stream);
+				
+				socket.leave(socket.roomnum);
+				delete io.sockets.sockets[socket.id];
+				sockets[socket.uid] = null;
+				delete sockets[socket.uid];
+
+			});
+	});
+
+});
+// 获取房间成员
+function getRoomMembers(uid, callback) {
+    clientRedis.hget('LiveRoomMaster', uid, function(error, room_id) {
+        if(error || !room_id) {
+            callback([]);
+            return;
+        }
+
+        clientRedis.hget('LiveRoom', room_id, function(error, members_str) {
+            if(error || !members_str) {
+                callback([]);
+                return;
+            }
+
+            var members = members_str.split(',');
+            callback(members);
+        });
+    });
+}
+
+// 通知房间所有成员
+function notifyRoomMembers(io, members, new_uid, inviter_uid, action) {
+    var msg_data = {
+        "_method_": "LiveConnect",
+        "action": "4",
+        "msgtype": "10",
+        "room_members": members,
+        "new_uid": new_uid,
+        "inviter_uid": inviter_uid,
+        "action_type": action
+    };
+
+    var data_obj = {
+        "msg": [msg_data],
+        "retcode": "000000",
+        "retmsg": "OK"
+    };
+
+    // 通知房间内所有成员
+    members.forEach(function(member_uid) {
+        if(member_uid && member_uid != new_uid) {
+            // 获取该成员的拉流地址
+            clientRedis.hget('LiveConnect_pull', member_uid, function(error, pull_url) {
+                var member_msg = Object.assign({}, msg_data);
+                member_msg.pkuid = member_uid;
+                member_msg.pkpull = pull_url || '';
+
+                var member_data_obj = {
+                    "msg": [member_msg],
+                    "retcode": "000000",
+                    "retmsg": "OK"
+                };
+
+                process_msg(io, new_uid, JSON.stringify(member_data_obj));
+            });
+        }
+
+        // 通知该成员房间有新人加入
+        process_msg(io, member_uid, JSON.stringify(data_obj));
+    });
+}
+
+// 扩展的结束连麦处理
+function endLiveConnectWithRoom(io, uid) {
+    // 获取房间信息
+    clientRedis.hget('LiveRoomMaster', uid, function(error, room_id) {
+        if(error || !room_id) {
+            // 没有房间信息,使用原有逻辑
+            endLiveConnect(io, uid);
+            return;
+        }
+
+        // 获取房间成员
+        clientRedis.hget('LiveRoom', room_id, function(error, members_str) {
+            if(error || !members_str) {
+                endLiveConnect(io, uid);
+                return;
+            }
+
+            var members = members_str.split(',');
+
+            // 通知房间成员有人离开
+            var leave_msg = {
+                "_method_": "LiveConnect",
+                "action": "5",
+                "msgtype": "10",
+                "leave_uid": uid,
+                "room_members": members.filter(m => m != uid)
+            };
+
+            var leave_data_obj = {
+                "msg": [leave_msg],
+                "retcode": "000000",
+                "retmsg": "OK"
+            };
+
+            members.forEach(function(member_uid) {
+                if(member_uid != uid) {
+                    process_msg(io, member_uid, JSON.stringify(leave_data_obj));
+                }
+            });
+
+            // 调用原有的结束连麦逻辑
+            endLiveConnect(io, uid);
+        });
+    });
+}
+
+function sendSystemMsg(socket,msg){
+    var data_obj={
+                    "msg":[
+                        {
+                            "_method_":"SystemNot",
+                            "action":"1",
+                            "ct":""+ msg,
+                            "msgtype":"4"
+                        }
+                    ],
+                    "retcode":"000000",
+                    "retmsg":"OK"
+                };
+	socket.emit('broadcastingListen',[JSON.stringify(data_obj)]);
+						
+}
+
+function evalJson(data){
+	return eval("("+data+")");
+}
+
+function process_msg(io,roomnum,data){
+	if(!chat_history[roomnum]){
+		chat_history[roomnum]=[];
+	}
+	chat_history[roomnum].push(data);
+	chat_interval[roomnum] || (chat_interval[roomnum]=setInterval(function(){
+		if(chat_history[roomnum].length>0){
+			send_msg(io,roomnum);
+		}else{
+			clearInterval(chat_interval[roomnum]);
+			chat_interval[roomnum]=null;
+		}
+	},200));
+}
+
+function send_msg(io,roomnum){
+	var data=chat_history[roomnum].splice(0,chat_history[roomnum].length);
+    io.sockets.in(roomnum).emit("broadcastingListen", data);
+}
+
+
+/* 主播连麦结束处理 */
+function endLiveConnect(io,uid){
+    
+    //console.log('结束连麦');
+    //console.log(FormatNowDate());
+    //console.log('uid--'+uid);
+    clientRedis.hget('LiveConnect',uid,function(error,res){
+        //console.log('res');
+        if(error){
+            return !1;
+        }
+        if(!res){
+            return !1;
+        }
+        var pkuid=res;
+        //console.log('pkuid---'+pkuid);
+        /* 更新数据库 */
+        var sign_data={uid:uid,pkuid:pkuid,type:0};
+        var sign=setSign(sign_data);
+        request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+uid + "&pkuid=" + pkuid+ "&type=0&sign=" +sign,function(error, response, body){
+            if(error) return;
+           
+            var res = evalJson(body);
+            if( response.statusCode == 200 && res.data.code == 0){
+                var data_obj={
+                        "msg":[
+                            {
+                                "_method_":"LiveConnect",
+                                "action":"5",
+                                "msgtype":"10",
+                                "uid":""+uid,
+                                "uname":""
+                            }
+                        ],
+                        "retcode":"000000",
+                        "retmsg":"OK"
+                    };
+        
+                process_msg(io,uid,JSON.stringify(data_obj));
+                process_msg(io,pkuid,JSON.stringify(data_obj)); 
+                
+            }        
+            
+        });	
+         
+    });
+        
+}
+
+/* PK结束处理 */
+function endLivePk(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.endPK&uid="+uid + "&addtime=" + addtime+ "&type=" + type+ "&sign=" +sign,function(error, response, body){
+        if(error) return;
+        // console.log('endPK');
+        // console.log(body);
+        var res = evalJson(body);
+        if( response.statusCode == 200 && res.data.code == 0){
+            var info=res.data.info[0];
+            var data_obj={
+                    "msg":[
+                        {
+                            "_method_":"LivePK",
+                            "action":"9",
+                            "msgtype":"10",
+                            "win_uid":""+info['win_uid'],
+                            "uid":""+uid,
+                            "uname":""
+                        }
+                    ],
+                    "retcode":"000000",
+                    "retmsg":"OK"
+                };
+    
+            process_msg(io,uid,JSON.stringify(data_obj));
+            process_msg(io,info['pkuid'],JSON.stringify(data_obj));
+            
+        }
+        
+    });
+    
+}
+
+
+
+//时间格式化
+function FormatNowDate(){
+	var mDate = new Date();
+	var Y = mDate.getFullYear();
+	var M = mDate.getMonth()+1;
+	var D = mDate.getDate();
+	var H = mDate.getHours();
+	var i = mDate.getMinutes();
+	var s = mDate.getSeconds();
+	return Y +'-' + M + '-' + D + ' ' + H + ':' + i + ':' + s;
+}
+
+/* sign加密 */
+function setSign(obj) {//排序的函数
+    var str='';
+    var newkey = Object.keys(obj).sort();
+//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
+    var newObj = {};//创建一个新的对象,用于存放排好序的键值对
+    for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
+        //newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
+        str+=newkey[i]+'='+obj[newkey[i]]+'&';
+    }
+    str+=config['sign_key'];
+    
+    var sign=md5(str);
+    return sign;
+}

+ 944 - 0
dspIM/s1_bf.js

@@ -0,0 +1,944 @@
+
+//引入http模块
+var socketio = require('socket.io'),
+	fs 	= require('fs'),
+	https     = require('https'),
+	domain   = require('domain'),
+	redis    = require('redis'),
+    redisio  = require('socket.io-redis'),
+    request  = require('request'),
+    md5  = require('md5-node'),
+    config   = require('./config.js');
+
+var d = domain.create();
+d.on("error", function(err) {
+// 	console.log(err);
+});
+
+//var numscount=0;// 在线人数统计
+var sockets = {};
+var chat_history={};
+var chat_interval={};
+/* 主播连麦关系 */
+var LiveConnect={};
+var LiveConnect_pull={};
+
+var options = {
+  key:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/privkey.key'),
+  cert:fs.readFileSync('/www/server/panel/vhost/cert/yjzb.yunchao2u.com/fullchain.pem')
+}; 
+
+// redis 链接
+var clientRedis  = redis.createClient(config['REDISPORT'],config['REDISHOST']);
+clientRedis.auth(config['REDISPASS']);
+var server = https.createServer(options,function(req, res) {
+// var server = https.createServer(function(req, res) {
+	res.writeHead(200, {
+		'Content-type': 'text/html;charset=utf-8'
+	});
+   //res.write("人数: " + numscount );
+	res.end();
+}).listen(config['socket_port'], function() {
+	////console.log('服务开启19965');
+});
+
+var io = socketio.listen(server,{
+	pingTimeout: 60000,
+  	pingInterval: 25000
+});
+/* var pub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
+ var sub = redis.createClient(config['REDISPORT'], config['REDISHOST'], { auth_pass: config['REDISPASS'] });
+ io.adapter(redisio({ pubClient: pub, subClient: sub })); */
+//setInterval(function(){
+  //global.gc();
+  ////console.log('GC done')
+//}, 1000*30); 
+
+io.on('connection', function(socket) {
+	//console.log('连接成功');
+	//numscount++;
+							
+	var interval;
+
+	//进入房间
+	socket.on('conn', function(data) {
+		
+		if(!data || !data.token){
+				return !1;
+		}
+		
+		userid=data.uid;
+		old_socket = sockets[userid];
+		if (old_socket && old_socket != socket) {
+			
+			if(data.uid != data.roomnum && data.uid==old_socket.roomnum){
+                /* 进房间 但旧链接是 主播 */
+                var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
+				old_socket.emit('broadcastingListen',[data_str]);
+			}else if(data.uid== data.roomnum && data.stream==old_socket.stream){
+                /* 主播重连 */
+				old_socket.reusing = 1;
+				//console.log("重用");
+			}else if(data.uid== data.roomnum && data.stream!=old_socket.stream){
+                /* 主播多端开播 */
+				var data_str='{"retmsg":"ok","retcode":"000000","msg":[{"msgtype":"1","_method_":"StartEndLive","action":"19","ct":"直播关闭"}]}';
+				old_socket.emit('broadcastingListen',[data_str]);
+			}
+			old_socket.disconnect()
+		}
+		
+		clientRedis.get(data.token,function(error,res){
+			if(error){
+				return;
+			}else if(res==null){
+				//console.log("[获取token失败]"+data.uid);
+			}else{
+				if(res != null){
+					
+					var userInfo = evalJson(res);
+					if(userInfo['id'] == data.uid ){
+						//console.log("[初始化验证成功]--"+data.uid+"---"+data.roomnum+'---'+data.stream);
+						//获取验证token
+						socket.token   = data.token; 
+						socket.roomnum = data.roomnum;
+						socket.stream = data.stream;
+						socket.nicename = userInfo['user_nickname'];
+						socket.avatar = userInfo['avatar'];
+						socket.sign = Number(userInfo['sign']);
+						socket.usertype   = parseInt(userInfo['usertype']);
+						socket.uid     = data.uid;
+						socket.reusing = 0;
+						
+						socket.join(data.roomnum);
+						sockets[userid] = socket;
+						socket.emit('conn',['ok']);
+                        
+						if( socket.roomnum!=socket.uid && socket.uid >0 ){
+                            
+                            
+							var data_obj={
+                                            "msg":[
+                                                {
+                                                    "_method_":"SendMsg",
+                                                    "action":"0",
+                                                    "ct":{
+                                                        "id":''+userInfo['id'],
+                                                        "user_nickname":''+userInfo['user_nickname'],
+                                                        "avatar":userInfo['avatar'],
+                                                        "avatar_thumb":userInfo['avatar_thumb'],
+                                                        "usertype":''+userInfo['usertype'],
+														"guard_type":''+userInfo['guard_type'],
+														"contribution":''+userInfo['contribution'],
+
+                                                    },
+                                                    "msgtype":"0"
+                                                }
+                                            ],
+                                            "retcode":"000000",
+                                            "retmsg":"OK"
+                                        };
+							process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+							if(socket.stream){
+								clientRedis.zadd('user_'+socket.stream,socket.sign,userInfo['id']);	
+							}
+						}
+
+						
+						//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
+						var stemMgs='直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~';
+						if(userInfo['lang']=='en'){
+							stemMgs='If the live content contains any vulgar, explicit, or pornographic content, the account will be banned; The security department will conduct 24-hour inspections~';
+						}
+                        sendSystemMsg(socket,stemMgs);
+
+						
+						
+
+						return;
+					}else{
+						socket.disconnect();
+					}
+				}
+			}
+			
+			socket.emit('conn',['no']);
+		});
+        
+		
+	});
+
+	socket.on('broadcast',function(data){
+            ////console.log(data);
+		    if(socket.token != undefined){
+		    	var dataObj  = typeof data == 'object'?data:evalJson(data);
+				
+				//console.log('==================='+data);
+			    var msg      = dataObj['msg'][0]; 
+			    var token    = dataObj['token'];
+				var method   = msg['_method_'];
+			    var action   = msg['action'];
+			    var data_str =  typeof data == 'object'?JSON.stringify(data):data;
+			    switch(method){
+			    	case 'SendMsg':{     //聊天 
+
+			    		//sendSystemMsg(socket,"直播内容包含任何低俗、暴露和涉黄内容,账号会被封禁;安全部门会24小时巡查哦~");
+
+						clientRedis.hget( "super",socket.uid,function(error,res){
+							if(error) return;
+							if(res != null){
+								var data_str2={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"SystemNot",
+                                                        "action":"1",
+                                                        "ct":''+dataObj['msg'][0]['ct'],
+                                                        "msgtype":"4"
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+
+                                
+								process_msg(io,socket.roomnum,JSON.stringify(data_str2));
+		    				}else{
+								clientRedis.hget(socket.roomnum + "shutup",socket.uid,function(error,res){
+									if(error) return;
+									if(res != null){
+                                        var newData  = dataObj;
+                                        newData['retcode'] = '409002';
+                                        socket.emit('broadcastingListen',[JSON.stringify(newData)]);
+									}else{
+										process_msg(io,socket.roomnum,data_str);
+									}	
+								});
+		    				}							
+						});
+			    		break;
+			    	}
+			    	case 'SendGift':{    //送礼物
+						var gifToken = dataObj['msg'][0]['ct'];
+			    		clientRedis.get(gifToken,function(error,res){
+			    			if(!error&&res != null){
+			    				var resObj = evalJson(res);
+			    				dataObj['msg'][0]['ct'] = resObj;
+								
+								var ifpk='0',
+                                    pkuid1='0',
+                                    pkuid2='0',
+                                    pktotal1='0',
+                                    pktotal2='0';
+                                
+                                //console.log('SendGift');
+                                //console.log(resObj);
+                                if(resObj['ispk']==1 ){
+                                    ifpk='1';
+                                    pkuid1=''+resObj['pkuid1'];
+                                    pkuid2=''+resObj['pkuid2'];
+                                    pktotal1=''+resObj['pktotal1'];
+                                    pktotal2=''+resObj['pktotal2'];
+                                    //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;
+								
+								
+								console.log('---------礼物信息--------------------'+[JSON.stringify(dataObj)]);
+								
+
+                                
+								io.sockets.in(socket.roomnum).emit('broadcastingListen',[JSON.stringify(dataObj)]);
+								if(pkuid2>0){
+
+                                    io.sockets.in(pkuid2).emit('broadcastingListen',[JSON.stringify(dataObj)]);
+                                }
+                                  
+			    				clientRedis.del(gifToken);
+			    			}
+			    		});
+			    		break;
+			    	}
+					case 'ConnectVideo' :{ //用户和主播连麦
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.发起者断开连麦;6:主播断开连麦;7:主播正忙碌 8:主播无响应
+                        if(action=='5' || action=='6'){
+                            clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
+                                if(error){
+                                    return !1;
+                                }
+                                if(!res){
+                                    return !1;
+                                }
+                                var res_j=JSON.parse(res);
+                                
+                                if( socket.uid==res_j['uid'] || socket.uid==socket.roomnum ){
+                                    clientRedis.hdel('ShowVideo',socket.roomnum);
+                                    process_msg(io,socket.roomnum,data_str);									
+                                }							 
+                            });                           
+                        }else if(action=='2'){
+                            //console.log('主播同意连麦');
+                            var touid=msg['touid'];
+							//console.log(touid);
+                            
+                            request(config['WEBADDRESS']+"?service=Live.showVideo&uid="+socket.uid + "&token=" + socket.token+ "&touid="+touid+"&pull_url=''",function(error, response, body){
+                                //console.log('showVideo');
+                                //console.log(body);
+                            });
+                            
+							process_msg(io,socket.roomnum,data_str);
+                        }else{
+                            process_msg(io,socket.roomnum,data_str);
+                        }
+	                    break;
+			    	}
+					
+					case 'light' :{     //点亮
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+					
+					case 'updateVotes' :{//更新映票[暂时不用]
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+			    	case 'CloseLive' :{//关闭直播
+			    		if(socket.usertype == 50 ){
+							process_msg(io,socket.roomnum,data_str);
+			    	    }
+	                    break;
+			    	}
+			    	case 'KickUser' :{//踢人
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+			    	case 'ShutUpUser' :{//禁言
+						process_msg(io,socket.roomnum,data_str);
+	                    break;
+			    	}
+					case 'stopLive' :{//超管关播
+						clientRedis.hget( "super",socket.uid,function(error,res){
+							if(error) return;
+							if(res != null){
+								process_msg(io,socket.roomnum,data_str);								
+		    				}							
+						});
+						break;
+			    	}
+			    	case 'ResumeUser' :{//恢复发言
+			    		if(socket.usertype == 50 || socket.usertype == 40){
+							process_msg(io,socket.roomnum,data_str);
+			    	    }
+			    	    break;
+			    	} 
+                    case 'setAdmin' :{//设置/取消管理员
+                    	//console.log(data_str);
+                    	//console.log(socket.usertype);
+			    		if(socket.usertype == 50 ){
+							process_msg(io,socket.roomnum,data_str);
+							
+			    	    }
+			    	    break;
+			    	} 
+			    	case 'StartEndLive':{
+			    		if(socket.usertype == 50 ){
+			    		   socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
+			    	    }else{
+			    	    	clientRedis.get("LiveAuthority" + socket.uid,function(error,res){
+			    	    		if(error) return;
+			    	    		if(parseInt(res) == 5 ||parseInt(res) == 1 || parseInt(res) == 2){
+		    	    				socket.broadcast.to(socket.roomnum).emit('broadcastingListen',[data_str]);
+		    	    			}
+			    	    	})
+			    	    }
+			    	    break;
+
+			    	}
+					
+					case 'BuyGuard':{//购买守护
+					
+						
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+					
+					case 'LiveConnect':{//主播和主播连麦
+                        if(socket.roomnum != socket.uid){
+                            //非主播不能操作
+                            return !1;
+                        }
+                        var pkuid=msg['pkuid'];
+                        var pkpull=msg['pkpull'];
+
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应 9:主播繁忙(游戏)
+                        if(action=='1'){
+                            // console.log('发起连麦');
+                            // console.log(FormatNowDate());
+                            // console.log(socket.uid+'---'+pkuid);
+                            // console.log(pkpull);
+                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
+                            LiveConnect_pull[socket.uid]=pkpull;
+                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
+                        }
+                        if(action=='2'){
+                            // console.log('接受连麦');
+                            // console.log(FormatNowDate());
+                            // console.log(socket.uid+'---'+pkuid);
+                            // console.log(pkpull);
+                            // console.log('LiveConnect_pull--'+socket.uid+'-----'+pkpull);
+                            LiveConnect_pull[socket.uid]=pkpull;
+                            clientRedis.hset('LiveConnect_pull',socket.uid,pkpull);
+
+                            /* 更新数据库 */
+                            var sign_data={uid:socket.uid,pkuid:pkuid,type:1};
+                            var sign=setSign(sign_data);
+                            request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+socket.uid + "&pkuid=" + pkuid+ "&type=1&sign=" +sign,function(error, response, body){
+                                // console.log('changeLive');
+                                // console.log(body);
+                            });
+                            
+                            /* 发送连麦成功信息 */
+                            /* 当前房间 */
+                            var data_obj={
+                                        "msg":[
+                                            {
+                                                "_method_":"LiveConnect",
+                                                "action":"4",
+                                                "msgtype":"10",
+                                                "pkuid":""+pkuid,
+                                                "pkpull":""+LiveConnect_pull[pkuid],
+                                                "uid":""+socket.uid,
+                                                "uname":""+socket.nicename
+                                            }
+                                        ],
+                                        "retcode":"000000",
+                                        "retmsg":"OK"
+                                    };
+                            // console.log(data_obj);
+                            process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                            /* 对方房间 */
+                            var data_obj_pk={
+                                        "msg":[
+                                            {
+                                                "_method_":"LiveConnect",
+                                                "action":"4",
+                                                "msgtype":"10",
+                                                "pkuid":""+socket.uid,
+                                                "pkpull":""+LiveConnect_pull[socket.uid],
+                                                "uid":""+socket.uid,
+                                                "uname":""+socket.nicename
+                                            }
+                                        ],
+                                        "retcode":"000000",
+                                        "retmsg":"OK"
+                                    };
+                            // console.log(data_obj_pk);
+                            process_msg(io,pkuid,JSON.stringify(data_obj_pk));
+                            
+                        }else if(action=='5'){ //主播和主播断开连麦
+                            /* 清除连麦信息 */
+                            //console.log('endLiveConnect--action--5');
+                            endLiveConnect(io,socket.uid);
+                        }else{
+                            var socket_pkuid=sockets[pkuid];
+                            if(socket_pkuid){
+                                socket_pkuid.emit('broadcastingListen',[data_str]);
+                            }
+                            
+                        }
+	                    break;
+			    	}
+					case 'LivePK':{//主播PK
+						console.log("----------------主播PK------------"+data_str);
+					
+                        if(socket.roomnum != socket.uid){
+                            //非主播不能操作
+                            return !1;
+                        }
+                        var uid=msg['uid'];
+                        var pkuid=msg['pkuid'];
+                        //1:发起连麦;2;接受连麦;3:拒绝连麦;4:连麦成功通知;5.手动断开连麦;7:对方正忙碌 8:对方无响应; 9:PK结果
+                        if(action=='1'){
+                            console.log('发起PK');
+                            console.log(FormatNowDate());
+                            console.log(socket.uid+'---'+pkuid);
+                        }
+                        if(action=='2'){
+                            /* 更新PK状态 */
+                            console.log('LivePK');
+                            console.log(socket.uid);
+                            console.log(pkuid);
+                            console.log('开始PK');
+                            console.log(FormatNowDate());
+                            console.log(socket.uid+'---'+pkuid);
+                            var sign_data={uid:socket.uid,pkuid:pkuid};
+                            var sign=setSign(sign_data);
+                            request(config['WEBADDRESS']+"?service=Livepk.setPK&uid="+socket.uid + "&pkuid=" + pkuid+ "&sign=" +sign,function(error, response, body){
+                                if(error) return;
+                                // console.log('setPK');
+                                // console.log(body);
+                                var res = evalJson(body);
+                                if( response.statusCode == 200 && res.data.code == 0){
+                                    
+                                    var info = res.data.info[0];
+                                    // console.log('info');
+                                    // console.log(info);
+                                    /* 发送连麦成功信息 */
+                                    /* 当前房间 */
+                                    var data_obj={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"LivePK",
+                                                        "action":"4",
+                                                        "msgtype":"10",
+                                                        "pkuid":""+pkuid,
+                                                        "uid":""+socket.uid,
+                                                        "uname":""+socket.nicename
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+                                    
+                                    process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                                    /* 对方房间 */
+                                    var data_obj_pk={
+                                                "msg":[
+                                                    {
+                                                        "_method_":"LivePK",
+                                                        "action":"4",
+                                                        "msgtype":"10",
+                                                        "pkuid":""+socket.uid,
+                                                        "uid":""+socket.uid,
+                                                        "uname":""+socket.nicename
+                                                    }
+                                                ],
+                                                "retcode":"000000",
+                                                "retmsg":"OK"
+                                            };
+                                    process_msg(io,pkuid,JSON.stringify(data_obj_pk));
+                                    
+                                    setTimeout(function() {//定时发送结果
+                                        // console.log('计时器');
+                                        // console.log(FormatNowDate());
+                                        // console.log('uid---'+socket.uid);
+                                        endLivePk(io,socket.uid,0,info['addtime']);
+                                    }, 5*60*1000);
+                                }
+
+                            });
+                        }else if(action=='5'){
+                            /* 清除PK信息 */
+                            // console.log('endLivePk --action--5');
+                            // console.log(FormatNowDate());
+                            endLivePk(io,socket.uid,1,0);
+                        }else{
+                            var socket_pkuid=sockets[pkuid];
+                            if(socket_pkuid){
+                                socket_pkuid.emit('broadcastingListen',[data_str]);
+                            }
+                            //process_msg(io,pkuid,data_str);
+                        }
+	                    break;
+			    	}
+					
+			    	
+                    case 'goodsLiveShow' :{//商品在直播间展示/不展示
+                        process_msg(io,socket.roomnum,data_str);
+                        break;
+                    }
+                    
+			    	case 'SystemNot':{//系统通知
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+			    	case 'requestFans':{ //暂时不用
+							request(config['WEBADDRESS']+"?service=Live.getZombie&stream=" + socket.stream+"&uid=" + socket.uid,function(error, response, body){
+								if(error) return;
+								var res = evalJson(body);
+								if( response.statusCode == 200 && res.data.code == 0){
+									var data_str2="{\"msg\":[{\"_method_\":\"requestFans\",\"action\":\"3\",\"ct\": "+ body + ",\"msgtype\":\"0\"}],\"retcode\":\"000000\",\"retmsg\":\"OK\"}";
+									process_msg(io,socket.roomnum,data_str2);
+								}
+							});
+			    	}
+					
+					case 'SystemWarning':{//警告通知
+						process_msg(io,socket.roomnum,data_str);
+			    		break;
+			    	}
+						
+			    }
+		    }
+		    
+	});
+	
+	
+	/*封禁通知*/
+	socket.on('LiveBanadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"stopLive",
+						"action":"1",
+						"uid":"0",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+    	}
+    });
+	
+	/*警告通知*/
+	socket.on('warningadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"SystemWarning",
+						"action":"1",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+    	}
+    });
+	
+	/*关播通知*/
+	socket.on('superadminaction',function(data){
+
+		//console.log(data['token']);
+		//console.log(config['TOKEN']);
+		
+    	if(data['token'] == config['TOKEN']){
+			var data_obj={
+				"retmsg":"ok",
+				"retcode":"000000",
+				"msg":[
+					{
+						"msgtype":"1",
+						"_method_":"stopLive",
+						"action":"1",
+						"uid":"0",
+						"ct":''+ data['content'],
+					}
+				]
+			};
+			process_msg(io,data['roomnum'],JSON.stringify(data_obj));
+			
+			
+            /* io.sockets.in(data['roomnum']).emit("broadcastingListen", ['stopplay']); */
+    	}
+    });
+	
+	/* 系统信息 */
+	socket.on('systemadmin',function(data){
+    	if(data['token'] == config['TOKEN']){
+            var data_obj={
+                            "msg":[
+                                {
+                                    "_method_":"SystemNot",
+                                    "action":"1",
+                                    "ct":''+ data.content,
+                                    "msgtype":"4"
+                                }
+                            ],
+                            "retcode":"000000",
+                            "retmsg":"OK"
+                        };
+    		io.emit('broadcastingListen',[JSON.stringify(data_obj)]);
+    	}
+    });
+	
+    //资源释放
+	socket.on('disconnect', function() { 
+			/* numscount--; 
+            if(numscount<0){
+				numscount=0;
+			}   */
+          			
+			if(socket.roomnum ==null || socket.token==null || socket.uid <=0){
+				return !1;
+			}
+				
+			d.run(function() {
+				
+				/* 用户连麦 */
+				clientRedis.hget('ShowVideo',socket.roomnum,function(error,res){
+                    if(error){
+                        return !1;
+                    }
+                    if(!res){
+                        return !1;
+                    }
+                    var res_j=JSON.parse(res);
+                    
+                    if( socket.uid == res_j['uid'] || socket.uid == socket.roomnum ){
+                        clientRedis.hdel('ShowVideo',socket.roomnum);
+                        var data_obj={
+                                        "msg":[
+                                            {
+                                                "_method_":"ConnectVideo",
+                                                "action":"5",
+                                                "msgtype":"10",
+                                                "uid":""+socket.uid,
+                                                "uname":""+socket.nicename
+                                            }
+                                        ],
+                                        "retcode":"000000",
+                                        "retmsg":"OK"
+                                    };
+                        process_msg(io,socket.roomnum,JSON.stringify(data_obj));									
+                    }	
+					 
+				});
+				
+				
+				if(socket.roomnum==socket.uid){
+					//console.log("主播socket断开");
+					/* 主播 */ 
+					if(socket.reusing==0){
+						//console.log("请求关播接口");
+						//console.log(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream);
+						request(config['WEBADDRESS']+"?service=Live.stopRoom&uid="+socket.uid + "&token=" + socket.token+ "&type=1&stream=" + socket.stream,function(error, response, body){
+							//console.log("error:"+error);
+                            var data_obj={
+                                        "retmsg":"ok",
+                                        "retcode":"000000",
+                                        "msg":[
+                                            {
+                                                "msgtype":"1",
+                                                "_method_":"StartEndLive",
+                                                "action":"18",
+                                                "ct":"直播关闭"
+                                            }
+                                        ]
+                                    };
+                            process_msg(io,socket.roomnum,JSON.stringify(data_obj));
+                            // console.log('关播');
+                            // console.log(FormatNowDate());
+                            // console.log('uid---'+socket.uid);
+                        });
+                        endLiveConnect(io,socket.uid);
+					}
+                    
+                    
+                    
+				}else{
+					/* 观众 */
+                    clientRedis.zrem('user_'+socket.stream,socket.uid,function(error,res){
+						if(error) return;
+						if(res){
+							
+							//用于每日任务--用户观看直播时长统计
+							request(config['WEBADDRESS']+"?service=Live.signOutWatchLive&uid="+socket.uid + "&token=" + socket.token,function(error, response, body){});
+							
+							var data_obj={
+                                            "msg":[
+                                                {
+                                                    "_method_":"disconnect",
+                                                    "action":"1",
+                                                    "ct":{
+                                                        "id":''+socket.uid,
+                                                        "user_nickname":''+socket.nicename,
+                                                        "avatar":socket.avatar
+                                                    },
+                                                    "msgtype":"0",
+                                                    "uid":''+socket.uid,
+                                                    "uname":socket.nicename
+                                                }
+                                            ],
+                                            "retcode":"000000",
+                                            "retmsg":"OK"
+                                        };
+                            //console.log(JSON.stringify(data_obj));
+							process_msg(io,socket.roomnum,JSON.stringify(data_obj));	
+						}
+						
+					});
+					
+				}
+				//console.log(socket.roomnum+"==="+socket.token+"===="+socket.uid+"======"+socket.stream);
+				
+				socket.leave(socket.roomnum);
+				delete io.sockets.sockets[socket.id];
+				sockets[socket.uid] = null;
+				delete sockets[socket.uid];
+
+			});
+	});
+
+});
+
+function sendSystemMsg(socket,msg){
+    var data_obj={
+                    "msg":[
+                        {
+                            "_method_":"SystemNot",
+                            "action":"1",
+                            "ct":""+ msg,
+                            "msgtype":"4"
+                        }
+                    ],
+                    "retcode":"000000",
+                    "retmsg":"OK"
+                };
+	socket.emit('broadcastingListen',[JSON.stringify(data_obj)]);
+						
+}
+
+function evalJson(data){
+	return eval("("+data+")");
+}
+
+function process_msg(io,roomnum,data){
+	if(!chat_history[roomnum]){
+		chat_history[roomnum]=[];
+	}
+	chat_history[roomnum].push(data);
+	chat_interval[roomnum] || (chat_interval[roomnum]=setInterval(function(){
+		if(chat_history[roomnum].length>0){
+			send_msg(io,roomnum);
+		}else{
+			clearInterval(chat_interval[roomnum]);
+			chat_interval[roomnum]=null;
+		}
+	},200));
+}
+
+function send_msg(io,roomnum){
+	var data=chat_history[roomnum].splice(0,chat_history[roomnum].length);
+    io.sockets.in(roomnum).emit("broadcastingListen", data);
+}
+
+
+/* 主播连麦结束处理 */
+function endLiveConnect(io,uid){
+    
+    //console.log('结束连麦');
+    //console.log(FormatNowDate());
+    //console.log('uid--'+uid);
+    clientRedis.hget('LiveConnect',uid,function(error,res){
+        //console.log('res');
+        if(error){
+            return !1;
+        }
+        if(!res){
+            return !1;
+        }
+        var pkuid=res;
+        //console.log('pkuid---'+pkuid);
+        /* 更新数据库 */
+        var sign_data={uid:uid,pkuid:pkuid,type:0};
+        var sign=setSign(sign_data);
+        request(config['WEBADDRESS']+"?service=Livepk.changeLive&uid="+uid + "&pkuid=" + pkuid+ "&type=0&sign=" +sign,function(error, response, body){
+            if(error) return;
+           
+            var res = evalJson(body);
+            if( response.statusCode == 200 && res.data.code == 0){
+                var data_obj={
+                        "msg":[
+                            {
+                                "_method_":"LiveConnect",
+                                "action":"5",
+                                "msgtype":"10",
+                                "uid":""+uid,
+                                "uname":""
+                            }
+                        ],
+                        "retcode":"000000",
+                        "retmsg":"OK"
+                    };
+        
+                process_msg(io,uid,JSON.stringify(data_obj));
+                process_msg(io,pkuid,JSON.stringify(data_obj)); 
+                
+            }        
+            
+        });	
+         
+    });
+        
+}
+
+/* PK结束处理 */
+function endLivePk(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.endPK&uid="+uid + "&addtime=" + addtime+ "&type=" + type+ "&sign=" +sign,function(error, response, body){
+        if(error) return;
+        // console.log('endPK');
+        // console.log(body);
+        var res = evalJson(body);
+        if( response.statusCode == 200 && res.data.code == 0){
+            var info=res.data.info[0];
+            var data_obj={
+                    "msg":[
+                        {
+                            "_method_":"LivePK",
+                            "action":"9",
+                            "msgtype":"10",
+                            "win_uid":""+info['win_uid'],
+                            "uid":""+uid,
+                            "uname":""
+                        }
+                    ],
+                    "retcode":"000000",
+                    "retmsg":"OK"
+                };
+    
+            process_msg(io,uid,JSON.stringify(data_obj));
+            process_msg(io,info['pkuid'],JSON.stringify(data_obj));
+            
+        }
+        
+    });
+    
+}
+
+
+
+//时间格式化
+function FormatNowDate(){
+	var mDate = new Date();
+	var Y = mDate.getFullYear();
+	var M = mDate.getMonth()+1;
+	var D = mDate.getDate();
+	var H = mDate.getHours();
+	var i = mDate.getMinutes();
+	var s = mDate.getSeconds();
+	return Y +'-' + M + '-' + D + ' ' + H + ':' + i + ':' + s;
+}
+
+/* sign加密 */
+function setSign(obj) {//排序的函数
+    var str='';
+    var newkey = Object.keys(obj).sort();
+//先用Object内置类的keys方法获取要排序对象的属性名,再利用Array原型上的sort方法对获取的属性名进行排序,newkey是一个数组
+    var newObj = {};//创建一个新的对象,用于存放排好序的键值对
+    for (var i = 0; i < newkey.length; i++) {//遍历newkey数组
+        //newObj[newkey[i]] = obj[newkey[i]];//向新创建的对象中按照排好的顺序依次增加键值对
+        str+=newkey[i]+'='+obj[newkey[i]]+'&';
+    }
+    str+=config['sign_key'];
+    
+    var sign=md5(str);
+    return sign;
+}

+ 0 - 0
phalapi/runtime/log/202507/20250716.log


+ 75 - 0
phalapi/runtime/stopRoom_2025-07-15.txt

@@ -73,3 +73,78 @@
 2025-07-15 14:40:33 提交参数信息 isexist:null
 2025-07-15 14:40:33 提交参数信息 checkToken:0
 2025-07-15 14:40:33 提交参数信息 结束:
+2025-07-15 16:09:51 提交参数信息 开始:
+2025-07-15 16:09:51 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752566678","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:09:51 提交参数信息 isexist:null
+2025-07-15 16:09:51 提交参数信息 checkToken:0
+2025-07-15 16:09:51 提交参数信息 结束:
+2025-07-15 16:11:02 提交参数信息 开始:
+2025-07-15 16:11:02 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752566688","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:11:02 提交参数信息 isexist:null
+2025-07-15 16:11:02 提交参数信息 checkToken:0
+2025-07-15 16:11:02 提交参数信息 结束:
+2025-07-15 16:17:19 提交参数信息 开始:
+2025-07-15 16:17:19 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752567151","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:17:19 提交参数信息 isexist:null
+2025-07-15 16:17:19 提交参数信息 checkToken:0
+2025-07-15 16:17:19 提交参数信息 结束:
+2025-07-15 16:19:00 提交参数信息 开始:
+2025-07-15 16:19:00 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752567521","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:19:00 提交参数信息 isexist:null
+2025-07-15 16:19:00 提交参数信息 checkToken:0
+2025-07-15 16:19:01 提交参数信息 结束:
+2025-07-15 16:21:18 提交参数信息 开始:
+2025-07-15 16:21:18 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752567479","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:21:18 提交参数信息 isexist:null
+2025-07-15 16:21:18 提交参数信息 checkToken:0
+2025-07-15 16:21:18 提交参数信息 结束:
+2025-07-15 16:22:20 提交参数信息 开始:
+2025-07-15 16:22:20 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752567691","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:22:20 提交参数信息 isexist:null
+2025-07-15 16:22:20 提交参数信息 checkToken:0
+2025-07-15 16:22:20 提交参数信息 结束:
+2025-07-15 16:26:31 提交参数信息 开始:
+2025-07-15 16:26:31 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752567835","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:26:31 提交参数信息 isexist:null
+2025-07-15 16:26:31 提交参数信息 checkToken:0
+2025-07-15 16:26:31 提交参数信息 结束:
+2025-07-15 16:29:15 提交参数信息 开始:
+2025-07-15 16:29:15 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752567822","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:29:15 提交参数信息 isexist:null
+2025-07-15 16:29:15 提交参数信息 checkToken:0
+2025-07-15 16:29:15 提交参数信息 结束:
+2025-07-15 16:33:01 提交参数信息 开始:
+2025-07-15 16:33:01 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752568370","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:33:01 提交参数信息 isexist:null
+2025-07-15 16:33:01 提交参数信息 checkToken:0
+2025-07-15 16:33:01 提交参数信息 结束:
+2025-07-15 16:33:06 提交参数信息 开始:
+2025-07-15 16:33:06 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752568304","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:33:06 提交参数信息 isexist:null
+2025-07-15 16:33:06 提交参数信息 checkToken:0
+2025-07-15 16:33:06 提交参数信息 结束:
+2025-07-15 16:54:00 提交参数信息 开始:
+2025-07-15 16:54:00 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752569594","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 16:54:00 提交参数信息 isexist:null
+2025-07-15 16:54:00 提交参数信息 checkToken:0
+2025-07-15 16:54:00 提交参数信息 结束:
+2025-07-15 16:56:03 提交参数信息 开始:
+2025-07-15 16:56:03 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752569689","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:56:03 提交参数信息 isexist:null
+2025-07-15 16:56:03 提交参数信息 checkToken:0
+2025-07-15 16:56:03 提交参数信息 结束:
+2025-07-15 16:57:40 提交参数信息 开始:
+2025-07-15 16:57:40 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752569846","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 16:57:40 提交参数信息 isexist:null
+2025-07-15 16:57:40 提交参数信息 checkToken:0
+2025-07-15 16:57:40 提交参数信息 结束:
+2025-07-15 17:21:59 提交参数信息 开始:
+2025-07-15 17:21:59 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752569980","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-15 17:21:59 提交参数信息 isexist:null
+2025-07-15 17:21:59 提交参数信息 checkToken:0
+2025-07-15 17:21:59 提交参数信息 结束:
+2025-07-15 17:30:58 提交参数信息 开始:
+2025-07-15 17:30:58 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752571647","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-15 17:30:58 提交参数信息 isexist:null
+2025-07-15 17:30:58 提交参数信息 checkToken:0
+2025-07-15 17:30:58 提交参数信息 结束:

+ 45 - 0
phalapi/runtime/stopRoom_2025-07-16.txt

@@ -0,0 +1,45 @@
+2025-07-16 09:59:34 提交参数信息 开始:
+2025-07-16 09:59:34 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752631051","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-16 09:59:34 提交参数信息 isexist:null
+2025-07-16 09:59:34 提交参数信息 checkToken:0
+2025-07-16 09:59:34 提交参数信息 结束:
+2025-07-16 10:40:16 提交参数信息 开始:
+2025-07-16 10:40:16 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752633001","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-16 10:40:16 提交参数信息 isexist:null
+2025-07-16 10:40:16 提交参数信息 checkToken:0
+2025-07-16 10:40:16 提交参数信息 结束:
+2025-07-16 10:58:19 提交参数信息 开始:
+2025-07-16 10:58:19 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752634656","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-16 10:58:19 提交参数信息 isexist:null
+2025-07-16 10:58:19 提交参数信息 checkToken:0
+2025-07-16 10:58:19 提交参数信息 结束:
+2025-07-16 11:13:44 提交参数信息 开始:
+2025-07-16 11:13:44 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752635532","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-16 11:13:44 提交参数信息 isexist:null
+2025-07-16 11:13:44 提交参数信息 checkToken:0
+2025-07-16 11:13:44 提交参数信息 结束:
+2025-07-16 11:13:47 提交参数信息 开始:
+2025-07-16 11:13:47 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752635567","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-16 11:13:47 提交参数信息 isexist:null
+2025-07-16 11:13:47 提交参数信息 checkToken:0
+2025-07-16 11:13:47 提交参数信息 结束:
+2025-07-16 11:41:51 提交参数信息 开始:
+2025-07-16 11:41:51 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22591_1752636910","uid":"22591","token":"190e3eb6b3559769e812bd2f796b89e9"}
+2025-07-16 11:41:51 提交参数信息 isexist:null
+2025-07-16 11:41:51 提交参数信息 checkToken:0
+2025-07-16 11:41:51 提交参数信息 结束:
+2025-07-16 14:12:42 提交参数信息 开始:
+2025-07-16 14:12:42 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752646146","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-16 14:12:42 提交参数信息 isexist:null
+2025-07-16 14:12:42 提交参数信息 checkToken:0
+2025-07-16 14:12:42 提交参数信息 结束:
+2025-07-16 14:17:40 提交参数信息 开始:
+2025-07-16 14:17:40 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752646381","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-16 14:17:40 提交参数信息 isexist:null
+2025-07-16 14:17:40 提交参数信息 checkToken:0
+2025-07-16 14:17:40 提交参数信息 结束:
+2025-07-16 14:34:43 提交参数信息 开始:
+2025-07-16 14:34:43 提交参数信息 _REQUEST:{"service":"Live.stopRoom","lang":"zh-cn","stream":"22620_1752646673","uid":"22620","token":"8a9d537e77f8b1f32c957d9b077f5ece"}
+2025-07-16 14:34:43 提交参数信息 isexist:null
+2025-07-16 14:34:43 提交参数信息 checkToken:0
+2025-07-16 14:34:43 提交参数信息 结束:

+ 1 - 0
public/.well-known/acme-challenge/Btg2CSHB06AvPbPoF3OuN5S1KZBXneSKWw_DGwNrjV8

@@ -0,0 +1 @@
+Btg2CSHB06AvPbPoF3OuN5S1KZBXneSKWw_DGwNrjV8.NN-fEYtXpvEU82-WARQJ3FG-nOEKmS2FiSBPGHz1TmQ

+ 141 - 1
public/changeLive.txt

@@ -7,4 +7,144 @@
 2025-07-15 02:22:45~$stream:"22620_1752558267"
 2025-07-15 02:22:45~$uid:"22620"
 2025-07-15 02:22:45~$stream:"22620_1752558267"
-2025-07-15 02:22:45~$info:{"uid":22620,"showid":1752558267,"islive":0,"starttime":1752558267,"title":"","province":"山东省","city":"烟台","stream":"22620_1752558267","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752558267.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752558267,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 02:22:45~$info:{"uid":22620,"showid":1752558267,"islive":0,"starttime":1752558267,"title":"","province":"山东省","city":"烟台","stream":"22620_1752558267","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752558267.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752558267,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:04:39~$stream:"22591_1752566678"
+2025-07-15 04:04:39~$uid:"22591"
+2025-07-15 04:04:39~$stream:"22591_1752566678"
+2025-07-15 04:04:39~$info:{"uid":22591,"showid":1752566678,"islive":0,"starttime":1752566678,"title":"","province":"山东省","city":"烟台","stream":"22591_1752566678","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752566678.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752566678,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-15 04:04:49~$stream:"22620_1752566688"
+2025-07-15 04:04:49~$uid:"22620"
+2025-07-15 04:04:49~$stream:"22620_1752566688"
+2025-07-15 04:04:49~$info:{"uid":22620,"showid":1752566688,"islive":0,"starttime":1752566688,"title":"","province":"山东省","city":"烟台","stream":"22620_1752566688","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752566688.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752566688,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:12:32~$stream:"22620_1752567151"
+2025-07-15 04:12:32~$uid:"22620"
+2025-07-15 04:12:32~$stream:"22620_1752567151"
+2025-07-15 04:12:32~$info:{"uid":22620,"showid":1752567151,"islive":0,"starttime":1752567151,"title":"","province":"山东省","city":"烟台","stream":"22620_1752567151","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752567151.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567151,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:17:59~$stream:"22591_1752567479"
+2025-07-15 04:17:59~$uid:"22591"
+2025-07-15 04:17:59~$stream:"22591_1752567479"
+2025-07-15 04:17:59~$info:{"uid":22591,"showid":1752567479,"islive":0,"starttime":1752567479,"title":"","province":"山东省","city":"烟台","stream":"22591_1752567479","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752567479.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567479,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:18:42~$stream:"22620_1752567521"
+2025-07-15 04:18:42~$uid:"22620"
+2025-07-15 04:18:42~$stream:"22620_1752567521"
+2025-07-15 04:18:42~$info:{"uid":22620,"showid":1752567521,"islive":0,"starttime":1752567521,"title":"","province":"山东省","city":"烟台","stream":"22620_1752567521","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752567521.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567521,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:21:31~$stream:"22591_1752567691"
+2025-07-15 04:21:31~$uid:"22591"
+2025-07-15 04:21:31~$stream:"22591_1752567691"
+2025-07-15 04:21:31~$info:{"uid":22591,"showid":1752567691,"islive":0,"starttime":1752567691,"title":"","province":"山东省","city":"烟台","stream":"22591_1752567691","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752567691.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567691,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:23:42~$stream:"22620_1752567822"
+2025-07-15 04:23:42~$uid:"22620"
+2025-07-15 04:23:42~$stream:"22620_1752567822"
+2025-07-15 04:23:42~$info:{"uid":22620,"showid":1752567822,"islive":0,"starttime":1752567822,"title":"","province":"山东省","city":"烟台","stream":"22620_1752567822","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752567822.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567822,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:23:55~$stream:"22591_1752567835"
+2025-07-15 04:23:55~$uid:"22591"
+2025-07-15 04:23:55~$stream:"22591_1752567835"
+2025-07-15 04:23:55~$info:{"uid":22591,"showid":1752567835,"islive":0,"starttime":1752567835,"title":"","province":"山东省","city":"烟台","stream":"22591_1752567835","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752567835.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752567835,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-15 04:31:44~$stream:"22620_1752568304"
+2025-07-15 04:31:44~$uid:"22620"
+2025-07-15 04:31:44~$stream:"22620_1752568304"
+2025-07-15 04:31:44~$info:{"uid":22620,"showid":1752568304,"islive":0,"starttime":1752568304,"title":"","province":"山东省","city":"烟台","stream":"22620_1752568304","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752568304.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752568304,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:32:51~$stream:"22591_1752568370"
+2025-07-15 04:32:51~$uid:"22591"
+2025-07-15 04:32:51~$stream:"22591_1752568370"
+2025-07-15 04:32:51~$info:{"uid":22591,"showid":1752568370,"islive":0,"starttime":1752568370,"title":"","province":"山东省","city":"烟台","stream":"22591_1752568370","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752568370.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752568370,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:35:22~$stream:"22620_1752568394"
+2025-07-15 04:35:22~$uid:"22620"
+2025-07-15 04:35:22~$stream:"22620_1752568394"
+2025-07-15 04:35:22~$info:{"uid":22620,"showid":1752568394,"islive":0,"starttime":1752568394,"title":"","province":"山东省","city":"烟台","stream":"22620_1752568394","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752568394.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752568394,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:53:14~$stream:"22591_1752569594"
+2025-07-15 04:53:14~$uid:"22591"
+2025-07-15 04:53:14~$stream:"22591_1752569594"
+2025-07-15 04:53:14~$info:{"uid":22591,"showid":1752569594,"islive":0,"starttime":1752569594,"title":"","province":"山东省","city":"烟台","stream":"22591_1752569594","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752569594.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752569594,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-15 04:54:50~$stream:"22620_1752569689"
+2025-07-15 04:54:50~$uid:"22620"
+2025-07-15 04:54:50~$stream:"22620_1752569689"
+2025-07-15 04:54:50~$info:{"uid":22620,"showid":1752569689,"islive":0,"starttime":1752569689,"title":"","province":"山东省","city":"烟台","stream":"22620_1752569689","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752569689.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752569689,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 04:57:26~$stream:"22620_1752569846"
+2025-07-15 04:57:26~$uid:"22620"
+2025-07-15 04:57:26~$stream:"22620_1752569846"
+2025-07-15 04:57:26~$info:{"uid":22620,"showid":1752569846,"islive":0,"starttime":1752569846,"title":"","province":"山东省","city":"烟台","stream":"22620_1752569846","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752569846.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752569846,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 05:21:10~$stream:"22620_1752569980"
+2025-07-15 05:21:10~$uid:"22620"
+2025-07-15 05:21:10~$stream:"22620_1752569980"
+2025-07-15 05:21:10~$info:{"uid":22620,"showid":1752569980,"islive":0,"starttime":1752569980,"title":"","province":"山东省","city":"烟台","stream":"22620_1752569980","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752569980.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752569980,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-15 05:27:28~$stream:"22591_1752571647"
+2025-07-15 05:27:28~$uid:"22591"
+2025-07-15 05:27:28~$stream:"22591_1752571647"
+2025-07-15 05:27:28~$info:{"uid":22591,"showid":1752571647,"islive":0,"starttime":1752571647,"title":"","province":"山东省","city":"烟台","stream":"22591_1752571647","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752571647.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752571647,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-16 09:57:31~$stream:"22591_1752631051"
+2025-07-16 09:57:31~$uid:"22591"
+2025-07-16 09:57:31~$stream:"22591_1752631051"
+2025-07-16 09:57:31~$info:{"uid":22591,"showid":1752631051,"islive":0,"starttime":1752631051,"title":"","province":"山东省","city":"烟台","stream":"22591_1752631051","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752631051.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752631051,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-16 10:30:01~$stream:"22591_1752633001"
+2025-07-16 10:30:01~$uid:"22591"
+2025-07-16 10:30:01~$stream:"22591_1752633001"
+2025-07-16 10:30:01~$info:{"uid":22591,"showid":1752633001,"islive":0,"starttime":1752633001,"title":"","province":"山东省","city":"烟台","stream":"22591_1752633001","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752633001.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752633001,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-16 10:57:36~$stream:"22591_1752634656"
+2025-07-16 10:57:36~$uid:"22591"
+2025-07-16 10:57:36~$stream:"22591_1752634656"
+2025-07-16 10:57:36~$info:{"uid":22591,"showid":1752634656,"islive":0,"starttime":1752634656,"title":"","province":"山东省","city":"烟台","stream":"22591_1752634656","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752634656.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752634656,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 10:59:01~$stream:"22620_1752634741"
+2025-07-16 10:59:01~$uid:"22620"
+2025-07-16 10:59:01~$stream:"22620_1752634741"
+2025-07-16 10:59:01~$info:{"uid":22620,"showid":1752634741,"islive":0,"starttime":1752634741,"title":"","province":"山东省","city":"烟台","stream":"22620_1752634741","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752634741.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752634741,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 10:59:22~$stream:"22591_1752634762"
+2025-07-16 10:59:22~$uid:"22591"
+2025-07-16 10:59:22~$stream:"22591_1752634762"
+2025-07-16 10:59:22~$info:{"uid":22591,"showid":1752634762,"islive":0,"starttime":1752634762,"title":"","province":"山东省","city":"烟台","stream":"22591_1752634762","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752634762.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752634762,"liveclassid":8,"exposure":0,"room_id":""}
+2025-07-16 11:05:41~$stream:"22620_1752635140"
+2025-07-16 11:05:41~$uid:"22620"
+2025-07-16 11:05:41~$stream:"22620_1752635140"
+2025-07-16 11:05:41~$info:{"uid":22620,"showid":1752635140,"islive":0,"starttime":1752635140,"title":"","province":"山东省","city":"烟台","stream":"22620_1752635140","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752635140.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752635140,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 11:12:12~$stream:"22620_1752635532"
+2025-07-16 11:12:12~$uid:"22620"
+2025-07-16 11:12:12~$stream:"22620_1752635532"
+2025-07-16 11:12:12~$info:{"uid":22620,"showid":1752635532,"islive":0,"starttime":1752635532,"title":"","province":"山东省","city":"烟台","stream":"22620_1752635532","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752635532.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752635532,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 11:14:08~$stream:"22620_1752635648"
+2025-07-16 11:14:08~$uid:"22620"
+2025-07-16 11:14:08~$stream:"22620_1752635648"
+2025-07-16 11:14:08~$info:{"uid":22620,"showid":1752635648,"islive":0,"starttime":1752635648,"title":"","province":"山东省","city":"烟台","stream":"22620_1752635648","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752635648.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752635648,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 11:15:19~$stream:"22591_1752635719"
+2025-07-16 11:15:19~$uid:"22591"
+2025-07-16 11:15:19~$stream:"22591_1752635719"
+2025-07-16 11:15:19~$info:{"uid":22591,"showid":1752635719,"islive":0,"starttime":1752635719,"title":"","province":"山东省","city":"烟台","stream":"22591_1752635719","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752635719.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":1,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752635719,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 11:34:41~$stream:"22620_1752636881"
+2025-07-16 11:34:41~$uid:"22620"
+2025-07-16 11:34:41~$stream:"22620_1752636881"
+2025-07-16 11:34:41~$info:{"uid":22620,"showid":1752636881,"islive":0,"starttime":1752636881,"title":"","province":"山东省","city":"烟台","stream":"22620_1752636881","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752636881.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752636881,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 11:35:10~$stream:"22591_1752636910"
+2025-07-16 11:35:10~$uid:"22591"
+2025-07-16 11:35:10~$stream:"22591_1752636910"
+2025-07-16 11:35:10~$info:{"uid":22591,"showid":1752636910,"islive":0,"starttime":1752636910,"title":"","province":"山东省","city":"烟台","stream":"22591_1752636910","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752636910.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752636910,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 01:59:00~$stream:"22620_1752645540"
+2025-07-16 01:59:00~$uid:"22620"
+2025-07-16 01:59:00~$stream:"22620_1752645540"
+2025-07-16 01:59:00~$info:{"uid":22620,"showid":1752645540,"islive":0,"starttime":1752645540,"title":"","province":"山东省","city":"烟台","stream":"22620_1752645540","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752645540.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752645540,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 01:59:35~$stream:"22591_1752645575"
+2025-07-16 01:59:35~$uid:"22591"
+2025-07-16 01:59:35~$stream:"22591_1752645575"
+2025-07-16 01:59:35~$info:{"uid":22591,"showid":1752645575,"islive":0,"starttime":1752645575,"title":"","province":"山东省","city":"烟台","stream":"22591_1752645575","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752645575.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752645575,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:09:06~$stream:"22620_1752646146"
+2025-07-16 02:09:06~$uid:"22620"
+2025-07-16 02:09:06~$stream:"22620_1752646146"
+2025-07-16 02:09:06~$info:{"uid":22620,"showid":1752646146,"islive":0,"starttime":1752646146,"title":"","province":"山东省","city":"烟台","stream":"22620_1752646146","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752646146.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752646146,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:13:01~$stream:"22620_1752646381"
+2025-07-16 02:13:01~$uid:"22620"
+2025-07-16 02:13:01~$stream:"22620_1752646381"
+2025-07-16 02:13:01~$info:{"uid":22620,"showid":1752646381,"islive":0,"starttime":1752646381,"title":"","province":"山东省","city":"烟台","stream":"22620_1752646381","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752646381.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752646381,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:17:53~$stream:"22620_1752646673"
+2025-07-16 02:17:53~$uid:"22620"
+2025-07-16 02:17:53~$stream:"22620_1752646673"
+2025-07-16 02:17:53~$info:{"uid":22620,"showid":1752646673,"islive":0,"starttime":1752646673,"title":"","province":"山东省","city":"烟台","stream":"22620_1752646673","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752646673.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752646673,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:34:59~$stream:"22620_1752647698"
+2025-07-16 02:34:59~$uid:"22620"
+2025-07-16 02:34:59~$stream:"22620_1752647698"
+2025-07-16 02:34:59~$info:{"uid":22620,"showid":1752647698,"islive":0,"starttime":1752647698,"title":"","province":"山东省","city":"烟台","stream":"22620_1752647698","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752647698.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752647698,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:50:06~$stream:"22591_1752648605"
+2025-07-16 02:50:06~$uid:"22591"
+2025-07-16 02:50:06~$stream:"22591_1752648605"
+2025-07-16 02:50:06~$info:{"uid":22591,"showid":1752648605,"islive":0,"starttime":1752648605,"title":"","province":"山东省","city":"烟台","stream":"22591_1752648605","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22591_1752648605.flv","isvideo":0,"deviceinfo":"HUAWEI_NOH-AN01_12_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752648605,"liveclassid":3,"exposure":0,"room_id":""}
+2025-07-16 02:53:30~$stream:"22620_1752648809"
+2025-07-16 02:53:30~$uid:"22620"
+2025-07-16 02:53:30~$stream:"22620_1752648809"
+2025-07-16 02:53:30~$info:{"uid":22620,"showid":1752648809,"islive":0,"starttime":1752648809,"title":"","province":"山东省","city":"烟台","stream":"22620_1752648809","thumb":"","pull":"https:\/\/ujing.yunchao2u.com\/live\/22620_1752648809.flv","isvideo":0,"deviceinfo":"HUAWEI_SEA-AL10_10_8GB_WIFI","isoff":0,"offtime":0,"isshop":0,"ismic":0,"pkuid":0,"pkstream":"","isrecommend":0,"recommend_time":1752648809,"liveclassid":3,"exposure":0,"room_id":""}