2017-07-04 4 views
0

J'expérimente le sous-système d'événements Kaa pour l'une de mes applications IoT. J'ai créé une famille de classes d'événements et j'ai ajouté la même chose à l'un des projets en gardant la propriété "Both" comme je veux envoyer/recevoir les deux. Mon code événement déclencheur ressemble à quelque chose comme:Le sous-système d'événements Kaa ne fonctionne pas

DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext(); 
    kaaClient = Kaa.newClient(desktopKaaPlatformContext, new SimpleKaaClientStateListener() { 
     @Override 
     public void onStarted() { 
      System.out.println("--= Kaa client started =--"); 
     } 

     @Override 
     public void onStopped() { 
      System.out.println("--= Kaa client stopped =--"); 
     } 
    }, true); 

    // Obtain the event family factory. 
    final EventFamilyFactory eventFamilyFactory = kaaClient.getEventFamilyFactory(); 

    Random rnRandom = new Random(); 
    event1 = eventFamilyFactory.getEventClassFamilyDemo(); 

    DemoEventsCTL event = new DemoEventsCTL(rnRandom.nextBoolean()); 
    kaaClient.start(); 
    event.setMachineOn(rnRandom.nextBoolean()); 
    event1.sendEventToAll(event); 
    System.out.println("Hello : Event : " + event.getMachineOn() + "has been addded"); 

    } 

} 

Et mon gestionnaire d'événement ressemble à: DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext(); Lorsque j'exécute ces applications séparément, les deux s'exécutent sans aucun journal d'erreur, je vois la connexion au serveur réussie. Cependant, je ne vois pas les événements envoyés reçus. Les proxies créeront-ils des problèmes? Si quelqu'un a déjà essayé, pouvez-vous me dire s'il me manque quelque chose?

+0

Pour permettre l'envoi/réception d'événements à/de critères d'évaluation, d'abord le client doit fixer le point final à l'utilisateur. 'kaaClient.attachUser (" userExternalId "," userAccessToken ", userAttachCallback)' –

+0

Merci Pete. J'ai l'utilisateur attaché. et dans les journaux, je peux voir les journaux de demande d'écouteur comme: 11: 56: 22.008 [pool-6-thread-1] DEBUG okkcevent.DefaultEventManager - Réponse de résolution d'écouteur d'événement reçu: [{"requestId": -2073544503, "listeners ": []," result ":" SUCCESS "}] Cependant, la méthode listEvent onEvent n'est pas encore invoquée. Pouvez-vous partager un exemple d'extrait afin que je puisse vérifier? – shreya

+0

Veuillez voir ci-dessous la réponse pour voir les deux clients avec lesquels j'ai essayé. –

Répondre

0

Voici les deux implémentations client Kaa que j'ai utilisées. L'un émet des événements et l'autre consomme ces événements. Vous pouvez voir que les deux clients sont attachés au même utilisateur ("testverifier", "82884822542100000000"). D'abord j'ai couru le EventConsumer afin qu'il soit prêt à attraper les événements envoyés par EventEmitter quand je le lance.

EventConsumer

public class TestEventConsumer { 

    private static KaaClient kaaClient; 

    private static ScheduledExecutorService scheduledExecutorService; 

    public static void main(final String[] args) { 
     System.out.println(SampleEventListener.class.getSimpleName() + " Event Consumer Starting!"); 

     scheduledExecutorService = Executors.newScheduledThreadPool(1); 

     // Create the Kaa desktop context for the application. 
     final DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext(); 
     kaaClient = Kaa.newClient(desktopKaaPlatformContext, new FirstKaaClientStateListener(), true); 

     kaaClient.start(); 

     consumeEvents(); 

     System.out.println("--= Press any key to exit =--"); 
     try { 
      System.in.read(); 
     } catch (final IOException e) { 
      System.out.println("IOException has occurred: {}" + e.getMessage()); 
     } 
     System.out.println("Stopping Event Consumer..."); 
     scheduledExecutorService.shutdown(); 
     kaaClient.stop(); 
    } 

    private static class FirstKaaClientStateListener extends SimpleKaaClientStateListener { 

     @Override 
     public void onStarted() { 
      super.onStarted(); 
      System.out.println("Kaa client (Event Consumer) started"); 
     } 

     @Override 
     public void onStopped() { 
      super.onStopped(); 
      System.out.println("Kaa client (Event Consumer) stopped"); 
     } 
    } 

    public static void consumeEvents() { 
     kaaClient.attachUser("testverifier", "82884822542100000000", new UserAttachCallback() { 
      @Override 
      public void onAttachResult(final UserAttachResponse response) { 
       System.out.println("Attach response" + response.getResult()); 
      } 
     }); 


     final EventFamilyFactory eventFamilyFactory = kaaClient.getEventFamilyFactory(); 
     final MyCustomECF myEcf = eventFamilyFactory.getMyCustomECF(); 

     myEcf.addListener(new MyCustomECF.Listener() { 
      @Override 
      public void onEvent(final MyCustomEvent event, final String source) { 

       System.out.println("MyCustomEvent received from source : " + source + "Event Data Name : " + event.getName()); 

      } 
     }); 
    } 
} 

EventEmitter

public class TestEventEmitter { 

    private static KaaClient kaaClient; 

    private static ScheduledExecutorService scheduledExecutorService; 

    public static void main(final String[] args) { 

     scheduledExecutorService = Executors.newScheduledThreadPool(1); 

     // Create the Kaa desktop context for the application. 
     final DesktopKaaPlatformContext desktopKaaPlatformContext = new DesktopKaaPlatformContext(); 

     kaaClient = Kaa.newClient(desktopKaaPlatformContext, new FirstKaaClientStateListener(), true); 

     kaaClient.start(); 
     attachUserandEmitEvents(); 

     System.out.println("--= Press any key to exit =--"); 
     try { 
      System.in.read(); 
     } catch (final IOException e) { 
      System.out.println("IOException has occurred: {}" + e.getMessage()); 
     } 
     System.out.println("Stopping Event Emitter..."); 
     scheduledExecutorService.shutdown(); 
     kaaClient.stop(); 
    } 

    private static void attachUserandEmitEvents() { 
     // attach user 
     kaaClient.attachUser("testverifier", "82884822542100000000", new UserAttachCallback() { 
      @Override 
      public void onAttachResult(final UserAttachResponse response) { 
       final EventFamilyFactory eventFamilyFactory = kaaClient.getEventFamilyFactory(); 

       final MyCustomECF myEcf = eventFamilyFactory.getMyCustomECF(); 

       for (int i = 0; i < 5; i++) { 
        MyCustomEvent event = new MyCustomEvent(); 
        event.setCustId("ID00" + i); 
        event.setName("Name - " + i); 

        myEcf.sendEventToAll(event); 
       }    
      } 
     }); 
    } 

    private static class FirstKaaClientStateListener extends SimpleKaaClientStateListener { 

     @Override 
     public void onStarted() { 
      super.onStarted(); 
      System.out.println("Kaa client (Event Emitter) started"); 
     } 

     @Override 
     public void onStopped() { 
      super.onStopped(); 
      System.out.println("Kaa client (Event Emitter) stopped"); 
     } 
    } 
} 
+0

Merci pour les extraits. J'ai essayé avec le même. Les deux clients sont attachés au même utilisateur mais je suis toujours confronté à des problèmes de déclenchement de l'événement dans l'écouteur d'un autre client. Des pensées pourquoi? – shreya

+0

Est-ce que cela fonctionne bien pour vous? – shreya

+0

Oui! Son fonctionnement bien –