首页 nodejs 正文
803

利用nodejs, socket.io实现双屏互动

点击链接进行双屏互动体验
服务端:
var Server = require('socket.io'), io = new Server(9090);
var globals = {
	totalCount: 0,
	links: 0
};
//添加连接监听
io.on('connection', function(socket){
	globals.links++;
	console.log('links:'+globals.links);
	globals.totalCount++;
	console.log('online people:'+globals.totalCount);
	
	io.emit('open',{msg:'在线连接数'+globals.totalCount, sid:socket.id});
	
	//连接成功则执行下面的监听
	socket.on('mobile',function(msgbody){ 
		//console.log('Received message from mobile!',msgbody);
		io.emit('pc', msgbody);
	});
        socket.on('pc',function(msgbody){ 
		//console.log('Received message from client!',msgbody);
		io.emit('mobile', msgbody);
	});
	
	//断开连接callback
	socket.on('disconnect',function(){
		globals.totalCount--;
		globals.links--;
		//console.log('Server has disconnected');
	});
}); 
PC端部分代码:
var socket = io.connect('ws://112.74.104.16:9090'), uid=new Date().getTime()+Math.floor(Math.random()*100), 
    moburl='http://m2p.siguoyi.com/control.html', WSREADY=0, qrcodeUrl = '';

socket.on('open', function(msgbody){
        //提交客户端标识
        if(!WSREADY){
            printer.print('与服务器成功建立链接'); 
            printer.print('客户端标识:'+uid);
            printer.print('生成二维码链接...');
            qrcodeUrl = moburl+'?uid='+uid+'&t='+(new Date()).getTime(); 
            WSREADY=1;
        }
    });

    socket.on('error', function(msgbody){
        printer.error('发生错误:'+msgbody.msg);
    });

    socket.on('disconnect', function(e){
        printer.error('与服务器断开连接!');
    });
    socket.on('pc', function(msgbody){
        //得到手机发过来的消息
        if(msgbody.uid==uid){
            var flashObj=thisMovie("main"), msg = $.trim(msgbody.msg);
            //进行处理
            switch(msg){
                case 'start':
                    printer.print('收到手机端消息,开始进入动画...');
                    flashObj.startGame();
                    break;
                case '1':;
                case '2':;
                case '3':;
                case '4':;
                case '5':;
                case '6':;
                case '7':;
                case '8':;
                case '9':
                    printer.print('收到手机端消息,动画切换'+msg);
                    flashObj.changeFruit(msg);
                    break;
                case 'end':
                    printer.print('收到手机消息,动画结束');
                    flashObj.showResult();
                    //setGameStatus(dualApi.token,'end');
                    break;
                case 'draw':
                    printer.print('收到手机消息,执行模拟抽奖...');
                    flashObj.goDraw();
                    //setGameStatus(dualApi.token,'draw');
                    break;
                case 'reset':
                    printer.print('收到手机消息,重置动画...');
                    var t = 5;
                    window.setInterval((function(t){
                        return function(){
                            printer.print('倒计时'+t+'S');
                            t--;
                            t<0 && reloadPage();
                        };
                    })(t), 1000);
                    break;
                default:
                    if(/^\d+\|\d+$/.test(msg)){
                        var args = msg.split('|'), sid = args[0], fid = args[1];
                        printer.print('收到手机消息,确认选择'+msg);
                        flashObj.selectFruit(sid,fid);
                    }
            }
            
        }
    });
    
function emitToMobile(msg,data){
    socket.emit('pc', {uid:uid, msg:msg, data:data}); 
}

function getQRCodeURL(){
    var s=e=new Date().getTime();
    while(!WSREADY){
        e=new Date().getTime();
        if(e-s>10000){alert('请检查网络是否正常!');return {"code":-1,"message":"网络异常!"};}
    }
    return {"code":1,"message":"message","url":qrcodeUrl};
}

//动画准备完毕,flash过场动画结束后会调用此接口
function gameReady(){
    emitToMobile('ready');
	//setGameStatus(dualApi.token,'ready');
}
function offLineLottery(){
    return {'code':1,'message':'ok','award':0};
}

//向手机端通知抽奖结果
function showDrawResult(obj){
    if(obj.code ==1){
        emitToMobile('award', obj.award);
    }else{
        alert(obj.message);
    }
}

//关闭抽奖结果弹窗时调用此接口用于刷新页面
 function reloadPage(){
    emitToMobile('close');
    window.location.reload();
 }

正在加载评论...