Ich verwende eine websocket sharp dll in meiner Windows-Anwendung, um Nachrichten von einem GDAX-Server zu erhalten. Bis jetzt läuft alles gut - die Nachrichten kommen und ich verarbeite sie. Der Punkt, an dem ich feststecke, ist, wenn die Nachrichten nicht mehr kommen. Zumindest finde ich nichts im WebSocket.OnMessage Event ( Ссылка ), das mir beim Tracking helfen kann, wenn die Nachrichten kommen werden gestoppt (ich habe auch versucht, emitonping)
Nun haben die Nachrichten, die ich erhalten habe, einen Nachrichtentyp "Heartbeat", der jede Sekunde gesendet wird. Ich möchte ein separates Timer-Steuerelement hinzufügen, um zu überprüfen, ob die Heartbeat-Nachrichten jede Sekunde kommen oder nicht und wenn es nicht mehr kommt, muss ich den Server erneut verbinden. Aber da nichts passiert, wenn die Nachrichten nicht mehr kommen, wie verfolge ich sie, wo sollte ich den Timer-Code setzen, um zu prüfen, wann die Heartbeat-Nachrichten nicht mehr kommen?
Ich hoffe, ich könnte die Situation erklären, in der ich getroffen werde. Wenn jemand bereit ist, mir zu helfen und mehr Eingaben benötigt, lass es mich wissen.
Aktualisieren
%Vor%Bearbeiten Ich benutze Windows Form Timer Control und es ruft weiterhin die Methode timer1_Tick auf und ruft nicht die Methode OnWSMessage auf. Wie stelle ich sicher, dass beide parallel ausgeführt werden und wenn eine Nachricht verpasst wird oder die Nachricht nicht mehr ankommt, wird sie erneut verbunden?
Bearbeiten2 Die unten angegebenen Lösungen schlagen vor, die Timer-Funktion im onMessage-Event hinzuzufügen, aber was passiert, wenn ich keine Nachrichten erhalte? Wenn die Nachrichten nicht empfangen werden, tut der Code nichts. Ich habe eine globale Variable genommen und wann immer eine Nachricht kommt, addiert sie die Zeit in dieser Variable. Jetzt möchte ich ein separates Timer-Steuerelement ausführen, das überprüft, ob in dieser Variablen etwas vorhanden ist und ob der Wert der Sekunden länger als 1 ist, dann überprüfe etwas anderes.
Gibt es jemanden, der sich das ansehen und beraten kann?
Update2 : Ich möchte dies immer noch mit windows.timer control tun und nicht threading.timer. Ich habe zwei Labels in meiner Windows-App, lbllastheartbeat (um die Zeit anzuzeigen, wenn Heartbeat-Nachricht empfangen wird) und lblNow (um die aktuelle Zeit anzuzeigen, wenn Timer aufgerufen wird).
Voraussetzung - Mein Timer prüft, ob eine Heartbeat-Nachricht verpasst wird und dass dies über die Variable 'lastHeartbeatTime' erfolgt, die die Uhrzeit speichert, zu der die Heartbeat-Nachricht empfangen wurde.
Ich würde mich freuen, wenn jemand meinen Code überprüfen und vorschlagen könnte, was oder wo ich falsch mache.
Die Antwort wurde bereits gegeben - Sie müssen den Timer starten, der nach dem Zeitlimit ausgelöst wird, wenn Sie eine Nachricht erhalten, und diesen Timer jedes Mal zurücksetzen, wenn Sie eine Nachricht erhalten. Aber es scheint, du willst Codebeispiel, also hier ist es (mit Kommentaren):
%Vor%von Ihrer Frage, was ich verstehe, ist Ihre Nachricht sendet nach jeder Sekunde, aber das Problem ist nur, wenn es aufhören wollen Sie wissen, und führen Sie es erneut, wenn es so ist, Sie nur Timer anwenden und überprüfen Sie für jede Sekunde Wenn die Nachricht nach einer Sekunde oder mehr nicht gesendet wird (überprüfen Sie die Methode sentMessage (), legen Sie einen booleschen Wert fest, wenn die Nachricht gesendet wird, sollte true andernfalls false), dann geben Sie den Befehl zum erneuten Verbinden des Servers ein.
Tags und Links c# websocket-sharp