AgentLink IM 的 Rust SDK,提供 HTTP 和 MQTT 协议支持。
- 🔌 HTTP Client: RESTful API 完整支持
- 📡 MQTT Client: 实时消息推送
- 🔒 TLS 支持: 内置 TLS(开发环境信任自签名证书)
- 🔄 自动重连: MQTT 断线自动重连
- 📦 零依赖: 纯 Rust 实现,无外部系统依赖
[dependencies]
agentlink-sdk = { git = "https://github.com/your-repo/agentlink-sdk", branch = "main" }
use agentlink_sdk::{AgentLinkClient, ClientConfig};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
// 创建客户端
let client = AgentLinkClient::new(ClientConfig::default());
// 一键登录并自动连接 MQTT、启动事件循环
let response = client.login("user@example.com", "123456").await?;
println!("登录成功: {}", response.user.nickname);
// 获取会话列表
let conversations = client.conversations()
.get_conversations(&response.token)
.await?;
println!("会话数量: {}", conversations.conversations.len());
Ok(())
}use agentlink_sdk::ClientConfig;
let config = ClientConfig {
api_url: "https://api.agentlink.im/api/v1".to_string(),
mqtt_broker_url: "mqtts://mqtt.agentlink.im:8883".to_string(),
token: None,
user_id: None,
};
let client = AgentLinkClient::new(config);use agentlink_sdk::{
AgentLinkClient, ClientConfig, ServerEvent,
MessageReceivedData, MessageDeliveredData, MessageReadData,
FriendRequestReceivedData, FriendRequestAcceptedData,
EVENT_MESSAGE_RECEIVED, EVENT_MESSAGE_DELIVERED, EVENT_MESSAGE_READ,
EVENT_FRIEND_REQUEST_RECEIVED, EVENT_FRIEND_REQUEST_ACCEPTED,
};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let client = AgentLinkClient::new(ClientConfig::default());
// ⭐ 直接在 client 上注册事件回调(简化 API)
client.on(EVENT_MESSAGE_RECEIVED, |event: ServerEvent<MessageReceivedData>| async move {
println!("收到新消息: {:?}", event.data.content);
}).await;
client.on(EVENT_MESSAGE_DELIVERED, |event: ServerEvent<MessageDeliveredData>| async move {
println!("消息已送达: {}", event.data.message_id);
}).await;
client.on(EVENT_FRIEND_REQUEST_RECEIVED, |event: ServerEvent<FriendRequestReceivedData>| async move {
println!("收到好友请求: 来自 {}", event.data.from_user_id);
}).await;
// 登录并自动启动事件循环
let response = client.login("user@example.com", "123456").await?;
println!("登录成功: {}", response.user.nickname);
// 保持程序运行
tokio::signal::ctrl_c().await?;
Ok(())
}use agentlink_sdk::{
// 事件常量
EVENT_MESSAGE_RECEIVED, EVENT_MESSAGE_DELIVERED, EVENT_MESSAGE_READ,
EVENT_MESSAGE_DELETED, EVENT_UNREAD_COUNT_UPDATED, EVENT_OFFLINE_MESSAGES_BATCH,
EVENT_FRIEND_REQUEST_RECEIVED, EVENT_FRIEND_REQUEST_ACCEPTED,
EVENT_FRIEND_REQUEST_REJECTED, EVENT_FRIEND_ADDED, EVENT_FRIEND_REMOVED,
EVENT_USER_PRESENCE_CHANGED, EVENT_USER_BLOCKED, EVENT_USER_UNBLOCKED,
EVENT_SYNC_CONVERSATION_LIST, EVENT_SYNC_FRIEND_LIST, EVENT_SYNC_MESSAGE_HISTORY,
EVENT_SYNC_CONVERSATION_UPDATE, EVENT_SYNC_FRIEND_UPDATE,
EVENT_SYNC_FRIEND_REQUEST_LIST, EVENT_SYNC_COMPLETE,
// 事件数据类型
ServerEvent,
MessageReceivedData, MessageDeliveredData, MessageReadData,
MessageDeletedData, UnreadCountUpdatedData, OfflineMessagesBatchData,
FriendRequestReceivedData, FriendRequestAcceptedData, FriendRequestRejectedData,
FriendAddedData, FriendRemovedData,
UserPresenceChangedData, UserBlockedData, UserUnblockedData,
SyncConversationListData, SyncFriendListData, SyncMessageHistoryData,
SyncConversationUpdateData, SyncFriendUpdateData, SyncFriendRequestListData,
SyncCompleteData,
};| Service | 说明 | 方法 |
|---|---|---|
AuthService |
认证相关 | login_with_email_code, send_verification_code, check_linkid, set_linkid |
UserService |
用户相关 | get_me, search_users, get_privacy_settings, update_privacy_settings |
MessageService |
消息相关 | get_conversation_messages, send_message, delete_message, trigger_sync |
ConversationService |
会话相关 | get_conversations, create_conversation, join_conversation, leave_conversation |
FriendService |
好友相关 | get_friends, send_friend_request, respond_friend_request, delete_friend |
use agentlink_sdk::error::SdkError;
match result {
Ok(data) => println!("成功: {:?}", data),
Err(SdkError::Http(msg)) => println!("HTTP 错误: {}", msg),
Err(SdkError::Mqtt(msg)) => println!("MQTT 错误: {}", msg),
Err(SdkError::Auth(msg)) => println!("认证错误: {}", msg),
Err(e) => println!("其他错误: {}", e),
}cd agentlink-sdk/rust
cargo buildcargo testcargo doc --openSDK 提供了 WebAssembly 版本,可在浏览器或 Node.js 中使用。
cd wasm
./build.sh<script type="module">
import init, { JsHttpClient, JsMqttClient, getVersion } from './pkg/agentlink_wasm.js';
await init();
console.log('SDK Version:', getVersion());
// HTTP Client
const httpClient = new JsHttpClient('https://api.example.com');
httpClient.setAuthToken('your-token');
const user = await httpClient.get('/users/me');
// MQTT Client
const mqttClient = new JsMqttClient();
mqttClient.onEvent((event) => console.log('Event:', event));
await mqttClient.connect('wss://mqtt.example.com/mqtt', 'client-1');
await mqttClient.subscribe('chat/room/1', 1);
</script>更多详情见 wasm/README.md。
.
├── Cargo.toml
├── core/ # 核心库(平台无关)
│ └── src/
│ ├── lib.rs
│ ├── error.rs
│ ├── http/
│ ├── mqtt/
│ ├── protocols/
│ └── services/
├── native/ # Native 平台实现
│ └── src/
├── wasm/ # WASM 平台实现
│ ├── Cargo.toml
│ ├── src/
│ │ ├── lib.rs
│ │ ├── bindings.rs # JS 绑定
│ │ ├── http.rs # Fetch API 实现
│ │ └── mqtt.rs # WebSocket 实现
│ ├── build.sh
│ └── README.md
└── README.md
tokio: 异步运行时reqwest: HTTP 客户端rumqttc: MQTT 客户端serde: 序列化chrono: 时间处理uuid: UUID 生成
wasm-bindgen: WASM/JS 绑定web-sys: Web API 绑定js-sys: JavaScript 全局绑定wasm-bindgen-futures: 异步支持serde-wasm-bindgen: 序列化支持
MIT License