Bonjour

Je découvre les websockets .


J aimerai en comprendre le fonctionnement général de manière simple car tous les tutos que je trouve sont en anglais ou les exemples simples sont noyés dans le code...

Si j ai bien compris on procède ainsi :
  1. on crée
  2. on connecte
  3. on envoi la requête
  4. on écoute
  5. on envoi la requête
  6. on écoute..
  7. on déconnecte


ESt-ce correct ?

Maintenant en fouinant des exemples de codes lisibles pour un débutant je suis arrivé sur un code qui lit en boucle des cours de bourse (de ce que j ai compris). J ai testé et pas moyen de stopper l'écoute. Pas de .disconnect ou .close();

Donc ma question : comment stopper une telle écoute.

je précise que cet exemple est issu de https://developers.binary.com/demos/

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
using System;
using System.Text;
using System.Threading.Tasks;
using System.Net.WebSockets;
using System.Threading;
using System.Net;
 
namespace BinaryWSDemo
{
    class BinaryWS
    {
    	private ClientWebSocket ws = new ClientWebSocket();
        private Uri uri = new Uri("wss://ws.binaryws.com/websockets/v3?app_id=1089");
 
        public async Task SendRequest(string data)
        {
 
        	while(this.ws.State == WebSocketState.Connecting){};
            if (this.ws.State != WebSocketState.Open)
            {
                throw new Exception("Connection is not open.");
            }
 
            var reqAsBytes = Encoding.UTF8.GetBytes(data);
            var ticksRequest = new ArraySegment<byte>(reqAsBytes);
 
            await this.ws.SendAsync(ticksRequest,
                WebSocketMessageType.Text,
                true,
                CancellationToken.None);
 
            Console.WriteLine("The request has been sent: ");
            Console.WriteLine(data);
            Console.WriteLine("\r\n \r\n");
 
 
        }
 
        public async Task StartListen(){
        	WebSocketReceiveResult result;
        	while (this.ws.State == WebSocketState.Open){
        	var buffer = new ArraySegment<byte>(new byte[1024]);
                    do
                    {
                        result = await this.ws.ReceiveAsync(new ArraySegment<byte>(buffer.Array), CancellationToken.None);
 
                        if (result.MessageType == WebSocketMessageType.Close)
                        {
                        	Console.WriteLine("Connection Closed!");
                        	break;
                        }
                        else
                        {
                            var str = Encoding.UTF8.GetString(buffer.Array, 0, result.Count);
                            Console.WriteLine("Received Data at: " + DateTime.Now);
                            Console.WriteLine(str);
                            Console.WriteLine("\r\n");
                        }
 
                    } while (!result.EndOfMessage);
        	}
        }
 
        public async Task Connect(){
        	Console.WriteLine("Prepare to connect to: " + this.uri.ToString());
        	Console.WriteLine("\r\n");
 
        	ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11;
        	await ws.ConnectAsync(uri, CancellationToken.None);
 
        	Console.WriteLine("The connection is established!");
        	Console.WriteLine("\r\n");
        }
 
        static void Main(string[] args)
        {
 
			string data = "{\"ticks\":\"R_100\"}";
 
			var bws = new BinaryWS();
			bws.Connect().Wait();
 
			bws.SendRequest(data).Wait();
			bws.StartListen();
 
            Console.ReadLine();
        }
    }
}
merci de vos conseils.

Aussi si vous connaissez un bon tuto en français et qui ne date as trop... je suis preneur car