Frontend/backend project structure

+ Base implementation of a differential synchronization based on Neil
  Fraser article/talk

See https://www.youtube.com/watch?v=S2Hp_1jqpY8
This commit is contained in:
2020-04-27 22:43:42 +02:00
parent 40759f59d6
commit d9fb51394c
89 changed files with 2178 additions and 14 deletions

View File

@ -0,0 +1,12 @@
package route
import (
"forge.cadoles.com/wpetit/guesstimate/internal/config"
"github.com/go-chi/chi"
)
func Mount(r *chi.Mux, config *config.Config) error {
r.Get("/ws/{projectId}", handleProjectWebsocket)
return nil
}

View File

@ -0,0 +1,109 @@
package route
import (
"log"
"net/http"
"github.com/davecgh/go-spew/spew"
"github.com/gorilla/websocket"
"github.com/pkg/errors"
"gitlab.com/wpetit/goweb/logger"
)
var upgrader = websocket.Upgrader{} // nolint: gochecknoglobals
func handleProjectWebsocket(w http.ResponseWriter, r *http.Request) {
log.Println("websocket request")
c, err := upgrader.Upgrade(w, r, nil)
if err != nil {
panic(errors.Wrap(err, "could not upgrade connection"))
}
defer c.Close()
// ctn := container.Must(r.Context())
// ctx := r.Context()
// Loop over incoming websocket messages
for {
_, data, err := c.ReadMessage()
if err != nil {
cause := errors.Cause(err)
if websocket.IsCloseError(cause, 1001, 1005) { // Ignore "going away" and "no status" close errors
return
}
logger.Error(
r.Context(),
"could not read message",
logger.E(err),
)
break
}
spew.Dump(data)
// message := &game.Message{}
// if err := json.Unmarshal(data, message); err != nil {
// logger.Error(
// r.Context(),
// "could not decode message",
// logger.E(err),
// )
// break
// }
// switch {
// case message.Type == game.MessageTypeInit:
// payload := &game.InitPayload{}
// if err := json.Unmarshal(message.Payload, payload); err != nil {
// logger.Error(
// r.Context(),
// "could not decode payload",
// logger.E(err),
// )
// break
// }
// setGameID(payload.GameID)
// evt := game.NewEventPlayerConnected(payload.GameID, user.ID)
// bus.Publish(game.EventNamespace, evt)
// case message.Type == game.MessageTypeGameEvent:
// gameID, ok := getGameID()
// if !ok {
// logger.Error(
// r.Context(),
// "game id not received yet",
// )
// break
// }
// payload := &game.EventPayload{}
// if err := json.Unmarshal(message.Payload, payload); err != nil {
// logger.Error(
// r.Context(),
// "could not decode payload",
// logger.E(err),
// )
// break
// }
// evt := game.NewEventPlayerMessage(gameID, user.ID, payload.Data)
// bus.Publish(game.EventNamespace, evt)
// default:
// logger.Error(
// r.Context(),
// "unsupported message type",
// logger.F("messageType", message.Type),
// )
// }
}
}