[ 
https://issues.apache.org/jira/browse/FELIX-642?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12616542#action_12616542
 ] 

Daniel Felsing commented on FELIX-642:
--------------------------------------

i have one additional information which may be valuable........

=> this is not happening per "device" but also it may be that one service of a 
device is sending the initial value...and the second one not ... just for 
information :)

> initial event delivery for new event listeners fails random devices
> -------------------------------------------------------------------
>
>                 Key: FELIX-642
>                 URL: https://issues.apache.org/jira/browse/FELIX-642
>             Project: Felix
>          Issue Type: Bug
>          Components: UPnP Subproject
>    Affects Versions: upnp-basedriver-0.8.0
>            Reporter: Daniel Felsing
>            Priority: Blocker
>             Fix For: upnp-basedriver-0.8.0
>
>
> Hi Daniel,
> let's try to summarize this long thread, so that we can get a clear vision on 
> what is going on, and you can correct my wrong understanding
> Overall Environment Setup
> -------------------------
>  - You have two computer connected togheter by means of a switch. And they 
> are the only two computer on the network
>  - The first computer runs Felix + UPnP Base Driver
>  - The second computer runs Equinox + UPnP Base Driver + *your* Sensor Base 
> Driver + Sensor2UPnP Bridge
> Issues
> ------
>  - If you subscribe from the PC running Felix to all the UPnP Device exported 
> by the UPnP Base Driver running on Equinox and created by your Sensor2UPnP 
> bridge you miss some of the notification.
> Questions & Tests
> -----------------
>  - Can you create a JIRA issue for your issue, so that it will easy to track 
> and you will be able to post your code as zip file, instead of copy & paste
>  - During your testing have you always discovered all the device exported by 
> the Equinox computer in the Felix computer?
>  - Do you miss notification even on the Equinox computer?
> Ciao,
> Stefano "Kismet" Lenzi
> Overall Environment Setup:
> --------------------------
> - yes, connected by a switch
> - the first computer is a UPnP Bridge for a X10 "like" system..i wrote a 
> basedriver and upnpbridgedriver (bridgedriver is creating upnp devices for 
> every x10 base device). It is using felix + upnpbasedriver
> - the second computer acts as a server (central control point for a smart 
> home system implementation) it's using felix also (but for developing eclipse 
> equinox since it's more comfortable to develop) This second computer uses 
> basedriver to import the devices xposed by the first computer...and a 
> refinement driver is creating new objects for every upnp device found (e.g. a 
> light device and so on)
> Issues:
> ------
> - all the devices on the server (so the central smart home controller) that 
> get imported get refined. They subscribe to the upnp device it refines to get 
> notified on event change.
> Problem is: not all devices refined devices which act as listeners on the 
> SERVER get notified on INITIAL subscription (when i subscribe the device with 
> felix tester also no notification is delivered....)...when this happens and i 
> actually change the state of a sensor a notification is sent (to the device 
> and upnp felix tester) and everything begins to work properly.
> Question & Tests:
> -----------------
> - yes i can :)
> - yes - every device exported by the upnpsensorbridge (=Felix Computer) gets 
> found by the central server (=equinox computer) It is really just an issue 
> with single "upnpservices". Here i saw something strange. When i restart the 
> bridgeDriver on Felix computer (exporting my upnp devices) The 
> "getCurrentValue()" methods get called more and more often the more often i 
> restart the "bridgeDriver". Is this a normal behavior? It seems to me as 
> state variables Of the services get mixed up or not cancelled when 
> unregistering or something.
> - i have only one computer where i test the notification -> on the central 
> equinox server computer.
> On the felix computer exporting my upnp devices i am justwondering about the 
> strange calls to "getCurrentValue" i described you 
> some code parts that may be for particular interest:
> ---------------------------------------------------------------------
> UPnP Event Tester code on the SERVER side (central server importing the upnp 
> devices from the second one)
> public class Activator implements BundleActivator {
>       private ServiceRegistration servReg;
>       
>       /*
>        * (non-Javadoc)
>        * @see 
> org.osgi.framework.BundleActivator#start(org.osgi.framework.BundleContext)
>        */
>       public void start(BundleContext context) throws Exception {
>               EventListener test = new EventListener();
>               servReg = 
> context.registerService(UPnPEventListener.class.getName(), test, null);
>       }
>       /*
>        * (non-Javadoc)
>        * @see 
> org.osgi.framework.BundleActivator#stop(org.osgi.framework.BundleContext)
>        */
>       public void stop(BundleContext context) throws Exception {
>               servReg.unregister();
>       }
> }
> public class EventListener implements UPnPEventListener {
>       private ArrayList<String> knownDevs = new ArrayList<String>();
>       
>       @Override
>       public synchronized void notifyUPnPEvent(String deviceId, String 
> serviceId, Dictionary events) {
>               String output = "";
>               output += deviceId + " " + serviceId;
>               
>               Enumeration eventit = events.keys();
>               
>               while (eventit.hasMoreElements()) {
>                       String key = (String) eventit.nextElement();
>                       output += key + " " + events.get(key) + "\n";
>               }
>                               
>               if (!knownDevs.contains(deviceId)) {
>                       knownDevs.add(deviceId);
>               }
>               System.err.println(output + "#diff Devices:" + 
> knownDevs.size());
>               System.err.flush();
>               
>       }
> }
> the REFINED devices on the SERVER themselves are using the felix helper class 
> to subscribe to the events:
>               // create upnp listener - if evented is true
>               subscriber = new UPnPSubscriber(bundleContext, this);
>               subscriber.subscribeAllServicesOf(super.getUPnPDeviceUDN());
> the upnp device implementation on the host exporting the upnp devices are 
> using the following line to expose event notifier
>               // setup event notifier
>               notify_switch = new UPnPEventNotifier(context, this, 
> switchdevswitchservice, switchDev);
> if you need something else please contact me! :)

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to