From 603d6bfe829ea8a2b929d37e92d2afa71ca21db1 Mon Sep 17 00:00:00 2001 From: yumoqing Date: Thu, 25 Apr 2024 18:08:32 +0800 Subject: [PATCH] bugfix --- bricks/build.sh | 2 +- bricks/websocket.js | 53 +++++++++++++++++++++++++++++++++++++++++++ examples/echo.ws | 1 + examples/websocket.ui | 8 +++++++ 4 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 bricks/websocket.js create mode 100644 examples/websocket.ui diff --git a/bricks/build.sh b/bricks/build.sh index 02f47e5..27c986c 100755 --- a/bricks/build.sh +++ b/bricks/build.sh @@ -6,7 +6,7 @@ SOURCES=" page_data_loader.js factory.js uitypesdef.js utils.js \ tree.js multiple_state_image.js dynamiccolumn.js form.js message.js conform.js \ paging.js datagrid.js dataviewer.js iframe.js \ floaticonbar.js miniform.js wterm.js dynamicaccordion.js \ - llm_dialog.js " + llm_dialog.js websocket.js " echo ${SOURCES} cat ${SOURCES} > ../dist/bricks.js # uglifyjs --compress --mangle -- ../dist/bricks.js > ../dist/bricks.min.js diff --git a/bricks/websocket.js b/bricks/websocket.js new file mode 100644 index 0000000..6ab32ea --- /dev/null +++ b/bricks/websocket.js @@ -0,0 +1,53 @@ +var bricks = window.bricks || {} +bricks.WebSocket = class extends bricks.VBox { + constructor(opts){ + super(opts); + this.dialog = new bricks.VScrollPanel({}) + this.dialog.set_css('filler') + this.input = new bricks.UiStr({ + name:'prompt', + label:'Say something' + }); + this.add_widget(this.dialog); + this.add_widget(this.input); + this.input.bind('keypress', this.check_keypress.bind(this)); + this.ws = new WebSocket(this.ws_url); + this.ws.onopen = function(){ + console.log("open"); + } + this.ws.onclose = function(e){ + //当客户端收到服务端发送的关闭连接请求时,触发onclose事件 + console.log("close"); + } + this.ws.onerror = function(e){ + //如果出现连接、处理、接收、发送数据失败的时候触发onerror事件 + console.log(error); + } + this.ws.onmessage = this.show_response.bind(this); + } + check_keypress(e){ + if (e.key == 'Enter'){ + var v = this.input.getValue(); + var s = v.prompt; + console.log('check_keypress()', v, s); + if (s != ''){ + this.show_input(s); + } + } + } + show_input(s){ + var w = new bricks.MdWidget({mdtext:s}); + w.set_css('user_msg'); + this.dialog.add_widget(w); + this.ws.send(s); + } + show_response(e){ + var d = JSON.parse(e.data); + console.log(e.data, d.type, d.data, d); + var w = new bricks.MdWidget({mdtext:d.data}); + w.set_css('llm_msg'); + this.dialog.add_widget(w); + } +} +bricks.Factory.register('WebSocket', bricks.WebSocket); + diff --git a/examples/echo.ws b/examples/echo.ws index d5ccc49..cdc5306 100644 --- a/examples/echo.ws +++ b/examples/echo.ws @@ -1 +1,2 @@ +print('ws_data=', ws_data) return 'resp:' + ws_data diff --git a/examples/websocket.ui b/examples/websocket.ui new file mode 100644 index 0000000..9df76f4 --- /dev/null +++ b/examples/websocket.ui @@ -0,0 +1,8 @@ +{ + "widgettype":"WebSocket", + "options":{ + "width":"100%", + "height":"100%", + "ws_url":"{{entire_url('echo.ws')}}" + } +}