Feat: enter room: login with link
This commit is contained in:
@ -60,6 +60,7 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
|
||||
abortWithError(w, msg)
|
||||
return
|
||||
}
|
||||
roomID := r.PostFormValue("room_id")
|
||||
// make sure username does not exists
|
||||
cleanName := utils.RemoveSpacesFromStr(username)
|
||||
// login user
|
||||
@ -75,19 +76,37 @@ func HandleFrontLogin(w http.ResponseWriter, r *http.Request) {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
// state := models.MakeTestState(cleanName)
|
||||
// state.State.Username = cleanName
|
||||
userstate := models.InitState(cleanName)
|
||||
fi := &models.FullInfo{
|
||||
State: userstate,
|
||||
}
|
||||
fi.List = listPublicRooms()
|
||||
// save state to cache
|
||||
if err := saveState(cleanName, userstate); err != nil {
|
||||
// if err := saveFullInfo(fi); err != nil {
|
||||
log.Error("failed to save state", "error", err)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
// check if room_id provided and exists
|
||||
if roomID != "" {
|
||||
log.Debug("got room_id in login", "room_id", roomID)
|
||||
room, err := getRoomByID(roomID)
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
room.PlayerList = append(room.PlayerList, fi.State.Username)
|
||||
fi.State.RoomID = room.ID
|
||||
fi.Room = room
|
||||
fi.List = nil
|
||||
// save full info instead
|
||||
if err := saveFullInfo(fi); err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
} else {
|
||||
log.Debug("no room_id in login")
|
||||
fi.List = listPublicRooms()
|
||||
// save state to cache
|
||||
if err := saveState(cleanName, userstate); err != nil {
|
||||
// if err := saveFullInfo(fi); err != nil {
|
||||
log.Error("failed to save state", "error", err)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
}
|
||||
tmpl.ExecuteTemplate(w, "base", fi)
|
||||
}
|
||||
|
112
handlers/game.go
112
handlers/game.go
@ -49,55 +49,52 @@ func HandleCreateRoom(w http.ResponseWriter, r *http.Request) {
|
||||
tmpl.ExecuteTemplate(w, "base", fi)
|
||||
}
|
||||
|
||||
func HandleRoomEnter(w http.ResponseWriter, r *http.Request) {
|
||||
// parse payload
|
||||
roomID := r.URL.Query().Get("id")
|
||||
if roomID == "" {
|
||||
// error
|
||||
return
|
||||
}
|
||||
// create a room
|
||||
room, err := getRoomByID(roomID)
|
||||
if err != nil {
|
||||
msg := "failed to find the room"
|
||||
log.Error(msg, "error", err, "room_id", roomID)
|
||||
abortWithError(w, msg)
|
||||
return
|
||||
}
|
||||
ctx := context.WithValue(r.Context(), "current_room", room.ID)
|
||||
ctx, err = updateRoomInSession(ctx, room.ID)
|
||||
if err != nil {
|
||||
msg := "failed to set current room to session"
|
||||
log.Error(msg, "error", err)
|
||||
abortWithError(w, msg)
|
||||
return
|
||||
}
|
||||
state, err := getStateByCtx(ctx)
|
||||
if err != nil {
|
||||
log.Error("failed to get state", "error", err)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
state.RoomID = room.ID
|
||||
// update state
|
||||
if err := saveStateByCtx(ctx, state); err != nil {
|
||||
log.Error("failed to update state", "error", err)
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
// send msg of created room
|
||||
// h.Broker.Notifier <- broker.NotificationEvent{
|
||||
// EventName: models.MsgRoomListUpdate,
|
||||
// Payload: fmt.Sprintf("%s created a room named %s", r.CreatorName, r.RoomName),
|
||||
// }
|
||||
// return html
|
||||
tmpl, err := template.ParseGlob("components/*.html")
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
tmpl.ExecuteTemplate(w, "base", room)
|
||||
}
|
||||
// DEPRACATED: duplication of HandleJoinRoom
|
||||
// func HandleRoomEnter(w http.ResponseWriter, r *http.Request) {
|
||||
// // parse payload
|
||||
// roomID := r.URL.Query().Get("id")
|
||||
// if roomID == "" {
|
||||
// msg := "room id not provided"
|
||||
// log.Error(msg)
|
||||
// abortWithError(w, msg)
|
||||
// return
|
||||
// }
|
||||
// tmpl, err := template.ParseGlob("components/*.html")
|
||||
// if err != nil {
|
||||
// abortWithError(w, err.Error())
|
||||
// return
|
||||
// }
|
||||
// // create a room
|
||||
// room, err := getRoomByID(roomID)
|
||||
// if err != nil {
|
||||
// msg := "failed to find the room"
|
||||
// log.Error(msg, "error", err, "room_id", roomID)
|
||||
// abortWithError(w, msg)
|
||||
// return
|
||||
// }
|
||||
// state, err := getStateByCtx(r.Context())
|
||||
// // INFO: if non-loggined user join: prompt to login
|
||||
// if err != nil {
|
||||
// log.Error("failed to get state", "error", err)
|
||||
// // abortWithError(w, err.Error())
|
||||
// tmpl.ExecuteTemplate(w, "login", nil)
|
||||
// return
|
||||
// }
|
||||
// state.RoomID = room.ID
|
||||
// // update state
|
||||
// if err := saveStateByCtx(r.Context(), state); err != nil {
|
||||
// log.Error("failed to update state", "error", err)
|
||||
// abortWithError(w, err.Error())
|
||||
// return
|
||||
// }
|
||||
// // send msg of created room
|
||||
// // h.Broker.Notifier <- broker.NotificationEvent{
|
||||
// // EventName: models.MsgRoomListUpdate,
|
||||
// // Payload: fmt.Sprintf("%s created a room named %s", r.CreatorName, r.RoomName),
|
||||
// // }
|
||||
// // return html
|
||||
// tmpl.ExecuteTemplate(w, "base", room)
|
||||
// }
|
||||
|
||||
func HandleJoinTeam(w http.ResponseWriter, r *http.Request) {
|
||||
r.ParseForm()
|
||||
@ -239,11 +236,20 @@ func HandleJoinRoom(w http.ResponseWriter, r *http.Request) {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
fi, err := getFullInfoByCtx(r.Context())
|
||||
tmpl, err := template.ParseGlob("components/*.html")
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
fi, err := getFullInfoByCtx(r.Context())
|
||||
if err != nil {
|
||||
// INFO: if non-loggined user join: prompt to login
|
||||
fi = &models.FullInfo{}
|
||||
fi.LinkLogin = roomID
|
||||
tmpl.ExecuteTemplate(w, "base", fi)
|
||||
// abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
room.PlayerList = append(room.PlayerList, fi.State.Username)
|
||||
fi.State.RoomID = room.ID
|
||||
fi.Room = room
|
||||
@ -252,12 +258,6 @@ func HandleJoinRoom(w http.ResponseWriter, r *http.Request) {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
// return html
|
||||
tmpl, err := template.ParseGlob("components/*.html")
|
||||
if err != nil {
|
||||
abortWithError(w, err.Error())
|
||||
return
|
||||
}
|
||||
tmpl.ExecuteTemplate(w, "room", fi)
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user