From 6dd76d0802d52e6a82e58de533cb3b291b352dd5 Mon Sep 17 00:00:00 2001 From: Thijs de Vries Date: Wed, 15 Jan 2020 03:15:19 +0100 Subject: [PATCH] initial commit --- img/screenshot.png | Bin 0 -> 26662 bytes readme.md | 74 ++++++++++++++++++++++ ws-term.html | 151 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 225 insertions(+) create mode 100644 img/screenshot.png create mode 100644 readme.md create mode 100644 ws-term.html diff --git a/img/screenshot.png b/img/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..07408a71bb10fef41545ba0d410487103209eba7 GIT binary patch literal 26662 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 Kd(xTEpZ^_57J-ET literal 0 HcmV?d00001 diff --git a/readme.md b/readme.md new file mode 100644 index 0000000..e8f3440 --- /dev/null +++ b/readme.md @@ -0,0 +1,74 @@ +# πŸ’» ws-term + +Websockets are made for the web. So what better way to test/develop/debug your websocket than to use a web-app? ws-term is a web-app written in JavaScript. It stores your settings and history locally and you'll never be forced to create an account. + +![image-20200115031219391](img/screenshot.png) + +## πŸ“– Quick-guide + +1. Download ws-term.html + +2. Open it in a text editor and configure a couple settings (L12 - L21) + + ```javascript + // Address to your websocket. Kind of like an http address + let address = "wss://echo.websocket.org/" + // (array of) ws subprotecol(s) you want to negotiate. false to disable subprotecols + let subProtocol = false + // Retry connection after X ms. Set to false to disable. + let autoReconnect = 1000 + // pre-configured history items. You can use these as cheap-ass shortcuts + history.items = [] + ``` + +3. Open the HTML file in a browser. + +The status will be indicated by the colored tab at the top-left corner. +**Green:**connected +**Red:**disconnected +**Gray:**not yet connected + +Terminal messages prefixed by β€˜[ws-term]’ are system messages, and not websocket messages. + +## πŸš† Roadmap + +**Right now it's pretty barebones:** + +- [x] Send and receive websocket messages +- [x] Status indication (connected/disconnected) +- [x] Auto-reconnect support +- [x] Command history (⬆ / ⬇) +- [x] β€˜easy’ configuration (four variables at the top of the document) +- [x] Websocket sub-protocol negotiation support +- [x] A theme I can bear to watch after dark πŸ‘€ … + +**But there'll be more before the v1.0 release 🏁 :** + +- [ ] Port app over to VueJS +- [ ] Provide either terminal tabs, or a t-mux-like interface (or both...) +- [ ] Provide configuration options in the app +- [ ] Store sessions/config locally in an exportable way (LocalStorage?) + - [ ] Session settings like address, port, auto-reconnect time, history and terminal buffer-size. Extendable + - [ ] Session state (previously received/sent messages) + - [ ] Project state (Active terminals, tab order etc) + - [ ] Application state (Active projects) +- [ ] implement PWA to support offline usage + +**Maybe in the near futureβ„’ ** + +- Technical socket stats like latency, supported sub-protocols, tls details, bandwidth/rate etc. +- Binary support?.. (blob) +- Frame details + - See and manage ping/pong frames + - Frame type. + - Stats like; corresponding protocol, size, etc +- Further integration for popular sub-protocols like WAMP, XMPP, DRP etc. +- A way to act as proxy. Allow app to use websocket, while maintaining insight in messages/stats. Might be in the form of (Open)SaaS or desktop app. +- Team / collab development features (OpenSaaS) +- …? + +## πŸ’š Help me out + +Right now I'm the sole developer, there's no denying that. But you have the power to change this! + +Do you have a great idea or improvement? Drop a message in the issue's and I'll try to get you started. Or you can check if there are any existing issues that tickle your fancy. diff --git a/ws-term.html b/ws-term.html new file mode 100644 index 0000000..b5efa35 --- /dev/null +++ b/ws-term.html @@ -0,0 +1,151 @@ + + + + + + + + + + + +

WebSockets test

+
+
+ + +
+ +