| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117 |
- package friend
- import (
- "encoding/json"
- "fmt"
- "sort"
- "bet24.com/log"
- "bet24.com/redis"
- "bet24.com/servers/common"
- notification "bet24.com/servers/micros/notification/proto"
- )
- func getRedisKey(userId int) string {
- return fmt.Sprintf("friend:roomInvite:userId:%d", userId)
- }
- // 读入redis
- func (u *user_friend) roomInviteLoadFromRedis() {
- data, ok := redis.String_Get(getRedisKey(u.UserID))
- if data == "" || !ok {
- return
- }
- if err := json.Unmarshal([]byte(data), &u.RoomInviteHistory); err != nil {
- log.Error("friend.roomInviteLoadFromRedis json unmarshal failed err:%v, %s", err, data)
- return
- }
- return
- }
- // 存入redis
- func (u *user_friend) roomInviteToRedis() {
- d, _ := json.Marshal(u.RoomInviteHistory)
- go redis.String_Set(getRedisKey(u.UserID), string(d))
- }
- // 邀请好友
- func (u *user_friend) roomInvite(nickName string, toUserId, roomNo int) *RoomInviteInfo {
- u.lock.RLock()
- defer u.lock.RUnlock()
- // 检查房间邀请列表,是否已邀请
- for _, v := range u.RoomInviteHistory {
- // log.Debug("user_roomInvite userId=%d nickName=%s toUserId=%d roomNo=%d v==>%+v", u.UserID, nickName, toUserId, roomNo, v)
- if v.UserID == toUserId && v.RoomNo == roomNo {
- return nil
- }
- }
- info := RoomInviteInfo{
- Id: common.GetTimeStamp(),
- UserID: u.UserID,
- NickName: nickName,
- RoomNo: roomNo,
- Invalid: true,
- }
- buf, _ := json.Marshal(notification.NotificationFriend{
- NotifyId: Friend_Notify_RoomInvite,
- UserId: u.UserID,
- Data: info,
- })
- go notification.AddNotification(toUserId, notification.Notification_Friend, string(buf))
- return &info
- }
- // 添加房间邀请历史列表
- func (u *user_friend) addRoomInviteHistory(info *RoomInviteInfo) {
- u.lock.Lock()
- max := 50
- u.RoomInviteHistory = append(u.RoomInviteHistory, info)
- if count := len(u.RoomInviteHistory); count > max {
- u.RoomInviteHistory = u.RoomInviteHistory[count-max:]
- }
- u.lock.Unlock()
- // 写入redis
- u.roomInviteToRedis()
- }
- // 获取房间邀请列表
- func (u *user_friend) getRoomInviteList() []*RoomInviteInfo {
- u.lock.RLock()
- defer u.lock.RUnlock()
- ts := common.GetTimeStamp()
- for i := 0; i < len(u.RoomInviteHistory); i++ {
- if ts >= u.RoomInviteHistory[i].Id+1800 {
- u.RoomInviteHistory[i].Invalid = false
- }
- }
- var list []*RoomInviteInfo
- list = u.RoomInviteHistory
- sort.SliceStable(list, func(i, j int) bool {
- return list[i].Id > list[j].Id
- })
- return list
- }
- // 房间邀请无效
- func (u *user_friend) roomInviteInvalid(roomNo int) {
- for i := 0; i < len(u.RoomInviteHistory); i++ {
- if u.RoomInviteHistory[i].RoomNo != roomNo {
- continue
- }
- u.lock.Lock()
- u.RoomInviteHistory[i].Invalid = false
- u.lock.Unlock()
- // 写入redis
- u.roomInviteToRedis()
- break
- }
- return
- }
|