socket.js 2.2 KB
module.exports=function(server){
	var io=require('socket.io')(server);
	var redis_api=require('./redis_api.js')
	var redis_socket_sub=require('./redis_socket_sub.js')

	var users={};	
	//注册 订阅事件 用switch 分别
	redis_socket_sub.init_sub(function(type,message){		
		if(type==="rmcc"){
			rmcc(JSON.parse(message))// publish "rmcc" '{"type":"1","userId":"1","value":"3"}'
		}			
	});
	function rmcc(message){		
		var t=message.type;
		switch(t){
			case "1":
				msg(message);
				break;
		}
		function msg(message){
			var id=message.userId;
			var value=message.value;
			console.log(message);
			if(id.length>0){
				var user=users[id]
				if(user && user.emit){		
					console.log('userid=',id,'存在')
					user.emit('message',{type:1,action:'message_number',
					value:value})
				}
			}
		}
	}
	io.on('connection',function(socket){	
		console.log('------open')
		//获取请求cookie
		var cookie_string=decodeURIComponent(socket.request.headers.cookie)
		//正则匹配 获取sid
		console.log(socket.request.headers)
		console.log('cookie_string',cookie_string)
		if(!cookie_string){
			//console.log('cookie_string=',cookie_string)
			//socket.kill();
			return ;
		}
		//var s=/connect.sid=([^\.]+)/g.exec(cookie_string);	
		var s=/tkid=([^\;]+)/g.exec(cookie_string);		
		var sid='';
		if(s && s.length>1){
			//sid=s[1].split(':')[1];
			sid=s[1]
			var user;
			console.log('tkid='+sid)
			redis_api.getsid(sid,function(err,res){			
				//if(!err && res){
				if(!err){
					//user=res || {user:{id:1,name:'star'}};	
					user={user:{id:res.userId,name:res.userName}}							
					socket.emit('open',{sid:sid,user:user.user})
					socket.sid=sid;
					socket.user=user.user;
					users[socket.user.id]=socket;	
					redis_api.getmessage(user.user.id,function(err,reply){
						if(!err){
							socket.emit('message',{
								type:1,action:'message_number',
								value:reply})
						}else{
							console.log('err',err)
						}
					})							
				}else{
					console.log('err:',err,'reply:',res)
				}
			})
		}	
		socket.on('disconnect',function(){
			if(socket.user){
				users[socket.user.id]=null;
				console.log('kill',socket.user.id)
				console.log('close')
			}		
			//console.log('user',users)			
		})

		
	})
}