2016-04-25 6 views
0

Ich versuche, eine schnelle node.js/edge.js/C# Brücke für eine Demo zusammenzustellen.Kommunizieren mit C# Host von edge.js

Ich muss den ".Net calling Node.js" Stil verwenden, da der vorhandene C# -Code eine Reihe von Konfigurationswerten verwendet, die ich zu node.exe.config nicht hinzufügen kann, da ich mehrere Versionen gleichzeitig ausführen muss.

So habe ich diesen Code:

private static async Task Start() { 

    Func<object, Task<object>> edge = EdgeJs.Edge.Func(@" 

     var login = require('login.js'); 
     var edge = require('edge') 

     login({ email: '[email protected]', password: 'shh' }, function callback(err, api) { 

      if (err) return console.error(err); 

      // This will keep listening until terminated 
      api.listen(function callback(err, message) { 
       if (err) return console.error(err); 

       // At this point I need to send the message back to this class so it can be processed.. 
       console.log(message); // send the message to C# 

       // ... and then return the response via the api 
       api.send('response goes here');  
      }); 
     }); 

     return function (data, callback) { 
      callback(null, er...); 
     }    
    ");  

} 

So wird der Code für Nachrichten in einer Ereignisschleife warten und reagieren. Dies alles funktioniert mit fest codierten Werten. Aber ich muss die Nachricht zur Verarbeitung an das C# zurücksenden, und ich kann nicht herausfinden, wie ich zwischen edge.js und der C# -App kommunizieren kann.

Es muss sicherlich über den Rückruf sein, aber ich kann nicht scheinen, herauszufinden, wie es zu strukturieren, und die Zeit wird knapp. Und ich bin keineswegs ein JavaScript-Experte.

Wie kann ich mit dem Rückruf zwischen dem Randcode und dem C# -Code innerhalb der Ereignisschleife kommunizieren?

Antwort

0

ich mit so etwas wie dies am Ende haben: dort auf den Daten definiert eine Funktion ist vergangen Kante, die dann anruft, wenn eine neue Nachricht empfangen wird. Diese Funktion wartet dann auf die Antwort und gibt sie an die Kante zurück, die (natürlich) ein weiteres Callback empfängt.

1

Sie haben Recht, es ist über den Rückruf. Da Sie Asynchron-Code verwenden, müssen Sie den gesamten Code innerhalb der zurück (Kante) Funktion wickeln, wie folgt aus:

private static async Task Start() { 
    Func<object, Task<object>> edge = EdgeJs.Edge.Func(@" 
     // edge_callback is used to return values to the C# code 
     return function(data, edge_callback) { 
      var login = require('login.js'); 
      var edge = require('edge') 

      login({ 
      email: '[email protected]', 
      password: 'shh' 
      }, function callback(err, api) { 

      if (err) return console.error(err); 
      // possible enhancement here by letting C# know there is an error 
      // edge_callback(err); 

      // This will keep listening until terminated 
      api.listen(function callback(err, message) { 
       if (err) return console.error(err); 
       // same thing here: edge_callback(err); 

       // At this point I need to send the message back to this class so it can be processed.. 
       console.log(message); // send the message to C# 
       // use the callback, first param is error if there is any, second is the data 
       edge_callback(null, message); 

       // ... and then return the response via the api 
       api.send('response goes here'); 
      }); 
      }); 
     }  
    ");  
} 
+0

Das war sehr hilfreich danke: leider Edge mochte nicht mehrmals aufgerufen werden (Aufruf der Edge Callback beendet die Edge-Sitzung), so musste ich darauf aufbauen. – stuartd

Verwandte Themen