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模块类关系图
图 1-1 Challenge 模块类结构图
1.3 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