好吧,当我收到对 HTTP GET 请求的 HTTP 响应时,我有回调。这个回调的原型如下(异步编程,随时可能出现):
// I use Ecore_Con_Url library from EFL framework
Eina_Bool _pt_url_data_cb(void *data, int type, void *event_info)
这个回调可以包含event_info
JSON 格式的数据,也可以是纯数据。这取决于void* data
. 好吧,有两种方法可以避免这种纯粹的设计:
- 使用两个回调。如果我们期望得到纯数据注册回调
_pt_url_pure_cb
,如果我们期望 JSON 格式的数据注册_pt_url_json_cb
。但是缺少这种方法是我们必须在运行时注册/取消注册回调。当我们得到一些带有数据的 HTTP 响应时,它们就会出现,不管它们是哪种形式。我认为我们可能会遇到这个解决方案的大问题。
例如:
// Expect HTTP response as pure data
ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, _pt_url_pure_cb, data);
return;
// _pt_url_pure_cb wasn't yet called
// Expect HTTP response in JSON format
ecore_event_handler_add(ECORE_CON_EVENT_URL_DATA, _pt_url_json_cb, data);
...
// Will be called with pure data
_pt_url_json_cb()
- 第二种方法是以某种方式识别 void* 数据的类型,并根据它将 event_info 解析为纯数据或 JSON 数据。好吧,我怎么能用任何可能的方法做到这一点?
注意:我所说的纯数据和 JSON 数据是什么意思?pure - 类似于二进制文件或任何其他不应解析的文件,只需下载所有字节并将它们保存在文件系统上。JSON 应该被解析并且可以包含这些纯数据的 http 标识符。