github.com/haalcala/mattermost-server-change-repo@v0.0.0-20210713015153-16753fbeee5f/app/plugin_api_tests/manual.test_http_upgrade_websocket_plugin/main.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See LICENSE.txt for license information. 3 4 package main 5 6 import ( 7 "bytes" 8 "net/http" 9 10 "github.com/gorilla/websocket" 11 12 "github.com/mattermost/mattermost-server/v5/model" 13 "github.com/mattermost/mattermost-server/v5/plugin" 14 ) 15 16 type Plugin struct { 17 plugin.MattermostPlugin 18 } 19 20 func (p *Plugin) ServeHTTP(_ *plugin.Context, w http.ResponseWriter, r *http.Request) { 21 upgrader := websocket.Upgrader{} 22 23 ws, err := upgrader.Upgrade(w, r, nil) 24 if err != nil { 25 w.WriteHeader(http.StatusInternalServerError) 26 return 27 } 28 defer ws.Close() 29 30 for { 31 mt, msg, err := ws.ReadMessage() 32 if err != nil { 33 break 34 } 35 req := model.WebSocketRequestFromJson(bytes.NewReader(msg)) 36 resp := model.NewWebSocketResponse("OK", req.Seq, map[string]interface{}{"action": req.Action, "value": req.Data["value"]}) 37 if err = ws.WriteMessage(mt, []byte(resp.ToJson())); err != nil { 38 break 39 } 40 } 41 } 42 43 func main() { 44 plugin.ClientMain(&Plugin{}) 45 }