Tests测试 | ✗ |
Lang语言 | SwiftSwift |
许可证 | MIT |
Released最新版本 | 2017年6月 |
SwiftSwift 版本 | 3.0 |
SPM支持 SPM | ✗ |
由 MagistralSwift 维护。
依赖 | |
Alamofire | ~> 4.4.0 |
SwiftMQTT | >= 0 |
SwiftyJSON | ~> 3.1.4 |
Magistral 是一个用 Swift 3 编写的消息库。
特性需求使用
如果你不希望使用上面提到的任何一个依赖管理器,你可以手动将 MagistralSwift 集成到你的项目中。
首先,为了通过 Magistral 网络流式传输数据,你需要创建一个应用。如果你还没有任何应用,你可以轻松地从 客户管理面板(通过起始页面或在 应用管理 部分)创建一个。
另外,你需要创建至少一个主题,你可以从 主题管理 面板中完成这一操作。
Magistral网络接入基于密钥。建立连接需要三个密钥:
您可以在应用程序管理部分找到这两个密钥。在列表中选择您的应用,然后点击应用程序面板标题中的剪贴板图标以复制这些密钥到剪贴板。
秘密密钥 - 您可以在用户管理部分找到用户权限中。只需点击权限列表中的右键即可将链接到用户权限的秘密密钥复制到剪贴板。
要连接到Magistral网络,您需要创建Magistral实例并提供 pub,sub 和 secret 密钥。
import MagistralSwift
let magistral = Magistral(
pubKey: "pub-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
subKey: "sub-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
secretKey: "s-xxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx");
建立连接到网络并能够使用Magistral功能通常需要几毫秒。
因此,为了在连接就绪时获得通知,您需要提供额外的回调参数。它包含连接状态和Magistral实例的引用
import MagistralSwift
let magistral = Magistral(pubKey: {pub_key}, subKey: {sub_key}, secretKey: {secret_key},
connected: { connected, magistral in
...
}
);
要发现所有可用的主题和通道,您可以调用
try magistral.topics { meta, err in
for mi in meta {
let topic = mi.topic()
let channels = mi.channels();
// Do something with topic and channels
}
}
如果您知道主题名称并想查看通道信息
try magistral.topic("topic", callback: { meta, err in
for mi in meta {
let topic = mi.topic()
let channels = mi.channels();
// Do something with topic and channels
}
});
您可以通过这种方式向Magistral发送数据消息
let topic = "topic"
let channel = 0
try magistral.publish(topic, channel: channel, msg: Array("Hello from Swift SDK!".utf8), callback: { ack, error in
print("✔︎ Published to " + ack.topic() + ":" + String(ack.channel()))
});
这是一个订阅和处理传入数据消息示例
let topic = "topic"
let group = "leader"
try magistral.subscribe(topic, group: group, listener: { message, error in
print("✔︎ Message received : " + String(message.channel()) + " : "
+ String(message.index()) + " : " + String(message.timestamp()))
}, callback: { subMeta, error in
if error == nil {
print("✔︎ Subscribed!")
}
}
);
Magistral允许您重放通过某些特定主题和通道发送的数据。这个功能称为历史记录。要查看通道中的最后n条消息
let topic = "topic"
let channel = 0
let count = 100
try magistral.history(topic, channel: channel, count: count, callback: { history, err in
let messages = history.getMessages();
for msg in messages {
print(String(msg.channel()) + " : " + String(msg.index()) + " : " + String(msg.timestamp()))
}
});
您也可以提供时间戳以从这个时间点开始查找消息
let topic = "topic"
let channel = 0
let count = 100
let start = Date().timeIntervalSince1970.subtracting(6 * 60 * 60 * 1000);
try magistral.history(topic, channel: channel, start: UInt64(start), count: count, callback: { history, err in
let messages = history.getMessages();
for msg in messages {
print(String(msg.channel()) + " : " + String(msg.index()) + " : " + String(msg.timestamp()))
}
});
您还可以在某些时间段内获取Magistral的历史数据。您需要指定开始和结束日期
let topic = "topic"
let channel = 0
let start = Date().timeIntervalSince1970.subtracting(6 * 60 * 60 * 1000);
let end = Date().timeIntervalSince1970.subtracting(4 * 60 * 60 * 1000);
try magistral.history(topic, channel: channel, start: UInt64(start), end: UInt64(end), callback: { history, err in
let messages = history.getMessages();
for msg in messages {
print(String(msg.channel()) + " : " + String(msg.index()) + " : " + String(msg.timestamp()))
}
});
这是访问控制功能的一部分。首先,要查看权限的全列表
try magistral.permissions({ meta, err in
for mi in meta {
for ch in mi.channels() {
print(mi.topic() + ":" + String(ch) + " -> (r:w) .. " + String(mi.readable(ch)) + ":" + String(mi.writable(ch)));
}
}
});
或者如果您对获取某些特定主题的权限感兴趣
try magistral.permissions("topic", callback: { meta, err in
for mi in meta {
for ch in mi.channels() {
print(mi.topic() + ":" + String(ch) + " -> (r:w) .. " + String(mi.readable(ch)) + ":" + String(mi.writable(ch)));
}
}
});
您也可以为其他用户授权权限
let user = "user"
let topic = "topic"
let channel = 0
let r = true
let w = true
try magistral.grant(user, topic: topic, read: r, channel: channel, write: w, callback: { meta, error in
if error == nil {
// Permissions has been successfully granted
}
});
您必须具有超级用户权限才能执行此功能。
以类似的方式,您可以撤销用户权限
let user = "user"
let topic = "topic"
let channel = 0
try magistral.revoke(user, topic: topic, channel: channel, callback: { meta, err in
if err == nil {
// Permissions have been succefully revoked
}
})
您必须具有超级用户权限才能执行此功能。
Magistral是在MIT许可下发布的。有关详细信息,请参阅LICENSE。