mirror of
https://github.com/wailsapp/wails.git
synced 2025-05-01 13:50:17 +08:00
Merge pull request #4215 from superDingda/bugfix/4211_long_ws_msg_truncation
fix: prevent truncation of long WebSocket messages in dev mode
This commit is contained in:
commit
741ff242f7
@ -15,6 +15,7 @@ require (
|
||||
github.com/godbus/dbus/v5 v5.1.0
|
||||
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
|
||||
github.com/google/uuid v1.6.0
|
||||
github.com/gorilla/websocket v1.5.3
|
||||
github.com/jackmordaunt/icns v1.0.0
|
||||
github.com/jaypipes/ghw v0.13.0
|
||||
github.com/labstack/echo/v4 v4.13.3
|
||||
|
@ -107,6 +107,8 @@ github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
|
||||
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
|
||||
github.com/gorilla/css v1.0.1 h1:ntNaBIghp6JmvWnxbZKANoLyuXTPZ4cAMlo6RyhlbO8=
|
||||
github.com/gorilla/css v1.0.1/go.mod h1:BvnYkspnSzMmwRK+b8/xgNPLiIuNZr6vbZBTPQ2A3b0=
|
||||
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
|
||||
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/hexops/gotextdiff v1.0.3 h1:gitA9+qJrrTCsiCl7+kh75nPqQt1cx4ZkudSTLoUqJM=
|
||||
github.com/hexops/gotextdiff v1.0.3/go.mod h1:pSWU5MAI3yDq+fZBTazCSJysOMbxWL1BSow5/V2vxeg=
|
||||
github.com/itchyny/gojq v0.12.13 h1:IxyYlHYIlspQHHTE0f3cJF0NKDMfajxViuhBLnHd/QU=
|
||||
|
@ -20,17 +20,23 @@ import (
|
||||
|
||||
"github.com/wailsapp/wails/v2/internal/frontend/runtime"
|
||||
|
||||
"github.com/gorilla/websocket"
|
||||
"github.com/labstack/echo/v4"
|
||||
"github.com/wailsapp/wails/v2/internal/binding"
|
||||
"github.com/wailsapp/wails/v2/internal/frontend"
|
||||
"github.com/wailsapp/wails/v2/internal/logger"
|
||||
"github.com/wailsapp/wails/v2/internal/menumanager"
|
||||
"github.com/wailsapp/wails/v2/pkg/options"
|
||||
"golang.org/x/net/websocket"
|
||||
)
|
||||
|
||||
type Screen = frontend.Screen
|
||||
|
||||
var upgrader = websocket.Upgrader{
|
||||
ReadBufferSize: 1024,
|
||||
WriteBufferSize: 1024,
|
||||
CheckOrigin: func(r *http.Request) bool { return true },
|
||||
}
|
||||
|
||||
type DevWebServer struct {
|
||||
server *echo.Echo
|
||||
ctx context.Context
|
||||
@ -155,51 +161,64 @@ func (d *DevWebServer) handleReloadApp(c echo.Context) error {
|
||||
}
|
||||
|
||||
func (d *DevWebServer) handleIPCWebSocket(c echo.Context) error {
|
||||
websocket.Handler(func(c *websocket.Conn) {
|
||||
d.LogDebug(fmt.Sprintf("Websocket client %p connected", c))
|
||||
conn, err := upgrader.Upgrade(c.Response(), c.Request(), nil)
|
||||
if err != nil {
|
||||
d.logger.Error("WebSocket upgrade failed %v", err)
|
||||
return err
|
||||
}
|
||||
d.LogDebug(fmt.Sprintf("WebSocket client %p connected", conn))
|
||||
|
||||
d.socketMutex.Lock()
|
||||
d.websocketClients[conn] = &sync.Mutex{}
|
||||
locker := d.websocketClients[conn]
|
||||
d.socketMutex.Unlock()
|
||||
|
||||
var wg sync.WaitGroup
|
||||
|
||||
defer func() {
|
||||
wg.Wait()
|
||||
d.socketMutex.Lock()
|
||||
d.websocketClients[c] = &sync.Mutex{}
|
||||
locker := d.websocketClients[c]
|
||||
delete(d.websocketClients, conn)
|
||||
d.socketMutex.Unlock()
|
||||
d.LogDebug(fmt.Sprintf("WebSocket client %p disconnected", conn))
|
||||
conn.Close()
|
||||
}()
|
||||
|
||||
defer func() {
|
||||
d.socketMutex.Lock()
|
||||
delete(d.websocketClients, c)
|
||||
d.socketMutex.Unlock()
|
||||
d.LogDebug(fmt.Sprintf("Websocket client %p disconnected", c))
|
||||
}()
|
||||
for {
|
||||
_, msgBytes, err := conn.ReadMessage()
|
||||
if err != nil {
|
||||
break
|
||||
}
|
||||
|
||||
var msg string
|
||||
defer c.Close()
|
||||
for {
|
||||
if err := websocket.Message.Receive(c, &msg); err != nil {
|
||||
break
|
||||
}
|
||||
// We do not support drag in browsers
|
||||
if msg == "drag" {
|
||||
continue
|
||||
msg := string(msgBytes)
|
||||
wg.Add(1)
|
||||
|
||||
go func(m string) {
|
||||
defer wg.Done()
|
||||
|
||||
if m == "drag" {
|
||||
return
|
||||
}
|
||||
|
||||
// Notify the other browsers of "EventEmit"
|
||||
if len(msg) > 2 && strings.HasPrefix(string(msg), "EE") {
|
||||
d.notifyExcludingSender([]byte(msg), c)
|
||||
if len(m) > 2 && strings.HasPrefix(m, "EE") {
|
||||
d.notifyExcludingSender([]byte(m), conn)
|
||||
}
|
||||
|
||||
// Send the message to dispatch to the frontend
|
||||
result, err := d.dispatcher.ProcessMessage(string(msg), d)
|
||||
result, err := d.dispatcher.ProcessMessage(m, d)
|
||||
if err != nil {
|
||||
d.logger.Error(err.Error())
|
||||
}
|
||||
|
||||
if result != "" {
|
||||
locker.Lock()
|
||||
if err = websocket.Message.Send(c, result); err != nil {
|
||||
locker.Unlock()
|
||||
break
|
||||
defer locker.Unlock()
|
||||
if err := conn.WriteMessage(websocket.TextMessage, []byte(result)); err != nil {
|
||||
d.logger.Error("Websocket write message failed %v", err)
|
||||
}
|
||||
locker.Unlock()
|
||||
}
|
||||
}
|
||||
}).ServeHTTP(c.Response(), c.Request())
|
||||
}(msg)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
@ -222,7 +241,7 @@ func (d *DevWebServer) broadcast(message string) {
|
||||
return
|
||||
}
|
||||
locker.Lock()
|
||||
err := websocket.Message.Send(client, message)
|
||||
err := client.WriteMessage(websocket.TextMessage, []byte(message))
|
||||
if err != nil {
|
||||
locker.Unlock()
|
||||
d.logger.Error(err.Error())
|
||||
@ -256,7 +275,7 @@ func (d *DevWebServer) broadcastExcludingSender(message string, sender *websocke
|
||||
return
|
||||
}
|
||||
locker.Lock()
|
||||
err := websocket.Message.Send(client, message)
|
||||
err := client.WriteMessage(websocket.TextMessage, []byte(message))
|
||||
if err != nil {
|
||||
locker.Unlock()
|
||||
d.logger.Error(err.Error())
|
||||
|
@ -28,6 +28,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
- Fixed window restoration behavior after minimization by @superDingda in [#4109](https://github.com/wailsapp/wails/issues/4109)
|
||||
- Fixed excessive console logging after updating to v2.10.1 by @superDingda in [#4111](https://github.com/wailsapp/wails/issues/4111)
|
||||
- Fixed incorrect Webview2 reg key in HKCU path by @leaanthony.
|
||||
- Fixed long WebSocket messages being truncated in `wails dev` by @superDingda in [#4211](https://github.com/wailsapp/wails/issues/4211)
|
||||
|
||||
## v2.10.1 - 2025-02-24
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user