예제 #1
0
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)
	})
}
예제 #2
0
func ExampleDeepClone() {
	src := []int{1, 2, 3}

	dst := util.DeepClone(src).([]int)

	for _, v := range dst {
		fmt.Println(v)
	}

	// Output:
	// 1
	// 2
	// 3
}
예제 #3
0
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()
		})
	})
}
예제 #4
0
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()
		})
	})
}
예제 #5
0
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)
	})
}