Websocket

Codes specifiques à Windows
As_sembleur
Messages : 12
Inscription : lun. 08/janv./2024 16:09

Websocket

Message par As_sembleur »

Bonjour à tous,
Je cherche à établir une liaison par websocket avec un broker pour avoir un rafraichissement toutes les minutes de la valeur du BTC.

J'ai trouvé quelques exemples, qui ne fonctionnent pas. Je reçois le code "bad request".
Dans les exemples que j'ai trouvé, il est dit que la connexion doit se faire en SSL/TLS.
Ors, la fonction opennetworkconnection() ne supporte pas la constante #PB_Network_TLS/SSL
Quelqu'un peut-il m'aider.
Bien sur, je peux faire des requêtes régulières toutes les 10 secondes, mais ce n'est pas "joli".

Code : Tout sélectionner

EnableExplicit

Define server$, message$, *buffer, connection
Define bufferSize.i = 4096 ; Taille du buffer pour recevoir les données

server$ = "stream.binance.com" ; Serveur WebSocket de Binance
Define port.i = 9443          ; Port WebSocket sécurisé

; Endpoint pour écouter les cotations en temps réel
Define stream$ = "/ws/btcusdt@kline_1m" ; Flux de cotations BTC/USDT en temps réel à 1 minute

; Préparation d'une requête WebSocket
Procedure.s WebSocketHandshake(host$, stream$, port)
  Protected request$
  request$ = "GET " + stream$ + " HTTP/1.1" + #CRLF$
  request$ + "Host: " + host$ + #CRLF$
  request$ + "Upgrade: websocket" + #CRLF$
  request$ + "Connection: Upgrade" + #CRLF$
  request$ + "Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==" + #CRLF$
  request$ + "Sec-WebSocket-Version: 13" + #CRLF$ + #CRLF$
  ProcedureReturn request$
EndProcedure

; Connexion au serveur WebSocket
connection = OpenNetworkConnection(server$, port, #PB_Network_TCP)
If connection = 0
  Debug "Erreur : Impossible de se connecter au serveur WebSocket."
  End
EndIf

; Envoyer la requête de handshake WebSocket
SendNetworkString(connection, WebSocketHandshake(server$, stream$, port))
Debug "Handshake envoyé. Attente de réponse..."

; Lire et afficher la réponse HTTP du handshake
*buffer = AllocateMemory(bufferSize)
If ReceiveNetworkData(connection, *buffer, bufferSize) > 0
  Debug "Réponse du serveur : " + PeekS(*buffer, -1, #PB_UTF8)
EndIf
FreeMemory(*buffer)

; Boucle principale pour écouter les messages WebSocket
Repeat
  If NetworkClientEvent(connection) = #PB_NetworkEvent_Data
    *buffer = AllocateMemory(bufferSize)
    If *buffer
      If ReceiveNetworkData(connection, *buffer, bufferSize) > 0
        message$ = PeekS(*buffer, -1, #PB_UTF8)
        Debug "Message reçu : " + message$
      EndIf
      FreeMemory(*buffer)
    EndIf
  EndIf
  
  Delay(2000) ; Attente de 2 secondes
ForEver

CloseNetworkConnection(connection)
Voilà. C'est tout pour le moment.
Après, je m'occuperai de gérer les ping pong de maintien de la connexion.

Merci d'avance.