Cloud Service Design Specification

一、目的

Cloud Service程序进行软件结构和接口的设计。

 

二、总体设计

需求(CS的要实现的目标)

实现一个模拟的cloud service(CS)。能够通过Metro Style的客户端(MSC)对服务器上的图片和视频进行上传、下载、删除。同时,CS还能通过WNS notification 推送到MSC中,以便在MSCTileBadgeToast上动态的显示。推送的通知有3level

Simple:通知图片及Video的数量变化

Normal:在简单版基础上,增加通知图片及Video的变化细节:新增、删除的图片/Video

Advanced:在中等版基础上,对于新增的图片,通知thumbnail

 

CS端以Metro UI的方式呈现,将UI最小化后,CS仍会在后台运行。CSMSC间支持多客户端连接。同时支持缓存机制,在CS没有更新时,MSC预览内容将读取前一次请求后保存在本地的缓存内容,而不需要再次访问CS

 

总体结构(CS的结构介绍)

MSC需要先请求WNSchannel以便接收CSnotification推送。

CSMSC间通过socket进行通信,传输的内容封装在预定义的结构体(协议)中。CS端支持多客户端连接,并且一直运行监听线程负责分配新线程满足多客户端连接的请求。当收到一个新的连接请求时,为新的连接分配一个新线程,将连接的上下文传给新线程,之后便继续监听其他的连接。

当一个新线程和MSC建立起连接后,SC端负责解析协议获取数据,比如用户名、密码、请求操作、附加参数等。在解析完协议后,如果是第一次请求,会进行账号验证。如果通过就会进行其他的操作,比如:

PreviewMSC需要浏览CS上的文件。

UploadMSC需要向CS上上传文件。

DeleteMSC需要删除CS上的文件。

DownloadMSC需要下载CS上的文件。

各操作需要的具体参数在下文“协议设计”中会详细介绍。

在完成相应的操作后,CS会发送相应的notificationWNS上。

总体的结构见图2-1

 

2-1 CS-MSC 总体结构图

 

处理流程

下面是几个比较重要的过程和操作的执行过程:

当一个新的client端连接了监听线程后,监听线程会判断是否超过了最大连接数。如果超过了就返回busyERR (定义的宏client端,并断开连接。如果没有超过就分配一个新线程并将socket连接的上下文传递给新线程,这样新的线程就和client端建立的连接,监听线程就继续监听其他的连接请求。具体的流程如图2-2

 

2-2 监听进程流程图

当新的线程和client端建立起了连接后,新线程首先需要解析协议,从传递来的数据中解析出必要的数据。如usernamepasswdactionfilename等。如果client端是首次发送请求,则需要验证账户,如果账户错误,则将错误类型返回给client。验证完账户,线程根据action的值执行相应的操作。再执行完后会发送notificationWNS。具体的流程如图2-3

 

2-3 新线程执行流程图

 

Preview操作:Client请求查看CS上的文件,就会执行preview操作。Preview的操作也会将所有文件名、图片和视频的预览图发送给client。目前打算的方式是将文件的数据保存在一个结构体中,然后传输整个结构体给client,而不是采用循环的方式发送一个个文件。发送完后回给client端一个返回值。具体的流程如图2-4

 

2-4 preview操作流程图

 

Delete操作:client发送delete请求就会执行delete操作,支持采用循环的方式一次删除多个文件。具体的流程如图2-5

 

 

2-5 delete操作流程图

 

 

 

 

 

Upload操作:client发送upload请求就会执行upload操作,支持采用循环的方式一次上传多个文件。具体的流程如图2-6

 

 

2-6 upload操作流程图

 

 

三、软件设计

模块(CS的主要模块)

UI模块

Server模块

 

 

协议设计(CSMSC通信时传输的数据格式)

 

宏定义:

#define OK 0

#define uploadERR 100

#define deleteERR 101

#define downloadERR 102

#define nouserERR 103

#define passwdERR 104

#define busyERR 105

#define fexistERR 106

 

 

枚举:

reqAction:请求操作的枚举

enmu reqAction { 

PREVIEW = 0,

UPLOAD,

DELETE,

// DOWNLOAD

 

结构体:

FileInfo:文件管理结构体会根据此结构的格式在CSMSC端都保存一份FILE.XMLFILE.TXT

struct FileInfo {

int ID; //文件的ID

string FilePath; //文件完整路径

string Name; //文件名

int FileType; //文件类型 PIC=0VID=1DIR=2

}

 

Login: MSCCS发送的登录数据

struct M2C_Login{

string username; //MSC端的username

string password; //MSC端的password

}

 

M2C: MSCCS发送的操作数据

struct M2C_action {

string username; //MSC端的username,每次操作之前还是根据此数据判断一下操作目录有没有错确保安全,同时为项目开始没有login功能时使用。

int action; //MSC端请求的操作,值是枚举类型reqAction中定义的成员

string dirPath; // 请求的完整的操作目录路径,除非赋值,默认值是用户的home目录,类似于linux/home/david这种

int[] ID; //struct FileInfo中的ID相对应,且ID数组中的每一项和另一个成员fileName数组中的文件相对应

string[] fileName; // 请求操作的文件名的数组,用于uploaddeletedownload

int fileNum; //请求操作的文件数,用于uploaddeletedownload;如果和fileName中的string数量不匹配,以fileName为准(可能此参数是鸡肋)

string otherS; //待拓展

int otherI; //待拓展

}

 

M2C: MSCCS发送的upload数据

struct M2C_upload {

string dirPath; // 请求的完整的操作目录路径,除非赋值,默认值是用户的home目录,类似于linux/home/david这种

string[] fileName; // 请求操作的文件名的数组,用于uploaddeletedownload

int fileNum; //请求操作的文件数,用于uploaddeletedownload;如果和fileName中的string数量不匹配,以fileName为准

}

 

C2M: CSMSC发送的数据

struct C2M {

int retVal; //操作或登录的返回值

int fileNum; //得到操作的文件数,如果是preview的话,此值等于文件总数

}

 

previewDataCSMSC发送的preview数据

struct previewData {

string path; //preview的完整路径

int[] ID; //所有preview文件的ID

String[] fileName; //所有preview文件的完整路径名

string[] pic; //包含所有pic数据

string[] videoThumb; //包含所有video预览图数据

string[] dir; //包含的完整目录名

}

 

/* CSWNS发送数据的格式有待参考介绍WNSwebpage */

C2WCSWNS发送的数据

struct C2W {

int newPicNum; //pic个数

int newVideoNum; //video个数

string[] newPicDes; //pic描述

string[] newVideoDes; //video描述

}

 

数据结构设计(软件中可能需要定义的比较重要的数据或结构体)

 

四、接口设计

类(CS中定义的比较重要的类)

类图(以图的方式表现各个类之间的继承关系)

方法描述(类中的方法和参数的介绍)

 

五、讨论的问题(暂列第五点,以后添加至文档中)

 

文件管理:

CS的根目录下,直接存放每个以用户名命名的目录。用户的文件都存放在自己的目录中。目录支持子目录。所以CSMSC之间传输协议中的path都要使用完整路径。

参考了QQ空间和百度空间存放文件的方法,暂时打算使用结构体FileInfoFILE.TXT管理文件,给用户上传的文件按顺序分配ID(不能重复,类似于linux中的FD),并将信息写入FILE.TXT中。在CSMSC传递的协议中包含了IDFileName的数组信息,这样就能保证了CSMSC两端的FILE.TXT保持同步。

 

 

短连接:

使用短连接,完成一次数据交换断开连接。MSC在打开时使用Login结构体想向CS请求登录,登陆上之后以后的再链接并传输请求就不用验证密码。

连接分3action

1.preview: MSCSC使用struct MSC_action发送请求。结构体中包含了请求的完整路径,MSC端根据请求的完整路径名将信息填充至结构体previewData中返回给MSC。待MSC UI显示完毕后返回一个ACKCS接收到ACK后断开连接。

2.uploadMSCSC使用struct MSC_action发送请求。CS解析后返回结构体C2MMSC再向CS使用结构体M2C_upload传递文件信息。并将更新信息写入FILE.TXT

3.deleteMSCSC使用struct MSC_action发送请求。CS解析后根据ID删除文件。

并将文件信息从FILE.TXT中删除。

 

Channel list管理:待填充。

 

posted on 2014-08-15 19:28  mimamo  阅读(238)  评论(0)    收藏  举报

导航