服务器改变用户信息后传回值并在客户端进行处理

来源:互联网 发布:莫言最好的作品 知乎 编辑:程序博客网 时间:2024/04/29 00:03

案例:点击变大变小的按钮改变当前状态,同步到服务器上。(服务器端改变用户属性)

 

客户端的代码

 

#VRML V2.0 utf8

 

DEF allplay Transform {

       translation       0 0 0

       children[

      

       ]

}

 

 

DEF myBoxUIGUIGroup {

 

       imagesets["datas/imagesets/IPhone.imageset"]

       lookfeels["datas/looknfeel/IPhone.looknfeel"]

       schemes  ["datas/schemes/IPhone.scheme"]

 

       children[

      

              DEF turnBig GUIWindow {

                     type"IPhone/Button"

                     size0.1 0.1

                     position0.8 0.8

                     text"turn big"

              }

              DEF turnSmall GUIWindow {

                     type"IPhone/Button"

                     size0.1 0.1

                     position0.65 0.8

                     text"turn small"

              }    

      

       ]

 

}

 

 

 

DEF systemSystem {}

 

DEF script_easyServerScript {

 

       eventIn    SFBool click_turnBig

       eventIn    SFBool click_turnSmall

 

       fieldSFNode tempSFNode NULL                             #存入节点的变量

       fieldSFNode allplay USE allplay

       fieldSFString Bname ""                                            #存放用户名信息

       fieldSFString Bsize "test_mybox_Tbox_Bsize"    #存放用户大小信息

       fieldSFString Btran "test_mybox_Tbox_Btran"    #存放用户坐标信息

       fieldSFString Bchange "test_mybox_Tbox_Bchange"  #存放用户改变的状态

 

       url   "javascript:

 

       //点击后用户大小信息改变

       functionclick_turnBig(v){    

 

              varusertemp = SFNode.get('userinfo');

              usertemp[Bchange]='big';

 

       }

       functionclick_turnSmall(v){

      

              varusertemp = SFNode.get('userinfo');

              usertemp[Bchange]='small';

      

       }

       //用户信息同步信息时自动调用

       functionlyinuxUserSync(user,fields,timeouts){

              //拿到已经改变的信息

              alert('Box{}===>'+SFNode.get(user['test_mybox_Tbox_Bname']+2));

             

              alert(user['test_mybox_Tbox_Bname']);

              //得到需要改变的信息 

              varchengebox = SFNode.get(user['test_mybox_Tbox_Bname']+2);

             

              chengebox.size[0]= user[Bsize][0];

              chengebox.size[1]= user[Bsize][0];

              chengebox.size[2]= user[Bsize][0];

              alert('改变盒子的大小'+chengebox.size);

       }

       //用户进入空间时调用

       functionlyinuxEnterSpace(user,space,others){

              alert(user.getName());

              alert('user[test_mybox_Tbox_Bname]== '+user['test_mybox_Tbox_Bname']);

              Bname= user['test_mybox_Tbox_Bname'];

              alert('Bname===='+Bname)

                     alert('others======'+others[0]);

                    

                     varmyStr = 'DEF '+user['test_mybox_Tbox_Bname']+1+' Transform{/n'+

                            '/ttranslation '+user['test_mybox_Tbox_Btran']+' /n'+

                     '/tchildren [DEF '+user['test_mybox_Tbox_Bname']+2+' Box{size'+user['test_mybox_Tbox_Bsize']+'}]}/n';

             

              tempSFNode= new SFNode(myStr);

              allplay.children[allplay.children.length]=tempSFNode;

              alert('allplay=========>'+allplay)

                     alert('user=====>'+user);

              if(others!=null){

                     for(vari = 0 ; i<others.length ; i++){

                    

                            createMyBox(others[i]);

                    

                     }

              }

 

       }

       //跟据用户信息创建节点

       functioncreateMyBox(user){

                     alert('user='+user+'user.getName()= '+user.getName());

                     varmyStr = 'DEF '+user['test_mybox_Tbox_Bname']+1+' Transform{/n'+

                            '/ttranslation '+user['test_mybox_Tbox_Btran']+' /n'+

                     '/tchildren [DEF '+user['test_mybox_Tbox_Bname']+2+' Box{size'+user['test_mybox_Tbox_Bsize']+'}]}/n';

                     tempSFNode= new SFNode(myStr);

                 allplay.children[allplay.children.length]=tempSFNode;

      

       }

 

 

              //用户离开房间

              functionlyinuxLeaveSpace(user,space){

                     alert(user+'========离开房间');                    

                     varst_name = user.getName();

                     alert(st_name+'是要删除的节点');

                     allplay.removeChild(SFNode.get(st_name+1));    

              }

 

              //房间信息同步

              functionlyinuxSpaceSync(space,fields){           

                           

              }

              //房间加载错误

              functionlyinuxSpaceError(spaceNam,code){

                     print('lyinuxSpaceSync'+spaceNam+''+ code);

              }

      

       "

}

 

ROUTE turnBig.isClick TOscript_easyServer.click_turnBig

ROUTE turnSmall.isClick      TO script_easyServer.click_turnSmall

#网络同步器

DEF syn1 NetSyncer{

       selfDEF userinfo InfoItem{

              fieldSFString test_mybox_Tbox_Bname ""

              fieldSFString test_mybox_Tbox_Btran ""

              fieldSFString test_mybox_Tbox_Bsize ""

              fieldSFString test_mybox_Tbox_Bchange ""

       }

       scriptUSE script_easyServer

       others[]

       url"lyinux://e2:d@192.168.4.130/test/mybox/Tbox"

}

 

 

服务器代码

 

package test.mybox;

 

import lyinux.net.Request;

import lyinux.repository.SpaceAdapter;

import lyinux.repository.ShadowUser;

import lyinux.util.Base64;

 

import java.util.HashMap;

import java.util.Map.Entry;

 

public class Tbox {

       //存放所有用户信息

       HashMap <String,String>testBox = newHashMap<String,String>();

       //存放用户传过来的表单信息

       ShadowUser shadowUser = null;

       private String userName;

       private String spaceName;

       private String utilStr = "test_mybox_Tbox_";

       private int addself = 0 ;

      

       //用户进入空间时进入此方法      

       public boolean requireEnter(Request r){

              //获取用户名并赋值       

              userName = this.getUserName(r);    

              System.out.println("userName  = "+userName);

              //将用户信息存入列表中

              testBox.put(userName, userName);

              //接收用户传来的表单信息并赋值

              shadowUser = r.getRequestFrom();

              //定义变量记录计算盒子大小(我是跟据当前数量的盒子数加1

              int tempnum = testBox.size()+1;

              //给当前用户信息赋值

              shadowUser.setField(utilStr+"Bsize", tempnum+" "+tempnum+" "+tempnum);

              //定义变量记录计算盒子坐标(我是跟据一个自增量乘3

              int temptran = addself*3;

              //设置用户信息,(对应的客户端的信息已经改变)

              shadowUser.setField(utilStr+"Bname", userName);

              shadowUser.setField(utilStr+"Btran", temptran+" 0 0");

              System.out.println("房间"+spaceName+""+testBox.size()+"个箱子。/n箱子的属性:");

              System.out.println("size:"+shadowUser.getField(utilStr+"Bsize"));

              System.out.println("translation:"+shadowUser.getField(utilStr+"Btran"));

              //定义的自增量

              addself++;

              return true;

             

       }

       //用户离开房间时调用此方法

       public boolean requireLeave(Request r,boolean bfoorece){

              //将离开用户信息从列表中删除

              testBox.remove(this.getUserName(r));

              System.out.println(this.getUserName(r)+"离开了房间,房间还有"+testBox.size()+"箱子。");

              return false;

             

       }

       //用户信息改变调用此方法

       public void synchronization(Request r){

             

              System.out.println("进入用户同步方法");

             

              shadowUser = r.getRequestFrom();

              for(Entry<String, Object>en : shadowUser.getFields().entrySet()){

                    

                     System.out.println(en);

                     System.out.println(en.getKey());

                    

              }

              String name = this.getUserName(r);

              System.out.println(name+"的盒子变化了");

              String currSize[] = shadowUser.getField(utilStr+"Bsize").toString().split(" ");

              String ifChange = shadowUser.getField(utilStr+"Bchange").toString();

                     if(ifChange.endsWith("big")){                         

                            int templ = Integer.parseInt(currSize[0])+1;

                            shadowUser.setField(utilStr+"Bsize", templ+" "+templ+" "+templ);                     

                     }else{

                            int templ = Integer.parseInt(currSize[0]);

                            if(templ != 0){

                                   templ=templ-1;

                            }

                            shadowUser.setField(utilStr+"Bsize", templ+" "+templ+" "+templ);                            

                     }

              System.out.println(this.getUserName(r)+"进入房间的盒子大小:"+shadowUser.getField(utilStr+"Bsize"));

             

       }

       //当空间被调用是调用

       public boolean onSpaceLoad(SpaceAdapter space){

              this.spaceName = this.getSpaceName(space);

              return true;

             

       }

       //空间销毁时调用

       public void onSpaceDestroy(SpaceAdapter space){

             

             

       }

       //自定义获取用户名方法

       public String getUserName(Request r){

 

              String uname =r.getRequestFrom().getUser().getName();

              System.out.println("用户的名称:"+uname);

              uname = new String(Base64.decode(uname));

              System.out.println("用户解码后名称:"+uname);

              return uname;

//          returnr.getRequestFrom().getUser().getName();

             

       }

       //自定义获取房间名信息方法

       public String getSpaceName(SpaceAdapter space){

             

              return space.getName().replace('.', '_');

             

       }

 

}

 

原创粉丝点击