由 Joachim Bengtsson [email protected],2011-12-28
我喜欢从 plist/json-safe 字典构建简单的网络协议,并将它们以 json 格式通过网络传输。易于原型设计,易于调试。给 TCAHP 一个 AsyncSocket,它就会为你做这些,外加对请求-响应和任意 NSData 附件的支持。
我的示例项目有 200 多行,这几乎是一种耻辱,也是一种侮辱。我希望能够减少使用 TCAHP 的冗余和模板代码,而不会使其变得笨重。至少,我建议您使用 SPLowVerbosity。
下面是使用 TCAHP 发送更新服务器 MOTD 请求的例子
[_proto requestHash:$dict(
@"command", @"setMessage", // the command is 'setMessage'
@"contents", msg // Send 'msg' as the new message to set.
) response:^(NSDictionary *response) {
// The server has replied.
if([[response objectForKey:@"success"] boolValue])
NSLog(@"Successfully updated message!");
else
NSLog(@"Couldn't set message, because %@", [response objectForKey:@"reason"]);
}];
接收端
-(void)request:(TCAsyncHashProtocol*)proto setMessage:(NSDictionary*)hash responder:(TCAsyncHashProtocolResponseCallback)respond;
{
NSString *newMessage = [hash objectForKey:@"contents"];
if([newMessage rangeOfString:@"noob"].location != NSNotFound)
respond($dict(
@"success", (id)kCFBooleanFalse,
@"reason", @"you should be kind!"
));
else {
_message = newMessage;
respond($dict(
@"success", (id)kCFBooleanTrue
));
}
}
(注意我添加的最新魔法,其中委托方法的选择器基于消息中 'command' 键的值创建。我非常喜欢它。)
如您所见,生成的协议类型非常弱。理论上,这意味着你将输入误别字,而你会不明白为什么你的网络似乎有问题;但实际上,我从未遇到过这个问题。