2016-03-23 16 views
0

Ich habe Windows-Anwendung, die mit dem Server über Websockets kommuniziert, verwende ich Meteorserver als Server und websockets4net für die Kommunikation im Client. wenn einige Nachrichten an den Server gesendet werden (JSON-Format). Server reagiert auf Websocket in anderer Reihenfolge. Ich kann die Nachrichten verfolgen, die an den Server gesendet werden. In C# können wir Consumer-Muster erzeugen, wo ich MessageId und Callback im Verzeichnis speichern und Callback ausführen kann, wenn die Antwort empfangen wurde.Asynchrone Ereignisausführung mit Websockets

//<int, Action>(<messageid,Callback delegate>) 
ConcurrentDictionary<int, Action> serverResponseCollection = new ConcurrentDictionary<int, Action>(); 

public send(JObject message,Action Callback) 
{ 
     socket.Send(message); 
     serverResponseCollection.Add(message.id,Callback); 
} 

void socket_MessageReceived(object sender, MessageReceivedEventArgs e) 
{ 
    //server response contains message id 
    //get callback function and execute 
    var callbackObj = serverResponseCollection[e.id]; 
    Callback(); 
} 
+0

Warum möchten Sie jeder Anforderung, die Sie an den Server senden, einen anderen Rückruf zuordnen? – gaurawerma

+0

ja, ich rufe verschiedene Server-Methoden, kann unterschiedliche Antwort zurückgeben, kann unabhängig behandelt werden. –

+0

können Sie mir zeigen, was Sie tun in client.Execute ("ConfirmOrder", Rückruf)? – gaurawerma

Antwort

0

Sie können ein Feld hinzufügen „Methode“ auf das JSON-Objekt aufgerufen und dessen Wert auf den Namen der Operation stellen Sie die Durchführung werden, während eine Anforderungsnachricht zu erstellen.

Der Server fügt auch das Feld "Methode" in der Antwort mit demselben Wert hinzu, den der Client in der Anforderung gesendet hat.

Und dann in Ihrem Antwort-Handler können Sie den Wert von Methode Feld analysieren, um zu wissen, welche Operation Sie ausführen müssen. Und Sie werden auch loswerden von der Zuordnung der Nachricht IDs mit Rückrufen.

+0

Sie sind richtig, aber meine Anwendung ist Multi Threaded, viele Threads können die gleichen Server-Methoden aufrufen und die Antwort wird anders sein, wir können Antwort in diesem Szenario nicht behandeln. –

+0

Dann ist Ihre Frage unvollständig. Sie sollten es zuerst ändern. – gaurawerma