Blue框架的基本教程三:服务端调用客户端的方法
Posted 弃天笑
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Blue框架的基本教程三:服务端调用客户端的方法相关的知识,希望对你有一定的参考价值。
如蒙转载,请注明文章出处:
www.sujun.org 作者:
弃天笑
接下来是服务器呼叫客户端的方法,这里也只是简单的作个例子,具体的可以看源代码
下面是服务器呼叫客户端的代码StartAndEnd.java
这里是响应客户端连接的方法类,为了方便起见,我把服务器调用客户端的代码写在客户端连接成功后呼叫
,详细的看callClient(Client client)方法
import java.util.Map;
import java.util.HashMap;
import org.sujun.blue.remote.Client;
import org.sujun.blue.remote.FlashObject;
import org.sujun.blue.global.Application;
import org.sujun.blue.response.StartEndListenterAdapter;
public class StartAndEnd extends StartEndListenterAdapter
{
public void onConnet(Client client,String name, String pass)
{
if(name.equals("soda") && pass.equals("admin123"))
{
Application.setStart(true,"SUCCESS");
callClient(client);
}
else
{
Application.setStart(false,"FAIL");
}
System.out.println("用户连接程序完毕");
}
private void callClient(Client client)
{
System.out.println("开始呼叫客户端的方法");
//在这里呼叫客户端的一个对象的方法
FlashObject flash = new FlashObject();
//传送object过去
flash.put("info", "该用户登陆成功");
flash.put("msg", "测试数据");
flash.put("num", 15);
//传字符串数组过去
String[] strs = new String[3];
strs[0] = "my";
strs[1] = "name";
strs[2] = "soda";
//传数字数组过去
double[] number = new double[3];
number[0] = 11;
number[1] = 15;
number[2] = 21;
//传map过去
Map map = new HashMap();
Map map1 = new HashMap();
map1.put("name", "soda");
map1.put("age", "24");
Map map2 = new HashMap();
map2.put("address", "广州");
map2.put("main", "sujun10@21cn.com");
map.put("map1", map1);
map.put("map2", map2);
//呼叫客户端的默认方法
//client.call("clientMethod");
//呼叫客户端指定对象的一个方法
client.call("client","clientMethod");
client.setParam("soda");
client.setParam(23);
client.setParam(flash);
//client.setParam(strs);
client.setParam(number);
client.setParam(map);
client.send();
}
public void thunderboltCut(Client client)
{
System.out.println("服务器意外关闭时调用!没有参数的");
}
}
在callClient(Client client)方法了,主要是传送了Object,String,double,double[],Map等基本数据类型,同时在flash也是可以把这些数据类型传过来的。各为读者可以自己去验证一下
//呼叫客户端的默认方法
//client.call("clientMethod");
//呼叫客户端指定对象的一个方法
client.call("client","clientMethod");
client.setParam("soda");
client.setParam(23);
client.setParam(flash);
//client.setParam(strs);
client.setParam(number);
client.setParam(map);
client.send();
这里是发送参数的代码
client.call("client","clientMethod");这里指定了服务端的对象以及方法
client.setParam();方法是发送一个参数,顺序和参数类型必须和客户端方法一直
参数传完后,必须调用client.send();方法,才算完成远程调用
细心人会发现这个代码,//client.call("clientMethod");
恩,如果没有指定客户端的对象,默认是调用客户端连接类的方法的,即是ConnectJavaServer.as这个类的实例
下面是客户端的主代码///
//支持自定义对象的方法被服务器调用
var clientObj:Object = new Object();
//注册到网络连接类里去
netConnect.addServerCall("client",clientObj);
clientObj.clientMethod = function(name:String,age:Number,obj:Object,arry:Array,map:Map)
{
trace("自定义对象");
trace("name:" + name);
trace("age:" + age);
trace("arry:" + arry);
trace("obj[info]:" + obj["info"]);
trace("obj[msg]:" + obj["msg"]);
trace("obj[num]:" + obj["num"]);
trace("map:" + map);
var map2:Map = map.get("map2");
trace("map2:" + map2);
trace("map2.get(address):" + map2.get("address"));
trace("map2.get(main):" + map2.get("main"));
}
运行输出结果是:
自定义对象
name:soda
age:23
arry:11,15,21
obj[info]:该用户登陆成功
obj[msg]:测试数据
obj[num]:15
map:[object Object]
map2:[object Object]
map2.get(address):广州
map2.get(main):sujun10@21cn.com
连接成功
num:100
源代码下载: 代码
接下来是服务器呼叫客户端的方法,这里也只是简单的作个例子,具体的可以看源代码
下面是服务器呼叫客户端的代码StartAndEnd.java
这里是响应客户端连接的方法类,为了方便起见,我把服务器调用客户端的代码写在客户端连接成功后呼叫
,详细的看callClient(Client client)方法
import java.util.Map;
import java.util.HashMap;
import org.sujun.blue.remote.Client;
import org.sujun.blue.remote.FlashObject;
import org.sujun.blue.global.Application;
import org.sujun.blue.response.StartEndListenterAdapter;
public class StartAndEnd extends StartEndListenterAdapter
{
public void onConnet(Client client,String name, String pass)
{
if(name.equals("soda") && pass.equals("admin123"))
{
Application.setStart(true,"SUCCESS");
callClient(client);
}
else
{
Application.setStart(false,"FAIL");
}
System.out.println("用户连接程序完毕");
}
private void callClient(Client client)
{
System.out.println("开始呼叫客户端的方法");
//在这里呼叫客户端的一个对象的方法
FlashObject flash = new FlashObject();
//传送object过去
flash.put("info", "该用户登陆成功");
flash.put("msg", "测试数据");
flash.put("num", 15);
//传字符串数组过去
String[] strs = new String[3];
strs[0] = "my";
strs[1] = "name";
strs[2] = "soda";
//传数字数组过去
double[] number = new double[3];
number[0] = 11;
number[1] = 15;
number[2] = 21;
//传map过去
Map map = new HashMap();
Map map1 = new HashMap();
map1.put("name", "soda");
map1.put("age", "24");
Map map2 = new HashMap();
map2.put("address", "广州");
map2.put("main", "sujun10@21cn.com");
map.put("map1", map1);
map.put("map2", map2);
//呼叫客户端的默认方法
//client.call("clientMethod");
//呼叫客户端指定对象的一个方法
client.call("client","clientMethod");
client.setParam("soda");
client.setParam(23);
client.setParam(flash);
//client.setParam(strs);
client.setParam(number);
client.setParam(map);
client.send();
}
public void thunderboltCut(Client client)
{
System.out.println("服务器意外关闭时调用!没有参数的");
}
}
在callClient(Client client)方法了,主要是传送了Object,String,double,double[],Map等基本数据类型,同时在flash也是可以把这些数据类型传过来的。各为读者可以自己去验证一下
//呼叫客户端的默认方法
//client.call("clientMethod");
//呼叫客户端指定对象的一个方法
client.call("client","clientMethod");
client.setParam("soda");
client.setParam(23);
client.setParam(flash);
//client.setParam(strs);
client.setParam(number);
client.setParam(map);
client.send();
这里是发送参数的代码
client.call("client","clientMethod");这里指定了服务端的对象以及方法
client.setParam();方法是发送一个参数,顺序和参数类型必须和客户端方法一直
参数传完后,必须调用client.send();方法,才算完成远程调用
细心人会发现这个代码,//client.call("clientMethod");
恩,如果没有指定客户端的对象,默认是调用客户端连接类的方法的,即是ConnectJavaServer.as这个类的实例
下面是客户端的主代码///
//支持自定义对象的方法被服务器调用
var clientObj:Object = new Object();
//注册到网络连接类里去
netConnect.addServerCall("client",clientObj);
clientObj.clientMethod = function(name:String,age:Number,obj:Object,arry:Array,map:Map)
{
trace("自定义对象");
trace("name:" + name);
trace("age:" + age);
trace("arry:" + arry);
trace("obj[info]:" + obj["info"]);
trace("obj[msg]:" + obj["msg"]);
trace("obj[num]:" + obj["num"]);
trace("map:" + map);
var map2:Map = map.get("map2");
trace("map2:" + map2);
trace("map2.get(address):" + map2.get("address"));
trace("map2.get(main):" + map2.get("main"));
}
运行输出结果是:
自定义对象
name:soda
age:23
arry:11,15,21
obj[info]:该用户登陆成功
obj[msg]:测试数据
obj[num]:15
map:[object Object]
map2:[object Object]
map2.get(address):广州
map2.get(main):sujun10@21cn.com
连接成功
num:100
源代码下载: 代码
以上是关于Blue框架的基本教程三:服务端调用客户端的方法的主要内容,如果未能解决你的问题,请参考以下文章
使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)
axis2的wsdl2java命令可以生成wsdl的服务端和客服端代码,请问各位大牛这个客服端和服务端的有啥区别。