From 45904104f7173f25782156f6e586ee5d2076fae8 Mon Sep 17 00:00:00 2001 From: Rahix Date: Tue, 11 Apr 2017 12:32:16 +0200 Subject: [PATCH] Add remote listening cancelling --- bc.lua | 2 ++ test_bc.lua | 8 ++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/bc.lua b/bc.lua index 975b9b8dfdcd..68dc324d2dc5 100644 --- a/bc.lua +++ b/bc.lua @@ -115,6 +115,8 @@ function bc:init(my_address, local_nouns, local_verbs) o.listening_remotes[message.noun] = o.listening_remotes[message.noun] or {} o.listening_remotes[message.noun][remoteAddress] = o.listening_remotes[message.noun][remoteAddress] or {} o.listening_remotes[message.noun][remoteAddress][message.id] = {query=message.query, qparam=message.qparam} + elseif message.ty == message_type.request_stop_listening then + o.listening_remotes[message.noun][remoteAddress][message.id] = nil elseif message.ty == message_type.listener_update then o.remote_listeners[message.noun][message.id].callback(o, message.value) end diff --git a/test_bc.lua b/test_bc.lua index 51f83cdbc1ef..824df747f38a 100644 --- a/test_bc.lua +++ b/test_bc.lua @@ -80,12 +80,16 @@ function test_multinode_listening() i = false bc1:listen_cancel("foo", id) -- Test wether cancelling works local j = false - bc2:listen_noun("foo", "onchange", nil, function(bc, foo) + local rid = bc2:listen_noun("foo", "onchange", nil, function(bc, foo) j = true end) bc1:set_noun("foo", 1234) assert_true(j, "Remote listening failed") - assert_false(i, "Cancelling listener failed") + assert_false(i, "Cancelling local listener failed") + bc2:listen_cancel("foo", rid) + j = false + bc1:set_noun("foo", 34) + assert_false(j, "Cancelling remote listener failed") end function test_listen_modes()