echo.html 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. <html>
  2. <head>
  3. <title>WebSockets Echo Test</title>
  4. </head>
  5. <body>
  6. Host: <input id='host' style='width:100'>&nbsp;
  7. Port: <input id='port' style='width:50'>&nbsp;
  8. Encrypt: <input id='encrypt' type='checkbox'>&nbsp;
  9. <input id='connectButton' type='button' value='Start' style='width:100px'
  10. onclick="connect();">&nbsp;
  11. <br>
  12. Log:<br>
  13. <textarea id="messages" style="font-size: 9;" cols=80 rows=25></textarea>
  14. </body>
  15. <script>
  16. var ws, host = null, port = null,
  17. msg_cnt = 0, send_cnt = 1, echoDelay = 500,
  18. echo_ref;
  19. function message(str) {
  20. console.log(str);
  21. cell = document.getElementById('messages');
  22. cell.innerHTML += msg_cnt + ": " + str + "\n";
  23. cell.scrollTop = cell.scrollHeight;
  24. msg_cnt++;
  25. }
  26. Array.prototype.pushStr = function (str) {
  27. var n = str.length;
  28. for (var i=0; i < n; i++) {
  29. this.push(str.charCodeAt(i));
  30. }
  31. }
  32. function send_msg() {
  33. var str = "Message #" + send_cnt;
  34. var encoder = new TextEncoder();
  35. ws.send(encoder.encode(str));
  36. message("Sent message: '" + str + "'");
  37. send_cnt++;
  38. }
  39. function update_stats() {
  40. document.getElementById('sent').innerHTML = sent;
  41. document.getElementById('received').innerHTML = received;
  42. document.getElementById('errors').innerHTML = errors;
  43. }
  44. function connect() {
  45. var host = document.getElementById('host').value,
  46. port = document.getElementById('port').value,
  47. scheme = "ws://", uri;
  48. console.log(">> connect");
  49. if ((!host) || (!port)) {
  50. console.log("must set host and port");
  51. return;
  52. }
  53. if (ws) {
  54. ws.close();
  55. }
  56. if (document.getElementById('encrypt').checked) {
  57. scheme = "wss://";
  58. }
  59. uri = scheme + host + ":" + port;
  60. message("connecting to " + uri);
  61. ws = new WebSocket(uri);
  62. ws.binaryType = 'arraybuffer';
  63. ws.addEventListener('message', function(e) {
  64. //console.log(">> WebSockets.onmessage");
  65. var decoder = new TextDecoder('UTF-8');
  66. var str = decoder.decode(e.data);
  67. message("Received message '" + str + "'");
  68. //console.log("<< WebSockets.onmessage");
  69. });
  70. ws.addEventListener('open', function(e) {
  71. console.log(">> WebSockets.onopen");
  72. echo_ref = setInterval(send_msg, echoDelay);
  73. console.log("<< WebSockets.onopen");
  74. });
  75. ws.addEventListener('close', function(e) {
  76. console.log(">> WebSockets.onclose");
  77. if (echo_ref) {
  78. clearInterval(echo_ref);
  79. echo_ref = null;
  80. }
  81. console.log("<< WebSockets.onclose");
  82. });
  83. ws.addEventListener('error', function(e) {
  84. console.log(">> WebSockets.onerror");
  85. if (echo_ref) {
  86. clearInterval(echo_ref);
  87. echo_ref = null;
  88. }
  89. console.log("<< WebSockets.onerror");
  90. });
  91. document.getElementById('connectButton').value = "Stop";
  92. document.getElementById('connectButton').onclick = disconnect;
  93. console.log("<< connect");
  94. }
  95. function disconnect() {
  96. console.log(">> disconnect");
  97. if (ws) {
  98. ws.close();
  99. }
  100. if (echo_ref) {
  101. clearInterval(echo_ref);
  102. }
  103. document.getElementById('connectButton').value = "Start";
  104. document.getElementById('connectButton').onclick = connect;
  105. console.log("<< disconnect");
  106. }
  107. window.onload = function() {
  108. console.log("onload");
  109. var url = document.location.href;
  110. document.getElementById('host').value = (url.match(/host=([^&#]*)/) || ['',window.location.hostname])[1];
  111. document.getElementById('port').value = (url.match(/port=([^&#]*)/) || ['',window.location.port])[1];
  112. }
  113. </script>
  114. </html>