public void UnregisterSignalHandler()
{
AllJoyn.QStatus status = AllJoyn.QStatus.FAIL;
// create bus attachment
AllJoyn.BusAttachment bus = null;
bus = new AllJoyn.BusAttachment("BusAttachmentTest", true);
Assert.NotNull(bus);
// create the interface description
AllJoyn.InterfaceDescription testIntf = null;
status = bus.CreateInterface("org.alljoyn.test.BusAttachment", out testIntf);
Assert.Equal(AllJoyn.QStatus.OK, status);
Assert.NotNull(testIntf);
// add the signal member to the interface
status = testIntf.AddSignal("testSignal", "s", "msg", 0);
Assert.Equal(AllJoyn.QStatus.OK, status);
// activate the interface
testIntf.Activate();
// start the bus attachment
status = bus.Start();
Assert.Equal(AllJoyn.QStatus.OK, status);
// connect to the bus
status = bus.Connect(AllJoynTestCommon.GetConnectSpec());
Assert.Equal(AllJoyn.QStatus.OK, status);
// create the bus object &
// add the interface to the bus object
TestBusObject testBusObject = new TestBusObject(bus, "/test");
bus.RegisterBusObject(testBusObject);
// get the signal member from the interface description
AllJoyn.InterfaceDescription.Member testSignalMember = testIntf.GetMember("testSignal");
// register both signal handlers
status = bus.RegisterSignalHandler(this.TestSignalHandlerOne, testSignalMember, null);
Assert.Equal(AllJoyn.QStatus.OK, status);
status = bus.RegisterSignalHandler(this.TestSignalHandlerTwo, testSignalMember, null);
Assert.Equal(AllJoyn.QStatus.OK, status);
// add match for the signal
status = bus.AddMatch("type='signal',member='testSignal'");
Assert.Equal(AllJoyn.QStatus.OK, status);
handledSignalsOne = false;
handledSignalsTwo = false;
signalOneMsg = null;
signalTwoMsg = null;
// send a signal
testBusObject.SendTestSignal("test msg");
WaitEventOne(TimeSpan.FromSeconds(2));
WaitEventTwo(TimeSpan.FromSeconds(2));
// make sure that both handlers got the signal
Assert.Equal(true, handledSignalsOne);
Assert.Equal("test msg", signalOneMsg);
Assert.Equal(true, handledSignalsTwo);
Assert.Equal("test msg", signalTwoMsg);
// now unregister one handler & make sure it doesn't receive the signal
handledSignalsOne = false;
handledSignalsTwo = false;
signalOneMsg = null;
signalTwoMsg = null;
status = bus.UnregisterSignalHandler(this.TestSignalHandlerOne, testSignalMember, null);
Assert.Equal(AllJoyn.QStatus.OK, status);
// send another signal
testBusObject.SendTestSignal("test msg");
// wait to see if we receive the signal
WaitEventTwo(TimeSpan.FromSeconds(2));
// make sure that only the second handler got the signal
Assert.Equal(false, handledSignalsOne);
Assert.Null(signalOneMsg);
Assert.Equal(true, handledSignalsTwo);
Assert.Equal("test msg", signalTwoMsg);
// TODO: move these into a teardown method?
bus.Dispose();
}