mirror of
https://github.com/logos-messaging/nim-chat-poc.git
synced 2026-01-02 14:13:10 +00:00
69 lines
2.0 KiB
Nim
69 lines
2.0 KiB
Nim
|
|
import chronicles
|
||
|
|
import chronos
|
||
|
|
|
||
|
|
import chat_sdk
|
||
|
|
import content_types
|
||
|
|
|
||
|
|
|
||
|
|
proc getContent(content: ContentFrame): string =
|
||
|
|
# Skip type checks and assume its a TextFrame
|
||
|
|
let m = decode(content.bytes, TextFrame).valueOr:
|
||
|
|
raise newException(ValueError, fmt"Badly formed Content")
|
||
|
|
return fmt"{m}"
|
||
|
|
|
||
|
|
proc main() {.async.} =
|
||
|
|
|
||
|
|
# Create Configurations
|
||
|
|
var cfg_saro = DefaultConfig()
|
||
|
|
var cfg_raya = DefaultConfig()
|
||
|
|
|
||
|
|
# Cross pollinate Peers - No Waku discovery is used in this example
|
||
|
|
cfg_saro.staticPeers.add(cfg_raya.getMultiAddr())
|
||
|
|
cfg_raya.staticPeers.add(cfg_saro.getMultiAddr())
|
||
|
|
|
||
|
|
# Create Clients
|
||
|
|
var saro = newClient(cfg_saro, createIdentity("Saro"))
|
||
|
|
var raya = newClient(cfg_raya, createIdentity("Raya"))
|
||
|
|
|
||
|
|
# Wire Callbacks
|
||
|
|
saro.onNewMessage(proc(convo: Conversation, msg: ContentFrame) {.async.} =
|
||
|
|
echo " Saro <------ :: " & getContent(msg)
|
||
|
|
await sleepAsync(10000)
|
||
|
|
discard await convo.sendMessage(saro.ds, initTextFrame("Ping").toContentFrame())
|
||
|
|
)
|
||
|
|
|
||
|
|
saro.onDeliveryAck(proc(convo: Conversation, msgId: string) {.async.} =
|
||
|
|
echo " Saro -- Read Receipt for " & msgId
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
|
||
|
|
raya.onNewMessage(proc(convo: Conversation, msg: ContentFrame) {.async.} =
|
||
|
|
echo " ------> Raya :: " & getContent(msg)
|
||
|
|
await sleepAsync(10000)
|
||
|
|
sdiscard await convo.sendMessage(raya.ds, initTextFrame("Pong").toContentFrame())
|
||
|
|
)
|
||
|
|
|
||
|
|
raya.onNewConversation(proc(convo: Conversation) {.async.} =
|
||
|
|
echo " ------> Raya :: New Conversation: " & convo.id()
|
||
|
|
discard await convo.sendMessage(raya.ds, initTextFrame("Hello").toContentFrame())
|
||
|
|
)
|
||
|
|
raya.onDeliveryAck(proc(convo: Conversation, msgId: string) {.async.} =
|
||
|
|
echo " raya -- Read Receipt for " & msgId
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
await saro.start()
|
||
|
|
await raya.start()
|
||
|
|
|
||
|
|
await sleepAsync(5000)
|
||
|
|
|
||
|
|
# Perform OOB Introduction: Raya -> Saro
|
||
|
|
let raya_bundle = raya.createIntroBundle()
|
||
|
|
discard await saro.newPrivateConversation(raya_bundle)
|
||
|
|
|
||
|
|
await sleepAsync(10000) # Run for some time
|
||
|
|
|
||
|
|
saro.stop()
|
||
|
|
raya.stop()
|