123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package model
- import (
- "context"
- "encoding/json"
- "fmt"
- "time"
- "trading-go/common"
- "trading-go/response"
- )
- type Message struct {
- MsgType int `json:"msgType"`
- From uint `json:"from"`
- To uint `json:"to"`
- Time uint `json:"time"`
- Content any `json:"content"`
- }
- var fromIndex map[uint]string
- var toIndex map[uint]string
- func init() {
- fromIndex = make(map[uint]string)
- toIndex = make(map[uint]string)
- }
- func (m Message) Save() error {
- rds := common.Redis
- jsonData, err := json.Marshal(m)
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
- defer cancel()
- key := fmt.Sprintf("%d:%d:%d", m.From, m.To, m.Time)
- _, err = rds.Set(ctx, key, jsonData, time.Second*60*60*24*30).Result()
- if err != nil {
- return err
- }
- return err
- }
- func (m Message) GetFrom(uid uint, page, pageSize int) (ms response.PageResponse, err error) {
- var mess []Message
- if page == 1 {
- fromIndex[uid] = "0"
- }
- rds := common.Redis
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
- defer cancel()
- key := fmt.Sprintf("%d:*", uid)
- result, err := rds.Do(ctx, "scan", fromIndex[uid], "match", key, "count", pageSize).Result()
- if err != nil {
- return
- }
- rs := result.([]interface{})
- index := rs[0].(string)
- if index != "0" {
- fromIndex[uid] = index
- ms.HNext = true
- }
- keys := rs[1].([]interface{})
- for i := 0; i < len(keys); i++ {
- value, err := rds.Get(ctx, keys[i].(string)).Result()
- if err != nil {
- break
- }
- err = json.Unmarshal([]byte(value), &m)
- if err != nil {
- break
- }
- mess = append(mess, m)
- }
- ms.Data = mess
- ms.PageSize = pageSize
- ms.Page = page
- return
- }
- func (m Message) GetTo(uid uint, page, pageSize int) (ms response.PageResponse, err error) {
- var mess []Message
- if page == 1 {
- toIndex[uid] = "0"
- }
- rds := common.Redis
- ctx, cancel := context.WithTimeout(context.Background(), time.Second)
- defer cancel()
- key := fmt.Sprintf("*:%d:*", uid)
- result, err := rds.Do(ctx, "scan", toIndex[uid], "match", key, "count", pageSize).Result()
- if err != nil {
- return
- }
- rs := result.([]interface{})
- index := rs[0].(string)
- if index != "0" {
- toIndex[uid] = index
- ms.HNext = true
- }
- keys := rs[1].([]interface{})
- for i := 0; i < len(keys); i++ {
- value, err := rds.Get(ctx, keys[i].(string)).Result()
- if err != nil {
- break
- }
- err = json.Unmarshal([]byte(value), &m)
- if err != nil {
- break
- }
- mess = append(mess, m)
- }
- ms.Data = mess
- ms.PageSize = pageSize
- ms.Page = page
- return
- }
|