Events Listening, Callback functions
3 views (last 30 days)
I'm wondering if it's possible to bind the excecution of a listener to an condition? for example : assume we have a system of three users :user1,user2,user3.
-user1 and user2 trigger event 'Hello_Request', which user3 is listening to so:
user3 = addlistener([user1,user2],'Hello_Request',@callback1)
-user3 responds with 'Hello_Response', which user1 and user3 are listening to. so:
user1 = addlistener([user3],'Hello_Response',@callback2)
user2 = addlistener([user3],'Hello_Response',@callback2)
Now my question: Is there a way to condition the execution of user1 and user2 that user3 respond s just to the one who send a 'Hello_Request'? I can use different events since my system gets a large number of user which can actually variate.
Thanks in advance for your support!
Daniel Shub on 24 Jul 2013
Edited: Daniel Shub on 25 Jul 2013
You might be able to hack it, but I am not sure that you need to ...
Why not just have callback1 call a hello_response method of the user who triggered the event? If you want to keep it as event based it seems like the Hello_Response event should belong to user1, user1 should listen for this event, and user3 should trigger the event.
I am thinking something like
classdef user < handle
function obj = user(name)
obj.name = name;
obj.helloRequestListener = addlistener(obj, 'Hello_Response', @helloResponse);
function helloRequest(obj, src, evt)
disp(['Hello request by ', src.name, ' recieved by ', obj.name]);
function helloResponse(src, evt)
disp(['Hello response by ', src.name]);
user1 = user('user1'); user2 = user('user2'); user3 = user('user3');
addlistener([user1, user2], 'Hello_Request', @user3.helloRequest);
Hello request by user1 recieved by user3
Hello response by user1
Note that user2 does not give a response.