messages structure simplfy + routing
This commit is contained in:
@ -6,6 +6,7 @@ import (
|
||||
|
||||
"forge.redroom.link/yves/meowlib"
|
||||
"github.com/go-redis/redis"
|
||||
"google.golang.org/protobuf/proto"
|
||||
)
|
||||
|
||||
type RedisRouter struct {
|
||||
@ -28,18 +29,43 @@ func NewRedisRouter(server *Identity, url string, password string, db int) *Redi
|
||||
return &r
|
||||
}
|
||||
|
||||
func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) *meowlib.FromServerMessage {
|
||||
func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) (*meowlib.FromServerMessage, error) {
|
||||
var from_server meowlib.FromServerMessage
|
||||
if len(msg.Messages) > 0 { // user message
|
||||
for _, usrmsg := range msg.Messages {
|
||||
r.Client.ZAdd(usrmsg.Destination, redis.Z{float64(time.Now().Unix()), usrmsg.Payload})
|
||||
// serialize the message to store it as byte array into redis
|
||||
out, err := proto.Marshal(msg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
r.Client.ZAdd(usrmsg.Destination, redis.Z{float64(time.Now().Unix()), out})
|
||||
}
|
||||
from_server.UuidAck = msg.Uuid
|
||||
}
|
||||
if len(msg.PullRequest) > 0 {
|
||||
for _, rq := range msg.PullRequest {
|
||||
msgcnt := r.Client.ZCount(rq.LookupKey, "-inf", "+inf")
|
||||
r.Client.ZPopMin(rq.LookupKey, msgcnt.Val())
|
||||
msgcnt, err := r.Client.ZCount(rq.LookupKey, "-inf", "+inf").Result()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
res, err := r.Client.ZPopMin(rq.LookupKey, msgcnt).Result()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, redismsg := range res {
|
||||
println(redismsg.Score)
|
||||
val := redismsg.Member.([]byte)
|
||||
var usrmsg meowlib.PackedUserMessage
|
||||
err := proto.Unmarshal(val, &usrmsg)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
// add server timestamp
|
||||
usrmsg.ServerTimestamp = append(usrmsg.ServerTimestamp, int64(redismsg.Score))
|
||||
|
||||
from_server.Chat = append(from_server.Chat, &usrmsg)
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
@ -47,7 +73,7 @@ func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) *meowlib.FromServerMes
|
||||
break
|
||||
|
||||
case "s": // servers list
|
||||
break
|
||||
breakmsgs
|
||||
|
||||
case "m": // matriochka
|
||||
break
|
||||
@ -57,5 +83,5 @@ func (r *RedisRouter) Route(msg *meowlib.ToServerMessage) *meowlib.FromServerMes
|
||||
break
|
||||
}
|
||||
*/
|
||||
return &from_server
|
||||
return &from_server, nil
|
||||
}
|
||||
|
Reference in New Issue
Block a user