[
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.