服务器改变用户信息后传回值并在客户端进行处理
来源:互联网 发布:莫言最好的作品 知乎 编辑:程序博客网 时间: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('.', '_');
}
}
- 服务器改变用户信息后传回值并在客户端进行处理
- html 获取客户端屏幕分辨率 传回服务端处理
- 服务器控件在客户端触发alert对话框后,根据情况进行回发服务器操作
- socket 客户端如何获取服务器传回来的字符集
- oracle 服务器地址改变,客户端方便处理的的办法
- 利用循环获取AJAX传回的值,并将其显示在弹出框里面
- WPF 如何:在使用演示图板对属性进行动画处理后设置该属性?添加动画后属性不能锁死不能改变?
- svn服务器地址改变后,对于客户端如何更改服务器地址-方法如下
- 调用系统摄像头拍照,对拍照后的图片进行裁剪和压缩处理,并显示在imageview上面
- 让多线程 thread 里的值能传回到主界面中,并显示在一个 ListBox 中
- 使用sftp在客户端与服务器之间进行文件传输
- 使用VLC搭建组播服务器,在客户端进行播放
- 使用AsyncTask请求服务器并在客户端图文并排
- C# 实现弹出选择窗口并传回值
- Remoting异常处理:在客户端获取服务器内部错误
- Remoting异常处理:在客户端获取服务器内部错误
- Remoting异常处理:在客户端获取服务器内部错误
- 无人机项目获取用户信息并进行用户信息修改的angularjs部分
- 英语宾语从句专题复习
- 特使协议简单示例
- 【费用流算法:ZKW】
- 解决HTML内部元素的Mouse事件干扰
- 大家加油
- 服务器改变用户信息后传回值并在客户端进行处理
- 右左法则
- inside C++笔记之默认构造函数
- C#的第一个程序
- Linux文件共享 NFS的配置
- Android面试回顾
- 父子进程的通信(非线程模拟 java)
- 比较DirectX和OpenGL的区别
- 学习中,ORACLE