OpenFeint源码学习之Challenge模块

刚开始学习,有问题请指正。

1. Challenge模块

1.1 Challenge模块功能概览

类OFChallengeDefinition为一个挑战信息进行建模,建模的对象为在OpenFeint dashboard建立的一个挑战。该类提供对外提供下载挑战描述、挑战图片的接口。服务类OFChallengeDefinitionService提供提供下载挑战信息的接口,这些接口被类OFChallengeDefinition所使用。OFChallengeDefinitionDelegate定义OFChallengeDefinition相关操作的回调函数。

类OFChallenge为挑战进行建模,提供发送挑战和下载挑战数据的接口。OFChallengeSendDelegate定义OFChallenge相关操作的回调函数。类OFChallenge使用类OFChallengeService提供的服务。

OFChallengeService是全局的单件实例,提供发送挑战、提交挑战结果、下载挑战信息、获取指定用户的挑战、拒绝挑战、把挑战信息写入文件、从文件中读取挑战信息、获取所有历史挑战信息、获取指定应用指定的挑战信息的服务。

类OFChallengeToUser为一个被挑战者收到的挑战信息进行建模。提供从文件中读取挑战信息、把挑战信息保存到文件、发送挑战结果、拒绝一个挑战的接口。OFChallengeToUserDelegate定义OFChallengeToUser相关操作的回调函数。类OFChallengeToUser使用OFChallengeService提供的服务。

OFReceivedChallengeNotificationData为一个通知类,当有挑战信息到来时,该类的接口dataWithChallengeToUser会被调用。

1.2 Challenge模块类关系图

OpenFeint源码学习之Challenge模块

图 1-1 Challenge 模块类结构图

1.3 Challenge模块序列图

序列图消息描述,描述发送一个挑战到挑战结束的过程中,各个类的一些接口的交互方式。主要为了说明各个类的参与过程,只涉及了每个类的部分接口。

OpenFeint源码学习之Challenge模块

图2-1Challenge模块时序图

时序图中涉及方法的概述:

1. 调用OFChallengeDefinition的方法downloadAllChallengeDefinitions获取挑战描述信息。

2.挑战数据返回。

3.挑战数据返回后,OFChallengeDefinitionDelegate的接口didDownloadAllChallengeDefinitions被调用。

4.调用OFChallenge的方法initWithDefinition:challengeDescription:challengeData:创建一个挑战。

5.调用OFChallenge的方法sendChallenge:toUsers:inResponseToChallenge:发送一个挑战。

6.获取挑战的通告。

7.获取通告后,OFReceivedChallengeNotificationData的方法dataWithChallengeToUser会被调用。参数中包含一个OFChallengeToUser的引用。

8.玩家挑战结束后,调用OFChallengeToUser的接口completeWithResult发送挑战结果,OFChallengeToUser使用OFChallengeService提供的服务。

1.4 Challenge模块API接口

1.4.1 OFChallenge

OFChallenge为挑战模块,提供发送和下载挑战数据的接口。

相关类和协议:

OFChallengeService、OFChallengeSendDelegate。

1. 设置OFChallenge相关操作的代理

+(void)setDelegate:(id<OFChallengeSendDelegate>)delegate

2. 初始化一个挑战

- (OFChallenge*)initWithDefinition:

(OFChallengeDefinition*)definition // 挑战的定义

challengeDescription:(NSString*)text// 完成这个挑战,需要完成的事情

challengeData:(NSData*)data// 重新开始这个挑战时需要的数据

3. 显示默认的发送挑战的界面

-(void)displayAndSendChallenge

4. 向一组好友发送挑战

- (OFRequestHandle*)

sendChallenge:(OFChallengeDefinition*)// 挑战描述

toUsers:(NSArray*)userIds // 一组好友ID

inResponseToChallenge:(OFChallenge*)instigatingChallenge

返回值:

发送数据请求的句柄,可以使用这个句柄取消该请求

说明:

5. 下载一个特定的挑战数据

-(OFRequestHandle*)downloadChallengeData

返回值:

发送数据请求的句柄,可以使用这个句柄取消该请求

说明:

Invokes:

- (void)didDownloadChallengeData:(NSData*)dataOFChallenge:(OFChallenge*)challenge on success

-(void)didFailDownloadChallengeDataOFChallenge:

(OFChallenge*)challenge on failure

1.4.2 OFChallengeDefinition

OFChallengeDefinition为一个挑战的进行建模。其为在OpenFeint dashboard建立的一个挑战进行建模。

相关类和协议:

OFChallengeDefinitionService、OFChallengeDefinitionDelegate

1. 设置OFChallengeDefinition相关操作的代理

+ (void)setDelegate:(id<OFChallengeDefinitionDelegate>)delegate

2. 下载所有的挑战定义

+ (OFRequestHandle*)downloadAllChallengeDefinitions

返回值:

发送数据请求的句柄,可以使用这个句柄取消该请求

说明:

Invokes:

- (void)didDownloadAllChallengeDefinitions:

(NSArray*)challengeDefinitionson success and

-(void)didFailDownloadChallengeDefinitions on failure.

3. 下载指定ID的挑战

+(OFRequestHandle*)downloadChallengeDefinitionWithId:

(NSString*)challengeDefinitionId

返回值:

发送数据请求的句柄,可以使用这个句柄取消该请求

说明:

Invokes:

-(void)didDownloadChallengeDefinition:

(OFChallengeDefinition*)challengeDefinitionon success and

-(void)didFailDownloadChallengeDefinition on failure

4. 下载挑战的图片:

- (OFRequestHandle*)getIcon

说明:

Invokes:

- (void)didGetIcon:(UIImage*)imageOFChallengeDefintion:(OFChallengeDefinition*)challengeDef

on success and

-(void)getFailGetIconOFChallengeDefinition:

(OFChallengeDefinition*)challengeDefon failure

1.4.3. OFChallengeToUser

当一个玩家向另一个玩家挑战时,被挑战玩家会收到具体的挑战信息,OFChallengeToUser为这些挑战信息进行建模。

相关类和协议:

OFChallengeService、OFChallengeToUserDelegate

1. 设置OFChallengeToUser操作相关的代理

+ (void)setDelegate:(id<OFChallengeToUserDelegate>)delegate

2. 从文件中读取ChallengeToUser数据

+ (OFChallengeToUser*)readFromFile:(NSString*)fileName

3. 挑战结束后,发送挑战结果

- (OFRequestHandle*)completeWithResult:

(OFChallengeResult)challengeResult

说明:

Invokes:

-(void)didCompleteChallenge:(OFChallengeToUser*)challengeToUser on success and

-(void)didFailCompleteChallenge:

(OFChallengeToUser*)challengeToUseron failure

4. 拒绝一个挑战

- (OFRequestHandle*)reject

说明:

Invokes:

-(void)didRejectChallenge:

(OFChallengeToUser*)challengeToUseronsuccess and

-(void)didFailRejectChallenge:

(OFChallengeToUser*)challengeToUser;on failure

5. 显示完成挑战的OpenFeint的默认的界面

-(void)displayCompletionWithData:

(NSData*)resultData // 针对多次尝试挑战,用于创建一个新的挑战

reChallengeDescription:(NSString*)reChallengeDescription

// 针对多次尝试挑战,用于创建一个新的挑战的描述

6. 把ChallengeToUser数据写入到文件中

-(void)writeToFile:(NSString*)fileName