채널간 publish marshalling을 gob으로 변경

This commit is contained in:
2023-07-16 18:39:11 +09:00
parent 8f6c87a8ae
commit 66aea48fb7

View File

@ -1,7 +1,9 @@
package wshandler
import (
"bytes"
"context"
"encoding/gob"
"encoding/hex"
"encoding/json"
"fmt"
@ -263,16 +265,19 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
raw, err := pubsub.ReceiveMessage(ctx)
if err == nil {
buffer := bytes.NewBuffer([]byte(raw.Payload))
dec := gob.NewDecoder(buffer)
if raw.Channel == sh.redisMsgChanName {
var msg UpstreamMessage
if err := json.Unmarshal([]byte(raw.Payload), &msg); err == nil {
if err := dec.Decode(&msg); err == nil {
sh.deliveryChan <- &msg
} else {
logger.Println("decode UpstreamMessage failed :", err)
}
} else if raw.Channel == sh.redisCmdChanName {
var cmd commandMessage
if err := json.Unmarshal([]byte(raw.Payload), &cmd); err == nil {
if err := dec.Decode(&cmd); err == nil {
sh.deliveryChan <- &cmd
} else {
logger.Println("decode UpstreamMessage failed :", err)
@ -305,6 +310,9 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
// 유저에게서 온 메세지, 소켓 연결/해체 처리
for {
buffer := bytes.NewBuffer(make([]byte, 0, 1024))
buffer.Reset()
select {
case destroyedRoom := <-roomDestroyChan:
delete(rooms, destroyedRoom)
@ -330,8 +338,10 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
break
}
}
if bt, err := json.Marshal(usermsg); err == nil {
sh.redisSync.Publish(context.Background(), sh.redisMsgChanName, bt).Result()
enc := gob.NewEncoder(buffer)
if err := enc.Encode(usermsg); err == nil {
sh.redisSync.Publish(context.Background(), sh.redisMsgChanName, buffer).Result()
}
case *commandMessage:
@ -358,8 +368,9 @@ func (sh *subhandler) mainLoop(ctx context.Context) {
}
// 위에서 break 안걸리면 나한테 없으므로 publish를 해야 함. 그러면 다른 호스트가 deliveryChan으로 받는다
if bt, err := json.Marshal(usermsg); err == nil {
sh.redisSync.Publish(context.Background(), sh.redisCmdChanName, bt).Result()
enc := gob.NewEncoder(buffer)
if err := enc.Encode(usermsg); err == nil {
sh.redisSync.Publish(context.Background(), sh.redisCmdChanName, buffer).Result()
}
}