TCAsyncHashProtocol 1.0.0

TCAsyncHashProtocol 1.0.0

测试已测试
语言语言 Obj-CObjective C
许可 自定义
发布最新发布2014年12月

未申报 维护。



  • Joachim Bengtsson

由 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' 键的值创建。我非常喜欢它。)

如您所见,生成的协议类型非常弱。理论上,这意味着你将输入误别字,而你会不明白为什么你的网络似乎有问题;但实际上,我从未遇到过这个问题。