func (session *Session) logout(accID int64) { if session.data != nil { session.saveDBTimer.Stop() session.onLogout() delete(userIDSessions, session.data.User.Id) } // save data := util.DeepClone(session.data) session.Go(func() { if data != nil { //db := mongoDB.Ref() //defer mongoDB.UnRef(db) // userID := data.(*UserData).UserID // _, err := db.DB("game").C("users"). // UpsertId(userID, data) //err := data.(*UserData).saveDB() err := session.data.saveDB() if err != nil { log.Error("save user %v data error: %v", session.data.User.Id, err) } } }, func() { delete(accIDSessions, accID) }) }
func ExampleDeepClone() { src := []int{1, 2, 3} dst := util.DeepClone(src).([]int) for _, v := range dst { fmt.Println(v) } // Output: // 1 // 2 // 3 }
func (user *User) autoSaveDB() { const duration = 5 * time.Minute // save user.saveDBTimer = skeleton.AfterFunc(duration, func() { data := util.DeepClone(user.data) user.Go(func() { db := mongoDB.Ref() defer mongoDB.UnRef(db) userID := data.(*UserData).UserID _, err := db.DB("game").C("users"). UpsertId(userID, data) if err != nil { log.Error("save user %v data error: %v", userID, err) } }, func() { user.autoSaveDB() }) }) }
func (session *Session) autoSaveDB() { const duration = 5 * time.Minute // save session.saveDBTimer = skeleton.AfterFunc(duration, func() { data := util.DeepClone(session.data) session.Go(func() { //db := mongoDB.Ref() //defer mongoDB.UnRef(db) // userID := data.(*UserData).UserID // _, err := db.DB("game").C("users"). // UpsertId(userID, data) err := data.(*UserData).saveDB() if err != nil { log.Error("save user %v data error: %v", session.data.User.Id, err) } }, func() { session.autoSaveDB() }) }) }
func (user *User) logout(accID string) { if user.data != nil { user.saveDBTimer.Stop() user.onLogout() delete(users, user.data.UserID) } // save data := util.DeepClone(user.data) user.Go(func() { if data != nil { db := mongoDB.Ref() defer mongoDB.UnRef(db) userID := data.(*UserData).UserID _, err := db.DB("game").C("users"). UpsertId(userID, data) if err != nil { log.Error("save user %v data error: %v", userID, err) } } }, func() { delete(accIDUsers, accID) }) }