银行项目Android端架构设计文档_第1页
银行项目Android端架构设计文档_第2页
银行项目Android端架构设计文档_第3页
银行项目Android端架构设计文档_第4页
银行项目Android端架构设计文档_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

银行项目Android端架构设计文档

一、通信图

interaction通讯图)

柜外清即是我们的Android机器,它和PC通过串口及U5B连接;

PC端动态库也类似于HttpRequest/Response的方式通讯,即PC端动态库作为Client端,柜

外清作为Server端:

二、PC端动态库与柜外清间的通讯约定

1、多字节采用小端约定;

2、所有字符串统一用UTF-8编码;

三、架构设计图

逻辑上采用分层架构的设计,协议处理和数据通讯层,不需要修改和维护,只需要

关心”请求处理层”及以上的就可以了。

分层结构图)

交互衰双层

UI

控制层

实际处理酒柒橙口

语来处理层

Request/Response

协议处If层

打包.解包/封叠

无覆修改

H标■讯层

COKVHID/ADB

请求处理层:处理数据包的数据细节,调用“控制层”的接口,并生成返回包;

控制层:此层不会涉及数据包且都是单例,向外提供接口调用;

不存在跨层的调用,每层只和相邻的层有联系;

对象交互图如下:

交耳去W后,]

其中RawHandler是对特殊包的处理,主要是为了兼容比较短小的非协议包;

时序图如下:

infraclion时与阳

Co<mnlUhnag»r||ProiocoiMjmagf]|Handto,ManMf||OOwHandtof]|RawHandKr|

四、目录管理

在内置SD卡的根目录新建"Nantian〃文件夹,所有文件都以它为主目录,其下的目

录有如下:

"Picture"Video'\"Audio"."Packaged"Sign","Web'\"Download"

分别存放相应的文件。

五、源码示例

程序的包结构图如下:

/VL-Nantian

」薄src

0t£fcom.nantian.home

t>tbcom.nantian.home.comm

/com.nantian.home.file

>国FileManagerjava

/cfcicom.nantian.home.handler

t>@FileHandler.java

[>@HandlerManagerjava

t>[J]RawHandler.java

由com.nantian.home.password

田com.nantian.home.player

t>tbcom.nantian.home.protocol

田com.nantian.home.setting

由com.nantian.home.sign

>t£tcom.nantian.home.view

由com.nantian.home.web

每个模块都有自己相应的包,我们主要关注的是com.nantian.home.handler包及

其它模块包:

publicclassFileHandlerimplementsPacketHandler{

privateFileManagermanager=FileManager.-instance();

publicFileHandler(){

@Override

publicvoidregister(){

ProtocolManagermanager=ProtocolManager.instance();

manager.register(0x4601,this);

manager.register(0x4602Jthis);

manager.register(0x4603,this);

manager.register(0x4605jthis);

manager.register(0x4606,this);

)

@Override

publicvoidhandle(PacketRequestreq,PacketResponseresp){

byte[]data=req.getData();

byte[]send=null;

switch(req.getld()){

case0x4601:

send=getFileList(data[0]);

break;

case0x4602:

if(!writeFileData(req)){

resp.setErrno((short)0xFF00);

}

break;

case0x4603:

deleteFile(req);

break;

case0x4605:

send=getFilelnfo(req);

if(null==send){

resp.setErrno((short)0xFFFF);

}

break;

case0x4606:

send=readFileData(req);

if(null==send){

resp.setErrno((short)0xFFFF);

}

break;

default:

break;

)

resp.write(send);

)

privatebyte[]getFileList(inttype){

String[]list=manager.getFileList(FolderType.vatues()[type]);

byte[]data=null;

if(null!=list&&list.length>0){

StringBuildersb=newStringBuilder();

for(inti=0;i<list.length;i++){

sb.append(list[i]).append("&");

}

data=PacketResponse.getBytes(sb.substring(0,sb.length()-l));

)

returndata;

}

privatevoiddeleteFile(PacketRequestreq){

byte[]data=req.getData();

Stringname=req.getString(2,data[l]);

if(0xFF==(req.getByte(O))){

if("*.*".equals(name)){

manager.deleteAHFile();

}else{

manager.deleteFile(name);

)

}else{

FolderTypetype=FolderType.vatues()[data[0]];

if("*.*".equals(name)){

manager.deleteAllFile(type);

}else{

manager.deleteFile(type,name);

}

)

)

privatebyte[]getFileinfo(PacketRequestreq){

byte[]data=req.getData();

Stringname=req.getString(2,data[l]);

FolderTypetype=FolderType.vatues()[data[0]];

Fileinfoinfo=manager.getFilelnfo(type,name);

byte[]send=null;

if(null!=info){

send=newbyte[4];

PacketResponse.setInt(send,0,info.size);

)

returnsend;

}

privatebyte[]readFileData(PacketRequestreq){

byte[]data=req.getData();

Stringname=req.getString(2,data[l]);

FolderTypetype=FolderType.vatues()[data[0]];

intpos=2+data[l];

intoffset=req.getlnt(pos);

POS+=4;

intsize=req.getShort(pos);

returnmanager.readFileData(type,name,offset,size);

)

privatebooleanwriteFileData(PacketRequestreq){

byte[]data=req.getData();

Stringname=req.getString(2,data[l]);

FolderTypetype=FolderType.vatues()[data[0]];

intpos=2+data[l];

intprogress=data[pos++];

intindex=data[pos++];

intcount=data[pos++];

intrestBlocks=req.getlnt(pos);

pos+=4;

intoffset=req.getlnt(pos);

pos+=4;

Log.x("FileHandler","progress="+progress+",index="+index

+",count="+count

+",restBlocks="+restBlocks+二offset="+offset);

booleanret=false;

intlength=data.length-pos;

if(length>0){

ret=manager.writeFileData(type,name,offset,

data,pos,length,restBlocks);

)

returnret;

}

)

以文件管理模块为例,首先派生一个PacketHandler类,register。函数中向

ProtocolManager注册关注的消息类型,ProtocolManager把它关注的消息作封装并发送给它;

后面只需要在publicvoidhandle(PacketRequestreq,PacketResponseresp)中处理

接收到的消息就可以了。

FileHandler是协议相关的,因此还需要在com.nantian.home.file包中新建一个

FileManager类来处理协议无关的接口操作:

六、其它非协议包数

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论