Thread Object global Verfügbar machen (WebSocket+jQuery) (5 answers)
Opened by styx-cc at 2018-05-16 17:49

styx-cc
 2018-05-16 17:49
#188369 #188369
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Hallo.

Folgender Code wirft bei mir einen Fehler und ich verstehe
nicht warum das Objekt an dieser Stelle nicht (mehr) benutzbar sein soll:
Code: (dl )
InvalidStateError: An attempt was made to use an object that is not, or is no longer, usable


Code (html): (dl )
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
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title> status</title> 
      <script src="http://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js" type="text/javascript"></script>
      <script type="text/javascript" src="https://cdn.rawgit.com/emn178/js-sha256/master/src/sha256.js"> </script>
                 
  <script>
      function WebSocketAuth(ws) {
                this.wss = ws;
                
                this.send2 = function(msg) {
                    var d = new Date(); 
                    var nonce = d.getTime();                    

                    var secret = 'secret';                      
                    var sig      = sha256(secret + nonce);

                    var json = JSON.stringify({ "message":msg, "nonce":nonce, "sig":sig });     
                    this.wss.send(json);
                };
        }

        var wss = new WebSocket('ws://181.174.166.70:3000/echo');
        var wsa = new WebSocketAuth( wss );

        $(function () {
          $('#msg').focus();
          
          var log = function (text) {
            $('#log').val( $('#log').val() + text + "\n");
          };
          
          wss.onopen = function () {
            log('Connection opened.');
          };

          wss.onmessage = function (msg) {
            var res = JSON.parse(msg.data);
            log('[' + res.hms + '] ' + res.text); 
          };
        });

        $(function () { wsa.send2( 'test' ); });

        $(function( ) {
        $('#msg').keydown(function (e) {
                if (e.keyCode == 13 && $('#msg').val()) {       
                        var msg  = $('#msg').val();     
                        wsa.send2( msg );
                        $('#msg').val('');
            }
          });
        }); 
  </script>

  <script>
        wsa.send2( 'test' );
  </script>

  </head>
  <body>
        <div >
                <p><input type="text" id="msg" />
                <textarea id="log" readonly></textarea></p>  
        </div>
</body>
</html>


Zeile 46 und 60 werden nicht ausgeführt, Zeile 51 hingegen schon. (wsa.send2( 'test' );)

Ich hab den entsprechenden WebsocketServer aufgesetzt, der Code sollte lauffaehig sein.

Leider sind meine JavaScript-Kenntnisse mäßig und ich weiß nicht so recht wonach ich suchen soll. Alles was ich zu Objekten und Scope finde, laesst mich darauf schließen, das dass so funktionieren müsste.

Ziel ist es, quasi die Methode send des Websocket-Objects mit send2 der WebSocketAuth-Klasse zu überschreiben und anschließend überall nutzen zu können um z.B. zu subscriben.

Lieben Gruß
Last edited: 2018-05-16 17:52:29 +0200 (CEST)
Pörl.

View full thread Object global Verfügbar machen (WebSocket+jQuery)