rpc 패키지 적용
This commit is contained in:
199
core/apiimpl.go
199
core/apiimpl.go
@ -5,48 +5,15 @@ import (
|
||||
"encoding/json"
|
||||
"io"
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
common "repositories.action2quare.com/ayo/gocommon"
|
||||
"repositories.action2quare.com/ayo/gocommon/logger"
|
||||
"repositories.action2quare.com/ayo/gocommon/wshandler"
|
||||
|
||||
"github.com/go-redis/redis/v8"
|
||||
"go.mongodb.org/mongo-driver/bson"
|
||||
"go.mongodb.org/mongo-driver/bson/primitive"
|
||||
)
|
||||
|
||||
func splitDocument(doc bson.M) bson.M {
|
||||
setdoc := bson.M{}
|
||||
unsetdoc := bson.M{}
|
||||
findoc := bson.M{}
|
||||
|
||||
for k, v := range doc {
|
||||
if k == "$set" {
|
||||
setdoc = v.(bson.M)
|
||||
} else if k == "$unset" {
|
||||
unsetdoc = v.(bson.M)
|
||||
}
|
||||
}
|
||||
|
||||
for k, v := range doc {
|
||||
if v == nil {
|
||||
unsetdoc[k] = 1
|
||||
} else if k[0] != '$' {
|
||||
setdoc[k] = v
|
||||
}
|
||||
}
|
||||
|
||||
if len(setdoc) > 0 {
|
||||
findoc["$set"] = setdoc
|
||||
}
|
||||
if len(unsetdoc) > 0 {
|
||||
findoc["$unset"] = unsetdoc
|
||||
}
|
||||
|
||||
return findoc
|
||||
}
|
||||
|
||||
// CreateGroup : 그룹 생성
|
||||
// - 그룹 : 멤버와 권한을 관리할 수 있다. 그룹 타입에 따라 디비에 저장되거나 메모리에만 존재한다.
|
||||
// - 생성 요청이 오면 파티를 만든다. 파티을 만들 수 있는지 여부는 서비스에서 결정할 것이고, 이 요청을 호출했다는 것은 서비스가 결정한 그룹 생성 조건을 다 통과했다는 의미이다.
|
||||
@ -179,52 +146,6 @@ func (sub *subTavern) Invite(w http.ResponseWriter, r *http.Request) {
|
||||
w.Write([]byte(result))
|
||||
}
|
||||
|
||||
func (sub *subTavern) UpdateGroupMember(w http.ResponseWriter, r *http.Request) {
|
||||
typename, _ := common.ReadStringFormValue(r.Form, "type")
|
||||
group := sub.groups[typename]
|
||||
if group == nil {
|
||||
logger.Println("UpdateGroupMember failed. group type is missing :", r.Form)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
gidobj, ok := common.ReadObjectIDFormValue(r.Form, "gid")
|
||||
if !ok {
|
||||
logger.Println("UpdateGroupMember failed. gid is missing :", r.Form)
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
midobj, midok := common.ReadObjectIDFormValue(r.Form, "mid")
|
||||
tidobj, tidok := common.ReadObjectIDFormValue(r.Form, "tid")
|
||||
if !midok && !tidok {
|
||||
// 둘다 없네?
|
||||
logger.Println("JoinGroup failed. tid or mid should be exist")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
var err error
|
||||
delete, _ := common.ReadBoolFormValue(r.Form, "delete")
|
||||
if delete {
|
||||
err = group.UpdateGroupMember(gidobj, midobj, tidobj, nil)
|
||||
} else {
|
||||
var doc bson.M
|
||||
if err := readBsonDoc(r.Body, &doc); err != nil {
|
||||
logger.Error("UpdateGroupMember failed. readBsonDoc returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
err = group.UpdateGroupMember(gidobj, midobj, tidobj, doc)
|
||||
}
|
||||
|
||||
if err != nil {
|
||||
logger.Println("UpdateGroupMember failed. Update returns err :", err)
|
||||
w.WriteHeader(http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
func (sub *subTavern) CancelInvitation(w http.ResponseWriter, r *http.Request) {
|
||||
typename, _ := common.ReadStringFormValue(r.Form, "type")
|
||||
group := sub.groups[typename]
|
||||
@ -719,6 +640,32 @@ func (sub *subTavern) UpdateGroupDocument(w http.ResponseWriter, r *http.Request
|
||||
}
|
||||
}
|
||||
|
||||
func (sub *subTavern) PauseGroupMember(w http.ResponseWriter, r *http.Request) {
|
||||
typename, _ := common.ReadStringFormValue(r.Form, "type")
|
||||
group := sub.groups[typename]
|
||||
if group == nil {
|
||||
logger.Println("DismissGroup failed. type is missing")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
midobj, ok := common.ReadObjectIDFormValue(r.Form, "mid")
|
||||
if !ok {
|
||||
logger.Println("UpdateMemberDocument failed. member_id is missing")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
gidobj, ok := common.ReadObjectIDFormValue(r.Form, "gid")
|
||||
if !ok {
|
||||
logger.Println("UpdateMemberDocument failed. _id is missing")
|
||||
w.WriteHeader(http.StatusBadRequest)
|
||||
return
|
||||
}
|
||||
|
||||
group.PauseMember(gidobj, midobj)
|
||||
}
|
||||
|
||||
func (sub *subTavern) DropPausedMember(w http.ResponseWriter, r *http.Request) {
|
||||
typename, _ := common.ReadStringFormValue(r.Form, "type")
|
||||
group := sub.groups[typename]
|
||||
@ -749,55 +696,55 @@ func (sub *subTavern) DropPausedMember(w http.ResponseWriter, r *http.Request) {
|
||||
}
|
||||
}
|
||||
|
||||
func (sub *subTavern) deliveryMessageHandler(deliveryChan <-chan wshandler.DeliveryMessage) {
|
||||
defer func() {
|
||||
r := recover()
|
||||
if r != nil {
|
||||
logger.Error(r)
|
||||
}
|
||||
}()
|
||||
// func (sub *subTavern) deliveryMessageHandler(deliveryChan <-chan wshandler.DeliveryMessage) {
|
||||
// defer func() {
|
||||
// r := recover()
|
||||
// if r != nil {
|
||||
// logger.Error(r)
|
||||
// }
|
||||
// }()
|
||||
|
||||
redisSync := sub.wsh.RedisSync
|
||||
for msg := range deliveryChan {
|
||||
mid := msg.Alias
|
||||
if msg.Body != nil {
|
||||
buffer := msg.Body
|
||||
// redisSync := sub.wsh.RedisSync
|
||||
// for msg := range deliveryChan {
|
||||
// mid := msg.Alias
|
||||
// if msg.Body != nil {
|
||||
// buffer := msg.Body
|
||||
|
||||
var channame string
|
||||
for i, ch := range buffer {
|
||||
if ch == 0 {
|
||||
channame = string(buffer[:i])
|
||||
buffer = buffer[i+1:]
|
||||
break
|
||||
}
|
||||
}
|
||||
// var channame string
|
||||
// for i, ch := range buffer {
|
||||
// if ch == 0 {
|
||||
// channame = string(buffer[:i])
|
||||
// buffer = buffer[i+1:]
|
||||
// break
|
||||
// }
|
||||
// }
|
||||
|
||||
if len(channame) == 0 {
|
||||
continue
|
||||
}
|
||||
// if len(channame) == 0 {
|
||||
// continue
|
||||
// }
|
||||
|
||||
buffer = append(mid[:], buffer...)
|
||||
_, err := redisSync.Publish(context.Background(), channame, buffer).Result()
|
||||
if err != nil {
|
||||
logger.Error(err)
|
||||
}
|
||||
}
|
||||
// buffer = append(mid[:], buffer...)
|
||||
// _, err := redisSync.Publish(context.Background(), channame, buffer).Result()
|
||||
// if err != nil {
|
||||
// logger.Error(err)
|
||||
// }
|
||||
// }
|
||||
|
||||
if len(msg.Command) > 0 {
|
||||
switch msg.Command {
|
||||
case "pause":
|
||||
gidtype := msg.Conn.GetTag("gid")
|
||||
if len(gidtype) > 0 {
|
||||
tokens := strings.SplitN(gidtype, "@", 2)
|
||||
gidobj, _ := primitive.ObjectIDFromHex(tokens[0])
|
||||
gtype := tokens[1]
|
||||
group := sub.groups[gtype]
|
||||
if group != nil {
|
||||
group.PauseMember(gidobj, msg.Alias, msg.Conn)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
logger.Println("delivery chan fin")
|
||||
}
|
||||
// if len(msg.Command) > 0 {
|
||||
// switch msg.Command {
|
||||
// case "pause":
|
||||
// gidtype := msg.Conn.GetTag("gid")
|
||||
// if len(gidtype) > 0 {
|
||||
// tokens := strings.SplitN(gidtype, "@", 2)
|
||||
// gidobj, _ := primitive.ObjectIDFromHex(tokens[0])
|
||||
// gtype := tokens[1]
|
||||
// group := sub.groups[gtype]
|
||||
// if group != nil {
|
||||
// group.PauseMember(gidobj, msg.Alias, msg.Conn)
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// logger.Println("delivery chan fin")
|
||||
// }
|
||||
|
||||
Reference in New Issue
Block a user