tavern 분리
This commit is contained in:
73
core/richconn.go
Normal file
73
core/richconn.go
Normal file
@ -0,0 +1,73 @@
|
||||
package core
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||
"repositories.action2quare.com/ayo/gocommon/wshandler"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
type richConnOuter struct {
|
||||
wsh *wshandler.WebsocketHandler
|
||||
rc *wshandler.Richconn
|
||||
}
|
||||
|
||||
func (sub richConnOuter) JoinTag(region string, tag primitive.ObjectID, tid primitive.ObjectID, hint string) error {
|
||||
sub.wsh.JoinTag(region, tag, tid, sub.rc, hint)
|
||||
|
||||
wsh := sub.wsh
|
||||
sub.rc.RegistOnCloseFunc(tag.Hex(), func() {
|
||||
wsh.LeaveTag(region, tag, tid)
|
||||
})
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sub richConnOuter) LeaveTag(region string, tag primitive.ObjectID, tid primitive.ObjectID, hint string) error {
|
||||
sub.SetStateInTag(region, tag, tid, "", hint)
|
||||
return sub.wsh.LeaveTag(region, tag, tid)
|
||||
}
|
||||
|
||||
func (sub richConnOuter) SetStateInTag(region string, tag primitive.ObjectID, tid primitive.ObjectID, state string, hint string) error {
|
||||
return sub.wsh.SetStateInTag(region, tag, tid, state, hint)
|
||||
}
|
||||
|
||||
func (sub richConnOuter) TurnGroupOnline(key string, gid primitive.ObjectID, score float64) error {
|
||||
gidhex := gid.Hex()
|
||||
_, err := sub.wsh.RedisSync.ZAdd(context.Background(), key, &redis.Z{Score: score, Member: gidhex}).Result()
|
||||
if err != nil {
|
||||
logger.Error("TurnGroupOnline failed. redis.ZAdd return err :", err)
|
||||
return err
|
||||
}
|
||||
|
||||
sub.rc.RegistOnCloseFunc(key, func() {
|
||||
sub.wsh.RedisSync.ZRem(context.Background(), key, gidhex)
|
||||
})
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sub richConnOuter) TurnGroupOffline(key string, gid primitive.ObjectID) error {
|
||||
f := sub.rc.UnregistOnCloseFunc(key)
|
||||
if f != nil {
|
||||
f()
|
||||
} else {
|
||||
sub.wsh.RedisSync.ZRem(context.Background(), key, gid.Hex())
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sub richConnOuter) SendMessage(doc []byte) error {
|
||||
return sub.rc.WriteBytes(doc)
|
||||
}
|
||||
|
||||
func (sub richConnOuter) SendMessageToTag(region string, tag primitive.ObjectID, msg []byte) error {
|
||||
sub.wsh.BroadcastRaw(region, tag, msg)
|
||||
return nil
|
||||
}
|
||||
|
||||
func (sub richConnOuter) CloseOnPurpose() error {
|
||||
return sub.rc.Close()
|
||||
}
|
||||
Reference in New Issue
Block a user