improvements and clean-up

This commit is contained in:
kdeme 2019-09-12 19:27:43 +02:00 committed by zah
parent 23baeaa15d
commit e51474f393
4 changed files with 44 additions and 25 deletions

View File

@ -60,8 +60,8 @@ void nimbus_add_peer(const char* nodeId);
*/ */
void nimbus_poll(); void nimbus_poll();
void nimbus_post(const char* channel, const char* payload); void nimbus_post_public(const char* channel, const char* payload);
void nimbus_subscribe(const char* channel, received_msg_handler msg); void nimbus_join_public_chat(const char* channel, received_msg_handler msg);
/* Whisper API */ /* Whisper API */

View File

@ -74,7 +74,6 @@ let whisperKeys = newWhisperKeys()
# TODO: Return filter ID if we ever want to unsubscribe # TODO: Return filter ID if we ever want to unsubscribe
proc subscribeChannel( proc subscribeChannel(
channel: string, handler: proc (msg: ReceivedMessage) {.gcsafe.}) = channel: string, handler: proc (msg: ReceivedMessage) {.gcsafe.}) =
setupForeignThreadGc()
var ctx: HMAC[sha256] var ctx: HMAC[sha256]
var symKey: SymKey var symKey: SymKey
discard ctx.pbkdf2(channel, "", 65356, symKey) discard ctx.pbkdf2(channel, "", 65356, symKey)
@ -87,8 +86,8 @@ proc subscribeChannel(
info "Subscribing to channel", channel, topic, symKey info "Subscribing to channel", channel, topic, symKey
discard node.subscribeFilter(newFilter(symKey = some(symKey), discard node.subscribeFilter(newFilter(symKey = some(symKey),
topics = @[topic]), topics = @[topic]),
handler) handler)
# proc handler(msg: ReceivedMessage) {.gcsafe.} = # proc handler(msg: ReceivedMessage) {.gcsafe.} =
# try: # try:
@ -111,6 +110,7 @@ proc subscribeChannel(
proc nimbus_start(port: uint16 = 30303) {.exportc.} = proc nimbus_start(port: uint16 = 30303) {.exportc.} =
setupForeignThreadGc() setupForeignThreadGc()
let address = Address( let address = Address(
udpPort: port.Port, tcpPort: port.Port, ip: parseIpAddress("0.0.0.0")) udpPort: port.Port, tcpPort: port.Port, ip: parseIpAddress("0.0.0.0"))
@ -135,12 +135,18 @@ proc nimbus_start(port: uint16 = 30303) {.exportc.} =
asyncCheck node.peerPool.connectToNode(whisperNode) asyncCheck node.peerPool.connectToNode(whisperNode)
tearDownForeignThreadGc()
proc nimbus_poll() {.exportc.} = proc nimbus_poll() {.exportc.} =
setupForeignThreadGc() setupForeignThreadGc()
poll() poll()
# TODO: Consider better naming to understand how it relates to public channels etc tearDownForeignThreadGc()
proc nimbus_subscribe(channel: cstring, handler: proc (msg: ptr CReceivedMessage) {.gcsafe, cdecl.}) {.exportc.} =
proc nimbus_join_public_chat(channel: cstring,
handler: proc (msg: ptr CReceivedMessage)
{.gcsafe, cdecl.}) {.exportc.} =
setupForeignThreadGc() setupForeignThreadGc()
if handler.isNil: if handler.isNil:
@ -161,10 +167,13 @@ proc nimbus_subscribe(channel: cstring, handler: proc (msg: ptr CReceivedMessage
subscribeChannel($channel, c_handler) subscribeChannel($channel, c_handler)
tearDownForeignThreadGc()
# TODO: Add signing key as parameter # TODO: Add signing key as parameter
# TODO: How would we do key management? In nimbus (like in rpc) or in status go? # TODO: How would we do key management? In nimbus (like in rpc) or in status go?
proc nimbus_post(channel: cstring, payload: cstring) {.exportc.} = proc nimbus_post_public(channel: cstring, payload: cstring) {.exportc.} =
setupForeignThreadGc() setupForeignThreadGc()
let encPrivateKey = initPrivateKey("5dc5381cae54ba3174dc0d46040fe11614d0cc94d41185922585198b4fcef9d3") let encPrivateKey = initPrivateKey("5dc5381cae54ba3174dc0d46040fe11614d0cc94d41185922585198b4fcef9d3")
var ctx: HMAC[sha256] var ctx: HMAC[sha256]
@ -185,26 +194,39 @@ proc nimbus_post(channel: cstring, payload: cstring) {.exportc.} =
payload = npayload, payload = npayload,
powTarget = 0.002) powTarget = 0.002)
tearDownForeignThreadGc()
proc nimbus_add_peer(nodeId: cstring) {.exportc.} = proc nimbus_add_peer(nodeId: cstring) {.exportc.} =
setupForeignThreadGc() setupForeignThreadGc()
var whisperENode: ENode var whisperENode: ENode
discard initENode($nodeId, whisperENode) discard initENode($nodeId, whisperENode)
var whisperNode = newNode(whisperENode) var whisperNode = newNode(whisperENode)
asyncCheck node.peerPool.connectToNode(whisperNode) asyncCheck node.peerPool.connectToNode(whisperNode)
tearDownForeignThreadGc()
# Whisper API (Similar to Whisper RPC API) # Whisper API (Similar to Whisper RPC API)
# Mostly an example for now, lots of things to fix if continued like this. # Mostly an example for now, lots of things to fix if continued like this.
proc nimbus_string_to_topic(s: cstring): CTopic {.exportc.} = proc nimbus_string_to_topic(s: cstring): CTopic {.exportc.} =
setupForeignThreadGc()
let hash = digest(keccak256, $s) let hash = digest(keccak256, $s)
for i in 0..<4: for i in 0..<4:
result.topic[i] = hash.data[i] result.topic[i] = hash.data[i]
tearDownForeignThreadGc()
proc nimbus_new_keypair(): cstring {.exportc.} = proc nimbus_new_keypair(): cstring {.exportc.} =
setupForeignThreadGc()
result = generateRandomID() result = generateRandomID()
whisperKeys.asymKeys.add($result, newKeyPair()) whisperKeys.asymKeys.add($result, newKeyPair())
tearDownForeignThreadGc()
proc nimbus_add_keypair(key: PrivateKey): cstring = discard proc nimbus_add_keypair(key: PrivateKey): cstring = discard
proc nimbus_delete_keypair(id: cstring) = discard proc nimbus_delete_keypair(id: cstring) = discard
proc nimbus_add_symkey(key: SymKey): cstring = discard proc nimbus_add_symkey(key: SymKey): cstring = discard

View File

@ -24,7 +24,7 @@ int main(int argc, char* argv[]) {
NimMain(); NimMain();
nimbus_start(30303); nimbus_start(30303);
nimbus_subscribe(channel, print_msg); nimbus_join_public_chat(channel, print_msg);
lastmsg = time(NULL); lastmsg = time(NULL);
@ -39,7 +39,7 @@ int main(int argc, char* argv[]) {
msg, lastmsg * 1000 * 100, lastmsg * 1000, channel, msg); msg, lastmsg * 1000 * 100, lastmsg * 1000, channel, msg);
printf("Posting %s\n", buf); printf("Posting %s\n", buf);
nimbus_post(channel, buf); nimbus_post_public(channel, buf);
} }
nimbus_poll(); nimbus_poll();
} }

View File

@ -37,24 +37,21 @@ func receiveHandler(msg *C.received_message) {
func Start() { func Start() {
C.NimMain() C.NimMain()
fmt.Println("[nim-status] Start 1") fmt.Println("[nim-status] Start Nimbus")
fmt.Println(C.nimbus_start(30306)) C.nimbus_start(30306)
C.nimbus_subscribe(C.CString("status-test-go"), (C.received_msg_handler)(unsafe.Pointer(C.receiveHandler_cgo)))
fmt.Println("[nim-status] Start 2")
peer1 := "enode://2d3e27d7846564f9b964308038dfadd4076e4373ac938e020708ad8819fd4fd90e5eb8314140768f782db704cb313b60707b968f8b61108a6fecd705b041746d@192.168.0.33:30303" peer1 := "enode://2d3e27d7846564f9b964308038dfadd4076e4373ac938e020708ad8819fd4fd90e5eb8314140768f782db704cb313b60707b968f8b61108a6fecd705b041746d@192.168.0.33:30303"
peer2 := "enode://4ea35352702027984a13274f241a56a47854a7fd4b3ba674a596cff917d3c825506431cf149f9f2312a293bb7c2b1cca55db742027090916d01529fe0729643b@206.189.243.178:443" peer2 := "enode://4ea35352702027984a13274f241a56a47854a7fd4b3ba674a596cff917d3c825506431cf149f9f2312a293bb7c2b1cca55db742027090916d01529fe0729643b@206.189.243.178:443"
peer3 := "enode://94d2403d0c55b5c1627eb032c4c6ea8d30b523ae84661aafa18c539ce3af3f114a5bfe1a3cde7776988a6ab2906169dca8ce6a79e32d30c445629b24e6f59e0a@0.0.0.0:30303" peer3 := "enode://94d2403d0c55b5c1627eb032c4c6ea8d30b523ae84661aafa18c539ce3af3f114a5bfe1a3cde7776988a6ab2906169dca8ce6a79e32d30c445629b24e6f59e0a@0.0.0.0:30303"
fmt.Println(C.nimbus_add_peer(C.CString(peer1))) C.nimbus_add_peer(C.CString(peer1))
fmt.Println(C.nimbus_add_peer(C.CString(peer2))) C.nimbus_add_peer(C.CString(peer2))
C.nimbus_add_peer(C.CString(peer3))
fmt.Println(C.nimbus_add_peer(C.CString(peer3)))
} }
func ListenAndPost() { func StatusListenAndPost(channel string) {
fmt.Println("[nim-status] ListenAndPost 1") fmt.Println("[nim-status] Status Public ListenAndPost")
C.nimbus_join_public_chat(C.CString(channel),
(C.received_msg_handler)(unsafe.Pointer(C.receiveHandler_cgo)))
i := 0 i := 0
for { for {
//fmt.Println("[nim-status] ListenAndPost (post @i==1000) i= ", i) //fmt.Println("[nim-status] ListenAndPost (post @i==1000) i= ", i)
@ -62,10 +59,10 @@ func ListenAndPost() {
t := time.Now().UnixNano() / int64(time.Millisecond) t := time.Now().UnixNano() / int64(time.Millisecond)
i = i + 1 i = i + 1
time.Sleep(1 * time.Microsecond) time.Sleep(1 * time.Microsecond)
message := fmt.Sprintf("[\"~#c4\",[\"Message:%d\",\"text/plain\",\"~:public-group-user-message\",%d,%d,[\"^ \",\"~:chat-id\",\"status-test-go\",\"~:text\",\"Message:%d\"]]]", i, t*100, t, i) message := fmt.Sprintf("[\"~#c4\",[\"Message:%d\",\"text/plain\",\"~:public-group-user-message\",%d,%d,[\"^ \",\"~:chat-id\",\"%s\",\"~:text\",\"Message:%d\"]]]", i, t*100, t, channel, i)
if i%1000 == 0 { if i%1000 == 0 {
fmt.Println("[nim-status] posting", message) fmt.Println("[nim-status] posting", message)
C.nimbus_post(C.CString("status-test-go"), C.CString(message)) C.nimbus_post_public(C.CString(channel), C.CString(message))
} }
} }
} }
@ -77,5 +74,5 @@ func main() {
fmt.Println("GOMAXPROCS ", nprocs) fmt.Println("GOMAXPROCS ", nprocs)
Start() Start()
ListenAndPost() StatusListenAndPost("status-test-go")
} }