recordmgr.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. package record
  2. import (
  3. "strconv"
  4. "sync"
  5. "bet24.com/log"
  6. pb "bet24.com/servers/micros/userservices/proto"
  7. )
  8. type userRecord struct {
  9. userId int
  10. records []pb.Record
  11. }
  12. type recordmgr struct {
  13. userlist map[int]*userRecord
  14. lock *sync.RWMutex
  15. }
  16. func newRecordMgr() *recordmgr {
  17. ret := new(recordmgr)
  18. ret.userlist = make(map[int]*userRecord)
  19. ret.lock = &sync.RWMutex{}
  20. return ret
  21. }
  22. func (rd *recordmgr) doRecord(userId, recordId, count int) {
  23. log.Release("userId:%d, recordId:%d, count:%d", userId, recordId, count)
  24. rd.lock.Lock()
  25. defer rd.lock.Unlock()
  26. result := 0
  27. _, ret := rd.userlist[userId]
  28. if !ret {
  29. var d userRecord
  30. d.userId = userId
  31. s := pb.Record{RecordId: recordId, Count: count}
  32. d.records = append(d.records, s)
  33. rd.userlist[userId] = &d
  34. result = count
  35. } else {
  36. e := false
  37. for i := 0; i < len(rd.userlist[userId].records); i++ {
  38. if rd.userlist[userId].records[i].RecordId == recordId {
  39. e = true
  40. if recordId != pb.Record_MaxWin {
  41. rd.userlist[userId].records[i].Count += count
  42. } else {
  43. if rd.userlist[userId].records[i].Count < count {
  44. rd.userlist[userId].records[i].Count = count
  45. }
  46. }
  47. result = rd.userlist[userId].records[i].Count
  48. break
  49. }
  50. }
  51. if !e {
  52. s := pb.Record{RecordId: recordId, Count: count}
  53. rd.userlist[userId].records = append(rd.userlist[userId].records, s)
  54. result = count
  55. }
  56. }
  57. trans_updataUserRecord(userId, recordId, result)
  58. }
  59. func (rd *recordmgr) getUserRecordList(userId int) []pb.Record {
  60. rd.lock.Lock()
  61. defer rd.lock.Unlock()
  62. u, ret := rd.userlist[userId]
  63. if ret {
  64. return u.records
  65. }
  66. u.records = trans_getUserRecord(userId)
  67. return u.records
  68. }
  69. func (rd *recordmgr) dump(param string) {
  70. if param == "" {
  71. return
  72. }
  73. userId, _ := strconv.Atoi(param)
  74. log.Release("UserId:%d", userId)
  75. rd.lock.Lock()
  76. defer rd.lock.Unlock()
  77. u, ret := rd.userlist[userId]
  78. if ret {
  79. log.Release("UserRecord:%v", u)
  80. }
  81. }