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  }