/MinaForAndroid

基于Mina的android通信框架,通过封装实现RPC通信,功能仍在完善中。

Primary LanguageJava

MinaForAndroid

基于Mina的android通信框架,通过封装实现RPC通信,旨在打造一个如下功能的通信框架:
1.可扩展的RPC通信,客户端和服务端之间可自定义通信接口(在此套用Android框架层的概念叫做service服务)。自定义接口的创建将尽可能简单,以webservice的创建难度为目标。
2.指定设备路径上传文件功能,大文件分流上传。
3.推送功能,实现正常状态下的推送与设备休眠状态下的推送。

功能仍在完善中。当前实现了半自动化的RPC通信,使用方式如下:
1.创建一个Service类,继承MinaRPCService,对该类添加注解,typeName不为空且唯一。

@MinaRPCType(typeName = "test")
public abstract class AbstractTestService extends MinaRPCService{
    @MinaRPCMethod
    public abstract String sayHello(TestBean testBean);
    @MinaRPCMethod
    public abstract int getAge(TestBean testBean);
}

 

2.在客户端和服务端分别创建一个该类的子类,其中服务端需要写真实的处理逻辑,而客户端在所有的方法内部调用senMsg方法。

public class ClientTestService extends AbstractTestService{
@MinaRPCMethod
</span><span style="color: #0000ff;">public</span> <span style="color: #0000ff;">int</span><span style="color: #000000;"> getAge(TestBean testBean) {
    sendMsg(testBean);
    </span><span style="color: #0000ff;">return</span> <span style="color: #800080;">0</span><span style="color: #000000;">;
}
@MinaRPCMethod
</span><span style="color: #0000ff;">public</span><span style="color: #000000;"> String sayHello(TestBean testBean) {
    </span><span style="color: #008000;">//</span><span style="color: #008000;"> TODO Auto-generated method stub</span>

sendMsg(testBean); return null; }

}

 

目前只支持单个参数的方法,后续会改进。 3.服务端在启动后,调用addService加入该服务
//启动mina服务器
        if (MinaServer.serverStart()) {
            MinaServer.addService(new ServerTestService());
            System.err.println("mina start success");
        }else {
            System.err.println("mina start fail");
        }

 

4.客户端在启动连接后,可在任何地方调用
MinaClient.clientStart();
        TestBean testBean=new TestBean();
        testBean.setAge(10);
        testBean.setName("LinJ");
        AbstractTestService testService=new ClientTestService();
    testService.getAge(testBean);
    testService.sayHello(testBean);</span></pre>

 

其他详情可见源码test目录。 注意,客户端是不会有返回值的,因为Mina的发送和返回是异步,在Android端本人通过BroadCast来处理返回信息。 demo简陋,后续更新完善。

2月15更新:先增了一个同步客户端,实现了真正意义上的RPC调用,带有返回值,返回值需要在自定义服务的客户端服务中对返回的Serializable对象强制转换。使用同步客户端将使用短连接方式通信。