From 75a6ab7ffa63f1e4d5d521b345295814669e0ddd Mon Sep 17 00:00:00 2001 From: Zedhugh Chen Date: Wed, 22 Nov 2023 01:24:00 +0800 Subject: [PATCH] add websocket example --- example/websocket/websocket.el | 35 +++++++++++++++++++++++++++ example/websocket/websocket.html | 9 +++++++ example/websocket/websocket.js | 41 ++++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+) create mode 100644 example/websocket/websocket.el create mode 100644 example/websocket/websocket.html create mode 100644 example/websocket/websocket.js diff --git a/example/websocket/websocket.el b/example/websocket/websocket.el new file mode 100644 index 0000000..04fc36a --- /dev/null +++ b/example/websocket/websocket.el @@ -0,0 +1,35 @@ +;; -*- coding: utf-8; lexical-binding: t; -*- + +(require 'websocket) + +(setq-local websocket-eldoc-callback nil) +(defun test-websocket-eldoc (callback) + (setq websocket-eldoc-callback + (if (compiled-function-p callback) callback nil))) +(set (make-local-variable 'eldoc-documentation-strategy) + 'eldoc-documentation-compose-eagerly) + +(run-with-timer 1 nil + (lambda () + (funcall websocket-eldoc-callback "hel"))) + +(test-websocket-eldoc "hel") + +(make-local-variable 'eldoc-documentation-functions) +(add-to-list 'eldoc-documentation-functions #'test-websocket-eldoc) + +(setq ws-server (websocket-server + 4000 + :host 'local + :on-message (lambda (ws frame) + (when (and (boundp 'websocket-eldoc-callback) (compiled-function-p websocket-eldoc-callback)) + (websocket-send-text ws (format "eldoc showed: %s" (websocket-frame-text frame))) + (funcall websocket-eldoc-callback (websocket-frame-text frame)))))) + +(funcall (symbol-value (obarray-get obarray "websocket-eldoc-callback")) "hello") + +(symbol-value 'websocket-eldoc-callback) + +(websocket-server-close ws-server) + +(funcall websocket-eldoc-callback "hello") diff --git a/example/websocket/websocket.html b/example/websocket/websocket.html new file mode 100644 index 0000000..0604799 --- /dev/null +++ b/example/websocket/websocket.html @@ -0,0 +1,9 @@ + + + + + emacs websocket test + + + + diff --git a/example/websocket/websocket.js b/example/websocket/websocket.js new file mode 100644 index 0000000..85653f1 --- /dev/null +++ b/example/websocket/websocket.js @@ -0,0 +1,41 @@ +let ws = new WebSocket("ws://127.0.0.1:4000"); +ws.onopen = () => { + console.log('websocket opened'); +} + +ws.onclose = () => { + console.log('websocket closed'); +} + +ws.onmessage = (e) => { + console.log('recv:', e.data) +} + +let timeout = 0; +let timer = null; + +/** + * 发送消息到 Emacs + * @param {string} msg 消息内容 + */ +function sendMsgToEmacs(msg) { + if (!(ws instanceof WebSocket) || ws.readyState !== WebSocket.OPEN) return; + + ws.send(msg); +} + +const range = 10; + +function calcNextTimeout() { + return (Math.round(Math.random() * range) + 2) * 1000; +} + +function schedule() { + sendMsgToEmacs(window.crypto.randomUUID()); + window.clearTimeout(timer); + timeout = calcNextTimeout(); + + timer = window.setTimeout(schedule, timeout); +} + +schedule();