3
0
corteza/sam/websocket/websocket.go
Tit Petric ddbe9ce952 upd(sam): larger refactor of field names, websocket pkg layout
- renamed all fields with Id to ID
- fixed spec file syntax error
- fix bindings for Team API url parameters
- change layout of websocket types->outgoing msg converter
- regenerate full codegen
2018-07-25 18:07:56 +02:00

42 lines
976 B
Go

package websocket
import (
"net/http"
"github.com/gorilla/websocket"
"github.com/pkg/errors"
"github.com/titpetric/factory/resputil"
)
type (
Websocket struct{}
)
func (Websocket) New() *Websocket {
return &Websocket{}
}
// Handles websocket requests from peers
var upgrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
// Allow connections from any Origin
CheckOrigin: func(r *http.Request) bool { return true },
}
func (Websocket) Open(w http.ResponseWriter, r *http.Request) {
ws, err := upgrader.Upgrade(w, r, nil)
if _, ok := err.(websocket.HandshakeError); ok {
resputil.JSON(w, errors.Wrap(err, "ws: need a websocket handshake"))
return
} else if err != nil {
resputil.JSON(w, errors.Wrap(err, "ws: failed to upgrade connection"))
return
}
session := store.Save(Session{}.New(r.Context(), ws))
if err := session.Handle(); err != nil {
// @todo: log error, because at this point we can't really write it to w
}
}