创建PubSub实例 - PubSubNew
函数简介
创建 Pub/Sub 实例(客户端或服务端),支持 TCP 与 PRO 两种连接模式。
接口名称
PubSubNew
DLL调用
int64_t PubSubNew(int64_t instance, int32_t type, int32_t connect_type,
char* ip, int32_t port, PubSubCallback on_message);
参数说明
| 参数名 | 类型 | 说明 |
|---|---|---|
| instance | 长整数型 | OLA 实例句柄。 |
| type | 整数型 | 角色类型:1=CLIENT,2=SERVER。 |
| connect_type | 整数型 | 连接类型:1=TCP,2=PRO。 |
| ip | 字符串 | TCP 模式下客户端为目标地址、服务端为监听地址;PRO 模式可传空串。 |
| port | 整数型 | TCP 端口;PRO 模式传 0。 |
| on_message | PubSubCallback | 消息回调,可为 NULL(仅发布不消费)。 |
PubSubCallback 回调函数定义
typedef void(OLA_CALL_TYPE* PubSubCallback)(int64_t client, char* topic,
int64_t data_ptr, int32_t data_len, int32_t is_text);
| 参数名 | 类型 | 说明 |
|---|---|---|
| client | 长整数型 | 客户端句柄。 |
| topic | 字符串 | 主题名。 |
| data_ptr | 长整数型 | 数据指针(仅回调期间有效)。 |
| data_len | 整数型 | 数据长度(字节)。 |
| is_text | 整数型 | 是否文本:1=文本,0=字节流。 |
回调使用说明
data_ptr仅在回调执行期间有效,若需异步处理请先拷贝数据。is_text=1时可按字符串处理,is_text=0时按二进制处理。
示例
void OLA_CALL_TYPE OnPubSubMessage(int64_t client, char* topic,
int64_t data_ptr, int32_t data_len, int32_t is_text) {
if (is_text == 1) {
printf("[PubSub] topic=%s text=%.*s\n", topic, data_len, (char*)data_ptr);
} else {
printf("[PubSub] topic=%s bytes=%d\n", topic, data_len);
}
}
// 服务端
int64_t server = PubSubNew(instance, 2, 1, "0.0.0.0", 18990, OnPubSubMessage);
// 客户端
int64_t client = PubSubNew(instance, 1, 1, "127.0.0.1", 18990, OnPubSubMessage);
返回值
大于 0 为实例句柄,<=0 为错误码。
注意事项
type必须传1/2,connect_type必须传1/2(ABI 固定)。- 创建后可调用
PubSubSub订阅、PubSubPubText/PubSubPubBytes发布。
