Blue框架的基本教程三:服务端调用客户端的方法

来源:互联网 发布:淘宝 Jesus calling 编辑:程序博客网 时间:2024/05/21 17:56
如蒙转载,请注明文章出处: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


源代码下载:代码