一起做网游吧【9】:多服务器支持

       {tcp_closed, Socket} ->
            Player = Client#client.player,
            case Player#player.server_pid of
                none ->
                    ok;
                Pid ->
                    serverstate:call({player_out, Pid})
            end,
            ok;
       

关于服务器端的网页监控,主要的事件处理是用下面的方法进行的:

         function add_tolist(Var)
    {
        //        debug(Ext.get('state'));
        
        //debug("length="  + Var.root.length);
        for (var num = 0; num < Var.root.length; num++) {
            switch(Var.root[num].cmd) {
            case "stop": {
                var childroot = Ext.getCmp('server_state').getRootNode();
                for (var k = 0; k < Var.root[num].value.length; k++) {
                    childroot.eachChild(function(v) {
                        v.findChildBy(function(v1){
                            if (v1 == undefined)
                                return;
                            if (v1.attributes.servername==Var.root[num].value[k].servername
                                && v1.attributes.ip==Var.root[num].value[k].ip
                                && v1.attributes.port==Var.root[num].value[k].port)
                                v1.remove();
                    });
                });
                   
                }
            }
                break;
            case "list":
                server_list.root.appendChild(new Ext.tree.TreeNode(Var.root[num].value));
                break;
            case "state": {
                var state = Ext.getCmp('state');
                if (state != undefined) {
                    var tree = Ext.getCmp('server_state');
                    if (tree == undefined) {
                        tree = set_server_state();
                        var rootnode = new Ext.tree.AsyncTreeNode(
                            {text: 'server state',
                             draggable:false,
//                             iconCls: 'file',
                             children: Var.root[num].value,
                             id:'servers'
                            });
                                                
                        tree.setRootNode(rootnode);
                        state.add(tree);                    
                        state.doLayout();
                    }
                }
                
                var grid = Ext.getCmp('server_state');
                debug(grid);                
                var childroot = grid.getRootNode();
                childroot.eachChild(
                    function(v) {
                            debug(v);
                        v.attributes.users = 100;
                        var box = new Ext.ProgressBar({
                            renderTo:v.attributes.servername,
                            id: v.attributes.servername,
                            value: v.attributes.curuser/v.attributes.maxuser});
                        box.render();
                        if (v.childNodes.length> 0) {
                            v.eachChild(
                                function(v1) {
                                    var box = new Ext.ProgressBar({
                                        renderTo:v1.attributes.ip+"_"+v1.attributes.port,
                                        value: v1.attributes.curuser/v1.attributes.maxuser
                                    });
                                    box.render();
                                });
                        }
                    }
                );
            }
                break;
            }
        }
        SendMessage("server", "cmd=wait", null, add_tolist);
    }
    SendMessage("server", "cmd=function", null, add_tolist);
       

在state命令的情况下,可以看出我使用了笨方法,原因在上一篇已经提到了,这里不多做解释,如果有哪位感兴趣修改,并乐意告诉我修改后的结果的话,本人是非常的欢迎。

发表评论

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据