messages structure simplfy + routing

This commit is contained in:
ycc
2022-10-22 22:40:03 +02:00
parent fc3747a124
commit 7b95b9df71
4 changed files with 189 additions and 251 deletions

View File

@ -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
}