pull/351/head
wangchuxiao 2 years ago
parent 3886d49b0a
commit 7f5b12d4d2

@ -111,6 +111,7 @@ func main() {
groupRouterGroup.POST("/set_group_member_nickname", group.SetGroupMemberNickname)
groupRouterGroup.POST("/set_group_member_info", group.SetGroupMemberInfo)
groupRouterGroup.POST("/get_group_abstract_info", group.GetGroupAbstractInfo)
groupRouterGroup.POST("/get_groups", group.GetGroups)
//groupRouterGroup.POST("/get_group_all_member_list_by_split", group.GetGroupAllMemberListBySplit)
}
superGroupRouterGroup := r.Group("/super_group")

@ -1318,3 +1318,7 @@ func GetGroupAbstractInfo(c *gin.Context) {
c.JSON(http.StatusOK, resp)
return
}
func GetGroups(c *gin.Context) {
}

@ -23,49 +23,6 @@ import (
"github.com/gin-gonic/gin"
)
func DeleteUser(c *gin.Context) {
params := api.DeleteUsersReq{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
req := &rpc.DeleteUsersReq{}
utils.CopyStructFields(req, &params)
var ok bool
var errInfo string
ok, req.OpUserID, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
if !ok {
errMsg := req.OperationID + " " + "GetUserIDFromToken failed " + errInfo + " token:" + c.Request.Header.Get("token")
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
log.NewInfo(params.OperationID, "DeleteUser args ", req.String())
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImUserName, req.OperationID)
if etcdConn == nil {
errMsg := req.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(req.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := rpc.NewUserClient(etcdConn)
RpcResp, err := client.DeleteUsers(context.Background(), req)
if err != nil {
log.NewError(req.OperationID, "call delete users rpc server failed", err.Error())
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": "call delete users rpc server failed"})
return
}
resp := api.DeleteUsersResp{CommResp: api.CommResp{ErrCode: RpcResp.CommonResp.ErrCode, ErrMsg: RpcResp.CommonResp.ErrMsg}, FailedUserIDList: RpcResp.FailedUserIDList}
if len(RpcResp.FailedUserIDList) == 0 {
resp.FailedUserIDList = []string{}
}
log.NewInfo(req.OperationID, "DeleteUser api return", resp)
c.JSON(http.StatusOK, resp)
}
// @Summary 获取所有用户uid列表
// @Description 获取所有用户uid列表
// @Tags 用户相关

@ -463,13 +463,11 @@ func GetUsers(c *gin.Context) {
resp api.GetUsersResp
reqPb rpc.GetUsersReq
)
if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, "Bind failed ", err.Error(), req)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
var ok bool
var errInfo string
ok, _, errInfo = token_verify.GetUserIDFromToken(c.Request.Header.Get("token"), req.OperationID)
@ -479,9 +477,7 @@ func GetUsers(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.OperationID = req.OperationID
reqPb.UserID = req.UserID
reqPb.UserName = req.UserName
@ -499,7 +495,6 @@ func GetUsers(c *gin.Context) {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return
}
utils.CopyStructFields(&resp.Data.UserList, respPb.UserList)
resp.CommResp.ErrCode = respPb.CommonResp.ErrCode
resp.CommResp.ErrMsg = respPb.CommonResp.ErrMsg

@ -141,47 +141,6 @@ func GetGroupByName(c *gin.Context) {
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func CreateGroup(c *gin.Context) {
var (
req cms_api_struct.CreateGroupRequest
_ cms_api_struct.CreateGroupResponse
reqPb pbGroup.CreateGroupReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupInfo = &commonPb.GroupInfo{}
reqPb.GroupInfo.GroupName = req.GroupName
reqPb.GroupInfo.CreatorUserID = req.GroupMasterId
reqPb.OwnerUserID = req.GroupMasterId
reqPb.OpUserID = req.GroupMasterId
for _, v := range req.GroupMembers {
reqPb.InitMemberList = append(reqPb.InitMemberList, &pbGroup.GroupAddMemberInfo{
UserID: v,
RoleLevel: 1,
})
}
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.CreateGroup(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "CreateGroup failed", err.Error())
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func GetGroupMembers(c *gin.Context) {
var (
req cms_api_struct.GetGroupMembersRequest
@ -228,177 +187,3 @@ func GetGroupMembers(c *gin.Context) {
log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func AddGroupMembers(c *gin.Context) {
var (
req cms_api_struct.RemoveGroupMembersRequest
resp cms_api_struct.RemoveGroupMembersResponse
reqPb pbGroup.AddGroupMembersCMSReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo("", utils.GetSelfFuncName(), "req: ", req)
reqPb.UserIDList = req.Members
reqPb.GroupID = req.GroupId
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
respPb, err := client.AddGroupMembersCMS(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "AddGroupMembersCMS failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
resp.Success = respPb.Success
resp.Failed = respPb.Failed
log.NewInfo("", utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func RemoveGroupMembers(c *gin.Context) {
var (
req cms_api_struct.RemoveGroupMembersRequest
resp cms_api_struct.RemoveGroupMembersResponse
reqPb pbGroup.RemoveGroupMembersCMSReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.UserIDList = req.Members
reqPb.GroupID = req.GroupId
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
respPb, err := client.RemoveGroupMembersCMS(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "RemoveGroupMembersCMS failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
resp.Success = respPb.Success
resp.Failed = respPb.Failed
log.NewInfo("", utils.GetSelfFuncName(), "req: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
}
func SetGroupOwner(c *gin.Context) {
var (
req cms_api_struct.SetGroupMasterRequest
_ cms_api_struct.SetGroupMasterResponse
reqPb pbGroup.OperateUserRoleReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupID = req.GroupId
reqPb.UserID = req.UserId
reqPb.RoleLevel = constant.GroupOwner
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.OperateUserRole(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, constant.ErrServer, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func SetGroupOrdinaryUsers(c *gin.Context) {
var (
req cms_api_struct.SetGroupMemberRequest
_ cms_api_struct.AdminLoginResponse
reqPb pbGroup.OperateUserRoleReq
)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
reqPb.GroupID = req.GroupId
reqPb.UserID = req.UserId
reqPb.RoleLevel = constant.GroupOrdinaryUsers
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.OperateUserRole(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}
func AlterGroupInfo(c *gin.Context) {
var (
req cms_api_struct.AlterGroupInfoRequest
_ cms_api_struct.SetGroupMasterResponse
reqPb pbGroup.SetGroupInfoReq
)
reqPb.OperationID = utils.OperationIDGenerator()
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "req: ", req)
if err := c.BindJSON(&req); err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
return
}
reqPb.OpUserID = c.MustGet("userID").(string)
reqPb.GroupInfoForSet = &commonPb.GroupInfoForSet{
GroupID: req.GroupID,
GroupName: req.GroupName,
Introduction: req.Introduction,
Notification: req.Notification,
FaceURL: req.ProfilePhoto,
}
etcdConn := getcdv3.GetDefaultConn(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImGroupName, reqPb.OperationID)
if etcdConn == nil {
errMsg := reqPb.OperationID + "getcdv3.GetDefaultConn == nil"
log.NewError(reqPb.OperationID, errMsg)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pbGroup.NewGroupClient(etcdConn)
_, err := client.SetGroupInfo(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "DeleteGroup failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
return
}
openIMHttp.RespHttp200(c, constant.OK, nil)
}

@ -1,49 +0,0 @@
package organization
import (
"github.com/gin-gonic/gin"
)
func GetStaffs(c *gin.Context) {
}
func GetOrganizations(c *gin.Context) {
}
func GetSquads(c *gin.Context) {
}
func AlterStaff(c *gin.Context) {
}
func AddOrganization(c *gin.Context) {
}
func InquireOrganization(g *gin.Context) {
}
func AlterOrganization(c *gin.Context) {
}
func DeleteOrganization(g *gin.Context) {
}
func GetOrganizationSquads(c *gin.Context) {
}
func AlterStaffsInfo(c *gin.Context) {
}
func AddChildOrganization(c *gin.Context) {
}

@ -40,13 +40,13 @@ func NewGinRouter() *gin.Engine {
groupRouterGroup.GET("/get_groups", group.GetGroups)
groupRouterGroup.GET("/get_group_by_name", group.GetGroupByName)
groupRouterGroup.GET("/get_group_members", group.GetGroupMembers)
groupRouterGroup.POST("/create_group", group.CreateGroup)
groupRouterGroup.POST("/add_members", group.AddGroupMembers)
groupRouterGroup.POST("/remove_members", group.RemoveGroupMembers)
groupRouterGroup.POST("/get_members_in_group", group.GetGroupMembers)
groupRouterGroup.POST("/set_group_master", group.SetGroupOwner)
groupRouterGroup.POST("/set_group_ordinary_user", group.SetGroupOrdinaryUsers)
groupRouterGroup.POST("/alter_group_info", group.AlterGroupInfo)
// groupRouterGroup.POST("/create_group", group.CreateGroup)
// groupRouterGroup.POST("/add_members", group.AddGroupMembers)
// groupRouterGroup.POST("/remove_members", group.RemoveGroupMembers)
// groupRouterGroup.POST("/get_members_in_group", group.GetGroupMembers)
// groupRouterGroup.POST("/set_group_master", group.SetGroupOwner)
// groupRouterGroup.POST("/set_group_ordinary_user", group.SetGroupOrdinaryUsers)
// groupRouterGroup.POST("/alter_group_info", group.AlterGroupInfo)
}
userRouterGroup := r2.Group("/user")
{

@ -3,11 +3,9 @@ package statistics
import (
"Open_IM/pkg/cms_api_struct"
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
openIMHttp "Open_IM/pkg/common/http"
"Open_IM/pkg/common/log"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
pb "Open_IM/pkg/proto/statistics"
admin "Open_IM/pkg/proto/admin_cms"
"Open_IM/pkg/utils"
"context"
"net/http"
@ -20,12 +18,12 @@ func GetMessagesStatistics(c *gin.Context) {
var (
req cms_api_struct.GetMessageStatisticsRequest
resp cms_api_struct.GetMessageStatisticsResponse
reqPb pb.GetMessageStatisticsReq
reqPb admin.GetMessageStatisticsReq
)
reqPb.StatisticsReq = &pb.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
reqPb.OperationID = utils.OperationIDGenerator()
@ -38,20 +36,20 @@ func GetMessagesStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pb.NewUserClient(etcdConn)
client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetMessageStatistics(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetMessageStatistics failed", err.Error())
openIMHttp.RespHttp200(c, err, resp)
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
// utils.CopyStructFields(&resp, respPb)
resp.GroupMessageNum = int(respPb.GroupMessageNum)
resp.PrivateMessageNum = int(respPb.PrivateMessageNum)
for _, v := range respPb.PrivateMessageNumList {
resp.PrivateMessageNumList = append(resp.PrivateMessageNumList, struct {
Date string "json:\"date\""
MessageNum int "json:\"message_num\""
MessageNum int "json:\"messageNum\""
}{
Date: v.Date,
MessageNum: int(v.Num),
@ -60,26 +58,26 @@ func GetMessagesStatistics(c *gin.Context) {
for _, v := range respPb.GroupMessageNumList {
resp.GroupMessageNumList = append(resp.GroupMessageNumList, struct {
Date string "json:\"date\""
MessageNum int "json:\"message_num\""
MessageNum int "json:\"messageNum\""
}{
Date: v.Date,
MessageNum: int(v.Num),
})
}
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
}
func GetUserStatistics(c *gin.Context) {
var (
req cms_api_struct.GetUserStatisticsRequest
resp cms_api_struct.GetUserStatisticsResponse
reqPb pb.GetUserStatisticsReq
reqPb admin.GetUserStatisticsReq
)
reqPb.StatisticsReq = &pb.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
reqPb.OperationID = utils.OperationIDGenerator()
@ -92,21 +90,20 @@ func GetUserStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pb.NewUserClient(etcdConn)
client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetUserStatistics(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetUserStatistics failed", err.Error(), reqPb.String())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return
}
// utils.CopyStructFields(&resp, respPb)
resp.ActiveUserNum = int(respPb.ActiveUserNum)
resp.IncreaseUserNum = int(respPb.IncreaseUserNum)
resp.TotalUserNum = int(respPb.TotalUserNum)
for _, v := range respPb.ActiveUserNumList {
resp.ActiveUserNumList = append(resp.ActiveUserNumList, struct {
Date string "json:\"date\""
ActiveUserNum int "json:\"active_user_num\""
ActiveUserNum int "json:\"activeUserNum\""
}{
Date: v.Date,
ActiveUserNum: int(v.Num),
@ -115,7 +112,7 @@ func GetUserStatistics(c *gin.Context) {
for _, v := range respPb.IncreaseUserNumList {
resp.IncreaseUserNumList = append(resp.IncreaseUserNumList, struct {
Date string "json:\"date\""
IncreaseUserNum int "json:\"increase_user_num\""
IncreaseUserNum int "json:\"increaseUserNum\""
}{
Date: v.Date,
IncreaseUserNum: int(v.Num),
@ -124,26 +121,26 @@ func GetUserStatistics(c *gin.Context) {
for _, v := range respPb.TotalUserNumList {
resp.TotalUserNumList = append(resp.TotalUserNumList, struct {
Date string "json:\"date\""
TotalUserNum int "json:\"total_user_num\""
TotalUserNum int "json:\"totalUserNum\""
}{
Date: v.Date,
TotalUserNum: int(v.Num),
})
}
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
}
func GetGroupStatistics(c *gin.Context) {
var (
req cms_api_struct.GetGroupStatisticsRequest
resp cms_api_struct.GetGroupStatisticsResponse
reqPb pb.GetGroupStatisticsReq
reqPb admin.GetGroupStatisticsReq
)
reqPb.StatisticsReq = &pb.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil {
log.NewError("0", "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, "BindJSON failed ", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
reqPb.OperationID = utils.OperationIDGenerator()
@ -156,11 +153,11 @@ func GetGroupStatistics(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pb.NewUserClient(etcdConn)
client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetGroupStatistics(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error())
openIMHttp.RespHttp200(c, err, nil)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return
}
// utils.CopyStructFields(&resp, respPb)
@ -170,7 +167,7 @@ func GetGroupStatistics(c *gin.Context) {
resp.IncreaseGroupNumList = append(resp.IncreaseGroupNumList,
struct {
Date string "json:\"date\""
IncreaseGroupNum int "json:\"increase_group_num\""
IncreaseGroupNum int "json:\"increaseGroupNum\""
}{
Date: v.Date,
IncreaseGroupNum: int(v.Num),
@ -180,7 +177,7 @@ func GetGroupStatistics(c *gin.Context) {
resp.TotalGroupNumList = append(resp.TotalGroupNumList,
struct {
Date string "json:\"date\""
TotalGroupNum int "json:\"total_group_num\""
TotalGroupNum int "json:\"totalGroupNum\""
}{
Date: v.Date,
TotalGroupNum: int(v.Num),
@ -188,19 +185,19 @@ func GetGroupStatistics(c *gin.Context) {
}
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
}
func GetActiveUser(c *gin.Context) {
var (
req cms_api_struct.GetActiveUserRequest
resp cms_api_struct.GetActiveUserResponse
reqPb pb.GetActiveUserReq
reqPb admin.GetActiveUserReq
)
reqPb.StatisticsReq = &pb.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil {
log.NewError("0", "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.Bind(&req); err != nil {
log.NewError(req.OperationID, "BindJSON failed ", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
reqPb.OperationID = utils.OperationIDGenerator()
@ -213,28 +210,28 @@ func GetActiveUser(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pb.NewUserClient(etcdConn)
client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetActiveUser(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveUser failed ", err.Error())
openIMHttp.RespHttp200(c, err, nil)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return
}
utils.CopyStructFields(&resp.ActiveUserList, respPb.Users)
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
}
func GetActiveGroup(c *gin.Context) {
var (
req cms_api_struct.GetActiveGroupRequest
resp cms_api_struct.GetActiveGroupResponse
reqPb pb.GetActiveGroupReq
reqPb admin.GetActiveGroupReq
)
reqPb.StatisticsReq = &pb.StatisticsReq{}
if err := c.ShouldBindQuery(&req); err != nil {
reqPb.StatisticsReq = &admin.StatisticsReq{}
if err := c.Bind(&req); err != nil {
log.NewError("0", utils.GetSelfFuncName(), "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, nil)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
reqPb.OperationID = utils.OperationIDGenerator()
@ -247,18 +244,18 @@ func GetActiveGroup(c *gin.Context) {
c.JSON(http.StatusInternalServerError, gin.H{"errCode": 500, "errMsg": errMsg})
return
}
client := pb.NewUserClient(etcdConn)
client := admin.NewAdminCMSClient(etcdConn)
respPb, err := client.GetActiveGroup(context.Background(), &reqPb)
if err != nil {
log.NewError(reqPb.OperationID, utils.GetSelfFuncName(), "GetActiveGroup failed ", err.Error())
openIMHttp.RespHttp200(c, err, nil)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 500, "errMsg": err.Error()})
return
}
for _, group := range respPb.Groups {
resp.ActiveGroupList = append(resp.ActiveGroupList, struct {
GroupName string "json:\"group_name\""
GroupId string "json:\"group_id\""
MessageNum int "json:\"message_num\""
GroupName string "json:\"groupName\""
GroupId string "json:\"groupID\""
MessageNum int "json:\"messageNum\""
}{
GroupName: group.GroupName,
GroupId: group.GroupId,
@ -266,5 +263,5 @@ func GetActiveGroup(c *gin.Context) {
})
}
log.NewInfo(reqPb.OperationID, utils.GetSelfFuncName(), "resp: ", resp)
openIMHttp.RespHttp200(c, constant.OK, resp)
c.JSON(http.StatusOK, gin.H{"errCode": respPb.CommonResp.ErrCode, "errMsg": respPb.CommonResp.ErrMsg, "data": resp})
}

@ -54,7 +54,6 @@ func BlockUser(c *gin.Context) {
reqPb pb.BlockUserReq
)
if err := c.BindJSON(&req); err != nil {
fmt.Println(err)
log.NewError("0", "BindJSON failed ", err.Error())
openIMHttp.RespHttp200(c, constant.ErrArgs, resp)
return

@ -140,12 +140,12 @@ func (s *adminCMSServer) ReduceUserRegisterAddFriendIDList(_ context.Context, re
}
}
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "resp: ", req.String())
return resp, nil
return resp, nil
}
func (s *adminCMSServer) GetUserRegisterAddFriendIDList(_ context.Context, req *pbAdminCMS.GetUserRegisterAddFriendIDListReq) (*pbAdminCMS.GetUserRegisterAddFriendIDListResp, error) {
log.NewInfo(req.OperationID, utils.GetSelfFuncName(), "req: ", req.String())
resp := &pbAdminCMS.GetUserRegisterAddFriendIDListResp{UserInfoList: []*server_api_params.UserInfo{}}
resp := &pbAdminCMS.GetUserRegisterAddFriendIDListResp{}
userIDList, err := imdb.GetRegisterAddFriendList(req.Pagination.ShowNumber, req.Pagination.PageNumber)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
@ -230,11 +230,11 @@ func (s *adminCMSServer) GetChatLogs(_ context.Context, req *pbAdminCMS.GetChatL
continue
}
pbChatLog.RecvID = group.GroupID
pbChatLog.gr = group.GroupName
pbChatLog.GroupName = group.GroupName
}
resp.ChatLogs = append(resp.ChatLogs, pbChatLog)
}
resp.Pagination = &open_im_sdk.ResponsePagination{
resp.Pagination = &server_api_params.ResponsePagination{
CurrentPage: req.Pagination.PageNumber,
ShowNumber: req.Pagination.ShowNumber,
}
@ -249,13 +249,13 @@ func (s *adminCMSServer) GetActiveGroup(_ context.Context, req *pbAdminCMS.GetAc
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs)
return resp, nil
}
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime)
activeGroups, err := imdb.GetActiveGroups(fromTime, toTime, 12)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveGroups failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
for _, activeGroup := range activeGroups {
resp.Groups = append(resp.Groups,
@ -275,13 +275,13 @@ func (s *adminCMSServer) GetActiveUser(_ context.Context, req *pbAdminCMS.GetAct
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "time: ", fromTime, toTime)
activeUsers, err := imdb.GetActiveUsers(fromTime, toTime, 12)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUsers failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
for _, activeUser := range activeUsers {
resp.Users = append(resp.Users,
@ -388,17 +388,17 @@ func (s *adminCMSServer) GetGroupStatistics(_ context.Context, req *pbAdminCMS.G
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupStatistics failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs)
return resp, nil
}
increaseGroupNum, err := imdb.GetIncreaseGroupNum(fromTime, toTime.Add(time.Hour*24))
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseGroupNum failed", err.Error(), fromTime, toTime)
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
totalGroupNum, err := imdb.GetTotalGroupNum()
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
resp.IncreaseGroupNum = increaseGroupNum
resp.TotalGroupNum = totalGroupNum
@ -441,17 +441,17 @@ func (s *adminCMSServer) GetMessageStatistics(_ context.Context, req *pbAdminCMS
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), "times: ", fromTime, toTime)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs)
return resp, nil
}
privateMessageNum, err := imdb.GetPrivateMessageNum(fromTime, toTime.Add(time.Hour*24))
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetPrivateMessageNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
groupMessageNum, err := imdb.GetGroupMessageNum(fromTime, toTime.Add(time.Hour*24))
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetGroupMessageNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
log.NewDebug(req.OperationID, utils.GetSelfFuncName(), privateMessageNum, groupMessageNum)
resp.PrivateMessageNum = privateMessageNum
@ -493,22 +493,22 @@ func (s *adminCMSServer) GetUserStatistics(_ context.Context, req *pbAdminCMS.Ge
fromTime, toTime, err := ParseTimeFromTo(req.StatisticsReq.From, req.StatisticsReq.To)
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "ParseTimeFromTo failed", err.Error())
return resp, errors.WrapError(constant.ErrArgs)
return resp, nil
}
activeUserNum, err := imdb.GetActiveUserNum(fromTime, toTime.Add(time.Hour*24))
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetActiveUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
increaseUserNum, err := imdb.GetIncreaseUserNum(fromTime, toTime.Add(time.Hour*24))
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetIncreaseUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
totalUserNum, err := imdb.GetTotalUserNum()
if err != nil {
log.NewError(req.OperationID, utils.GetSelfFuncName(), "GetTotalUserNum failed", err.Error())
return resp, errors.WrapError(constant.ErrDB)
return resp, nil
}
resp.ActiveUserNum = activeUserNum
resp.TotalUserNum = totalUserNum

@ -1,10 +1,14 @@
package cms_api_struct
import server_api_params "Open_IM/pkg/proto/sdk_ws"
import (
"Open_IM/pkg/base_info"
server_api_params "Open_IM/pkg/proto/sdk_ws"
)
type AdminLoginRequest struct {
AdminName string `json:"admin_name" binding:"required"`
Secret string `json:"secret" binding:"required"`
AdminName string `json:"adminName" binding:"required"`
Secret string `json:"secret" binding:"required"`
OperationID string `json:"operationID" binding:"required"`
}
type AdminLoginResponse struct {
@ -30,10 +34,10 @@ type ReduceUserRegisterAddFriendIDListResponse struct {
type GetUserRegisterAddFriendIDListRequest struct {
OperationID string `json:"operationID" binding:"required"`
RequestPaginationBody
base_info.RequestPagination
}
type GetUserRegisterAddFriendIDListResponse struct {
Users []*server_api_params.UserInfo `json:"users"`
ResponsePagination
base_info.ResponsePagination
}

@ -16,7 +16,7 @@ type GetChatLogsReq struct {
}
type GetChatLogsResp struct {
ChatLogs []*pbCommon.MsgData `json:"chat_logs"`
ChatLogsNum int `json:"log_nums"`
ChatLogs []*pbCommon.MsgData `json:"chatLogs"`
ChatLogsNum int `json:"logNums"`
ResponsePagination
}

@ -1,25 +0,0 @@
package cms_api_struct
type GetStaffsResponse struct {
StaffsList []struct {
ProfilePhoto string `json:"profile_photo"`
NickName string `json:"nick_name"`
StaffId int `json:"staff_id"`
Position string `json:"position"`
EntryTime string `json:"entry_time"`
} `json:"staffs_list"`
}
type GetOrganizationsResponse struct {
OrganizationList []struct {
OrganizationId int `json:"organization_id"`
OrganizationName string `json:"organization_name"`
} `json:"organization_list"`
}
type SquadResponse struct {
SquadList []struct {
SquadId int `json:"squad_id"`
SquadName string `json:"squad_name"`
} `json:"squad_list"`
}

@ -1,8 +1,9 @@
package cms_api_struct
type GetStatisticsRequest struct {
From string `form:"from" binding:"required"`
To string `form:"to" binding:"required"`
From string `json:"from" binding:"required"`
To string `json:"to" binding:"required"`
OperationID string `json:"operationID" binding:"required"`
}
type GetMessageStatisticsRequest struct {
@ -10,16 +11,16 @@ type GetMessageStatisticsRequest struct {
}
type GetMessageStatisticsResponse struct {
PrivateMessageNum int `json:"private_message_num"`
GroupMessageNum int `json:"group_message_num"`
PrivateMessageNum int `json:"privateMessageNum"`
GroupMessageNum int `json:"groupMessageNum"`
PrivateMessageNumList []struct {
Date string `json:"date"`
MessageNum int `json:"message_num"`
} `json:"private_message_num_list"`
MessageNum int `json:"messageNum"`
} `json:"privateMessageNumList"`
GroupMessageNumList []struct {
Date string `json:"date"`
MessageNum int `json:"message_num"`
} `json:"group_message_num_list"`
MessageNum int `json:"messageNum"`
} `json:"groupMessageNumList"`
}
type GetUserStatisticsRequest struct {
@ -27,21 +28,21 @@ type GetUserStatisticsRequest struct {
}
type GetUserStatisticsResponse struct {
IncreaseUserNum int `json:"increase_user_num"`
ActiveUserNum int `json:"active_user_num"`
TotalUserNum int `json:"total_user_num"`
IncreaseUserNum int `json:"increaseUserNum"`
ActiveUserNum int `json:"activeUserNum"`
TotalUserNum int `json:"totalUserNum"`
IncreaseUserNumList []struct {
Date string `json:"date"`
IncreaseUserNum int `json:"increase_user_num"`
} `json:"increase_user_num_list"`
IncreaseUserNum int `json:"increaseUserNum"`
} `json:"increaseUserNumList"`
ActiveUserNumList []struct {
Date string `json:"date"`
ActiveUserNum int `json:"active_user_num"`
} `json:"active_user_num_list"`
ActiveUserNum int `json:"activeUserNum"`
} `json:"activeUserNumList"`
TotalUserNumList []struct {
Date string `json:"date"`
TotalUserNum int `json:"total_user_num"`
} `json:"total_user_num_list"`
TotalUserNum int `json:"totalUserNum"`
} `json:"totalUserNumList"`
}
type GetGroupStatisticsRequest struct {
@ -50,16 +51,16 @@ type GetGroupStatisticsRequest struct {
// 群聊统计
type GetGroupStatisticsResponse struct {
IncreaseGroupNum int `json:"increase_group_num"`
TotalGroupNum int `json:"total_group_num"`
IncreaseGroupNum int `json:"increaseGroupNum"`
TotalGroupNum int `json:"totalGroupNum"`
IncreaseGroupNumList []struct {
Date string `json:"date"`
IncreaseGroupNum int `json:"increase_group_num"`
} `json:"increase_group_num_list"`
IncreaseGroupNum int `json:"increaseGroupNum"`
} `json:"increaseGroupNumList"`
TotalGroupNumList []struct {
Date string `json:"date"`
TotalGroupNum int `json:"total_group_num"`
} `json:"total_group_num_list"`
TotalGroupNum int `json:"totalGroupNum"`
} `json:"totalGroupNumList"`
}
type GetActiveUserRequest struct {
@ -69,10 +70,10 @@ type GetActiveUserRequest struct {
type GetActiveUserResponse struct {
ActiveUserList []struct {
NickName string `json:"nick_name"`
UserId string `json:"user_id"`
MessageNum int `json:"message_num"`
} `json:"active_user_list"`
NickName string `json:"nickName"`
UserId string `json:"userID"`
MessageNum int `json:"messageNum"`
} `json:"activeUserList"`
}
type GetActiveGroupRequest struct {
@ -82,8 +83,8 @@ type GetActiveGroupRequest struct {
type GetActiveGroupResponse struct {
ActiveGroupList []struct {
GroupName string `json:"group_name"`
GroupId string `json:"group_id"`
MessageNum int `json:"message_num"`
} `json:"active_group_list"`
GroupName string `json:"groupName"`
GroupId string `json:"groupID"`
MessageNum int `json:"messageNum"`
} `json:"activeGroupList"`
}

@ -2,7 +2,6 @@ package log
import (
"Open_IM/pkg/common/config"
"bufio"
//"bufio"
"fmt"
@ -35,13 +34,13 @@ func loggerInit(moduleName string) *Logger {
//All logs will be printed
logger.SetLevel(logrus.Level(config.Config.Log.RemainLogLevel))
//Close std console output
src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
panic(err.Error())
}
writer := bufio.NewWriter(src)
logger.SetOutput(writer)
//logger.SetOutput(os.Stdout)
// src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
// if err != nil {
// panic(err.Error())
// }
// writer := bufio.NewWriter(src)
// logger.SetOutput(writer)
logger.SetOutput(os.Stdout)
//Log Console Print Style Setting
logger.SetFormatter(&nested.Formatter{
TimestampFormat: "2006-01-02 15:04:05.000",

@ -36,7 +36,7 @@ func (m *CommonResp) Reset() { *m = CommonResp{} }
func (m *CommonResp) String() string { return proto.CompactTextString(m) }
func (*CommonResp) ProtoMessage() {}
func (*CommonResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{0}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{0}
}
func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -83,7 +83,7 @@ func (m *AdminLoginReq) Reset() { *m = AdminLoginReq{} }
func (m *AdminLoginReq) String() string { return proto.CompactTextString(m) }
func (*AdminLoginReq) ProtoMessage() {}
func (*AdminLoginReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{1}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{1}
}
func (m *AdminLoginReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AdminLoginReq.Unmarshal(m, b)
@ -136,7 +136,7 @@ func (m *AdminLoginResp) Reset() { *m = AdminLoginResp{} }
func (m *AdminLoginResp) String() string { return proto.CompactTextString(m) }
func (*AdminLoginResp) ProtoMessage() {}
func (*AdminLoginResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{2}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{2}
}
func (m *AdminLoginResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AdminLoginResp.Unmarshal(m, b)
@ -182,7 +182,7 @@ func (m *AddUserRegisterAddFriendIDListReq) Reset() { *m = AddUserRegist
func (m *AddUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*AddUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*AddUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{3}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{3}
}
func (m *AddUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -227,7 +227,7 @@ func (m *AddUserRegisterAddFriendIDListResp) Reset() { *m = AddUserRegis
func (m *AddUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*AddUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*AddUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{4}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{4}
}
func (m *AddUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_AddUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -267,7 +267,7 @@ func (m *ReduceUserRegisterAddFriendIDListReq) Reset() { *m = ReduceUser
func (m *ReduceUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*ReduceUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*ReduceUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{5}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{5}
}
func (m *ReduceUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReduceUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -319,7 +319,7 @@ func (m *ReduceUserRegisterAddFriendIDListResp) Reset() { *m = ReduceUse
func (m *ReduceUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*ReduceUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*ReduceUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{6}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{6}
}
func (m *ReduceUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ReduceUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -358,7 +358,7 @@ func (m *GetUserRegisterAddFriendIDListReq) Reset() { *m = GetUserRegist
func (m *GetUserRegisterAddFriendIDListReq) String() string { return proto.CompactTextString(m) }
func (*GetUserRegisterAddFriendIDListReq) ProtoMessage() {}
func (*GetUserRegisterAddFriendIDListReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{7}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{7}
}
func (m *GetUserRegisterAddFriendIDListReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserRegisterAddFriendIDListReq.Unmarshal(m, b)
@ -405,7 +405,7 @@ func (m *GetUserRegisterAddFriendIDListResp) Reset() { *m = GetUserRegis
func (m *GetUserRegisterAddFriendIDListResp) String() string { return proto.CompactTextString(m) }
func (*GetUserRegisterAddFriendIDListResp) ProtoMessage() {}
func (*GetUserRegisterAddFriendIDListResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{8}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{8}
}
func (m *GetUserRegisterAddFriendIDListResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserRegisterAddFriendIDListResp.Unmarshal(m, b)
@ -464,7 +464,7 @@ func (m *GetChatLogsReq) Reset() { *m = GetChatLogsReq{} }
func (m *GetChatLogsReq) String() string { return proto.CompactTextString(m) }
func (*GetChatLogsReq) ProtoMessage() {}
func (*GetChatLogsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{9}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{9}
}
func (m *GetChatLogsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetChatLogsReq.Unmarshal(m, b)
@ -548,14 +548,15 @@ type ChatLog struct {
SenderPlatformID int32 `protobuf:"varint,5,opt,name=SenderPlatformID" json:"SenderPlatformID,omitempty"`
SenderNickname string `protobuf:"bytes,6,opt,name=SenderNickname" json:"SenderNickname,omitempty"`
SenderFaceURL string `protobuf:"bytes,7,opt,name=SenderFaceURL" json:"SenderFaceURL,omitempty"`
SessionType int32 `protobuf:"varint,8,opt,name=SessionType" json:"SessionType,omitempty"`
MsgFrom int32 `protobuf:"varint,9,opt,name=MsgFrom" json:"MsgFrom,omitempty"`
ContentType int32 `protobuf:"varint,10,opt,name=ContentType" json:"ContentType,omitempty"`
Content string `protobuf:"bytes,11,opt,name=Content" json:"Content,omitempty"`
Status int32 `protobuf:"varint,12,opt,name=Status" json:"Status,omitempty"`
SendTime int64 `protobuf:"varint,13,opt,name=SendTime" json:"SendTime,omitempty"`
CreateTime int64 `protobuf:"varint,14,opt,name=CreateTime" json:"CreateTime,omitempty"`
Ex string `protobuf:"bytes,15,opt,name=Ex" json:"Ex,omitempty"`
GroupName string `protobuf:"bytes,8,opt,name=GroupName" json:"GroupName,omitempty"`
SessionType int32 `protobuf:"varint,9,opt,name=SessionType" json:"SessionType,omitempty"`
MsgFrom int32 `protobuf:"varint,10,opt,name=MsgFrom" json:"MsgFrom,omitempty"`
ContentType int32 `protobuf:"varint,11,opt,name=ContentType" json:"ContentType,omitempty"`
Content string `protobuf:"bytes,12,opt,name=Content" json:"Content,omitempty"`
Status int32 `protobuf:"varint,13,opt,name=Status" json:"Status,omitempty"`
SendTime int64 `protobuf:"varint,14,opt,name=SendTime" json:"SendTime,omitempty"`
CreateTime int64 `protobuf:"varint,15,opt,name=CreateTime" json:"CreateTime,omitempty"`
Ex string `protobuf:"bytes,16,opt,name=Ex" json:"Ex,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
@ -565,7 +566,7 @@ func (m *ChatLog) Reset() { *m = ChatLog{} }
func (m *ChatLog) String() string { return proto.CompactTextString(m) }
func (*ChatLog) ProtoMessage() {}
func (*ChatLog) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{10}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{10}
}
func (m *ChatLog) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_ChatLog.Unmarshal(m, b)
@ -634,6 +635,13 @@ func (m *ChatLog) GetSenderFaceURL() string {
return ""
}
func (m *ChatLog) GetGroupName() string {
if m != nil {
return m.GroupName
}
return ""
}
func (m *ChatLog) GetSessionType() int32 {
if m != nil {
return m.SessionType
@ -704,7 +712,7 @@ func (m *GetChatLogsResp) Reset() { *m = GetChatLogsResp{} }
func (m *GetChatLogsResp) String() string { return proto.CompactTextString(m) }
func (*GetChatLogsResp) ProtoMessage() {}
func (*GetChatLogsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{11}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{11}
}
func (m *GetChatLogsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetChatLogsResp.Unmarshal(m, b)
@ -764,7 +772,7 @@ func (m *StatisticsReq) Reset() { *m = StatisticsReq{} }
func (m *StatisticsReq) String() string { return proto.CompactTextString(m) }
func (*StatisticsReq) ProtoMessage() {}
func (*StatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{12}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{12}
}
func (m *StatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_StatisticsReq.Unmarshal(m, b)
@ -810,7 +818,7 @@ func (m *GetActiveUserReq) Reset() { *m = GetActiveUserReq{} }
func (m *GetActiveUserReq) String() string { return proto.CompactTextString(m) }
func (*GetActiveUserReq) ProtoMessage() {}
func (*GetActiveUserReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{13}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{13}
}
func (m *GetActiveUserReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveUserReq.Unmarshal(m, b)
@ -857,7 +865,7 @@ func (m *UserResp) Reset() { *m = UserResp{} }
func (m *UserResp) String() string { return proto.CompactTextString(m) }
func (*UserResp) ProtoMessage() {}
func (*UserResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{14}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{14}
}
func (m *UserResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UserResp.Unmarshal(m, b)
@ -910,7 +918,7 @@ func (m *GetActiveUserResp) Reset() { *m = GetActiveUserResp{} }
func (m *GetActiveUserResp) String() string { return proto.CompactTextString(m) }
func (*GetActiveUserResp) ProtoMessage() {}
func (*GetActiveUserResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{15}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{15}
}
func (m *GetActiveUserResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveUserResp.Unmarshal(m, b)
@ -956,7 +964,7 @@ func (m *GetActiveGroupReq) Reset() { *m = GetActiveGroupReq{} }
func (m *GetActiveGroupReq) String() string { return proto.CompactTextString(m) }
func (*GetActiveGroupReq) ProtoMessage() {}
func (*GetActiveGroupReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{16}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{16}
}
func (m *GetActiveGroupReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveGroupReq.Unmarshal(m, b)
@ -1004,7 +1012,7 @@ func (m *GroupResp) Reset() { *m = GroupResp{} }
func (m *GroupResp) String() string { return proto.CompactTextString(m) }
func (*GroupResp) ProtoMessage() {}
func (*GroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{17}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{17}
}
func (m *GroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GroupResp.Unmarshal(m, b)
@ -1064,7 +1072,7 @@ func (m *GetActiveGroupResp) Reset() { *m = GetActiveGroupResp{} }
func (m *GetActiveGroupResp) String() string { return proto.CompactTextString(m) }
func (*GetActiveGroupResp) ProtoMessage() {}
func (*GetActiveGroupResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{18}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{18}
}
func (m *GetActiveGroupResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetActiveGroupResp.Unmarshal(m, b)
@ -1110,7 +1118,7 @@ func (m *DateNumList) Reset() { *m = DateNumList{} }
func (m *DateNumList) String() string { return proto.CompactTextString(m) }
func (*DateNumList) ProtoMessage() {}
func (*DateNumList) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{19}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{19}
}
func (m *DateNumList) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DateNumList.Unmarshal(m, b)
@ -1156,7 +1164,7 @@ func (m *GetMessageStatisticsReq) Reset() { *m = GetMessageStatisticsReq
func (m *GetMessageStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetMessageStatisticsReq) ProtoMessage() {}
func (*GetMessageStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{20}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{20}
}
func (m *GetMessageStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMessageStatisticsReq.Unmarshal(m, b)
@ -1205,7 +1213,7 @@ func (m *GetMessageStatisticsResp) Reset() { *m = GetMessageStatisticsRe
func (m *GetMessageStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetMessageStatisticsResp) ProtoMessage() {}
func (*GetMessageStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{21}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{21}
}
func (m *GetMessageStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetMessageStatisticsResp.Unmarshal(m, b)
@ -1272,7 +1280,7 @@ func (m *GetGroupStatisticsReq) Reset() { *m = GetGroupStatisticsReq{} }
func (m *GetGroupStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetGroupStatisticsReq) ProtoMessage() {}
func (*GetGroupStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{22}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{22}
}
func (m *GetGroupStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupStatisticsReq.Unmarshal(m, b)
@ -1321,7 +1329,7 @@ func (m *GetGroupStatisticsResp) Reset() { *m = GetGroupStatisticsResp{}
func (m *GetGroupStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetGroupStatisticsResp) ProtoMessage() {}
func (*GetGroupStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{23}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{23}
}
func (m *GetGroupStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetGroupStatisticsResp.Unmarshal(m, b)
@ -1388,7 +1396,7 @@ func (m *GetUserStatisticsReq) Reset() { *m = GetUserStatisticsReq{} }
func (m *GetUserStatisticsReq) String() string { return proto.CompactTextString(m) }
func (*GetUserStatisticsReq) ProtoMessage() {}
func (*GetUserStatisticsReq) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{24}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{24}
}
func (m *GetUserStatisticsReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserStatisticsReq.Unmarshal(m, b)
@ -1439,7 +1447,7 @@ func (m *GetUserStatisticsResp) Reset() { *m = GetUserStatisticsResp{} }
func (m *GetUserStatisticsResp) String() string { return proto.CompactTextString(m) }
func (*GetUserStatisticsResp) ProtoMessage() {}
func (*GetUserStatisticsResp) Descriptor() ([]byte, []int) {
return fileDescriptor_admin_cms_1a9119d2c1ff8ffc, []int{25}
return fileDescriptor_admin_cms_a6bac7cb5a282446, []int{25}
}
func (m *GetUserStatisticsResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserStatisticsResp.Unmarshal(m, b)
@ -1907,97 +1915,98 @@ var _AdminCMS_serviceDesc = grpc.ServiceDesc{
}
func init() {
proto.RegisterFile("admin_cms/admin_cms.proto", fileDescriptor_admin_cms_1a9119d2c1ff8ffc)
proto.RegisterFile("admin_cms/admin_cms.proto", fileDescriptor_admin_cms_a6bac7cb5a282446)
}
var fileDescriptor_admin_cms_1a9119d2c1ff8ffc = []byte{
// 1408 bytes of a gzipped FileDescriptorProto
var fileDescriptor_admin_cms_a6bac7cb5a282446 = []byte{
// 1416 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xbc, 0x58, 0xcd, 0x6e, 0xdb, 0xc6,
0x13, 0x07, 0x25, 0xcb, 0x92, 0x46, 0xb1, 0x63, 0x6f, 0xec, 0x84, 0x51, 0xf2, 0xcf, 0x5f, 0x66,
0x13, 0x07, 0x25, 0xcb, 0xb2, 0x46, 0xb1, 0x63, 0x6f, 0xec, 0x84, 0x51, 0xf2, 0xcf, 0x5f, 0x66,
0x93, 0x42, 0x2d, 0x52, 0xa9, 0x70, 0xd0, 0x53, 0x81, 0x14, 0x8e, 0x94, 0xa8, 0x0a, 0xac, 0xc4,
0x60, 0x92, 0x02, 0x6d, 0xd1, 0x08, 0xac, 0xb4, 0x51, 0x09, 0x47, 0xe4, 0x9a, 0xbb, 0x72, 0x1c,
0x14, 0xbd, 0xe6, 0xd2, 0x7b, 0x0f, 0x3d, 0xf6, 0x15, 0xfa, 0x04, 0x3d, 0xf6, 0x29, 0x8a, 0xa2,
0x2f, 0x52, 0xec, 0x2e, 0x3f, 0x76, 0x49, 0x5a, 0x92, 0x1d, 0xd4, 0x37, 0xce, 0xec, 0x7c, 0xec,
0xfc, 0x7e, 0x33, 0xcb, 0x25, 0xe1, 0xba, 0x33, 0x9e, 0xba, 0xde, 0x70, 0x34, 0xa5, 0xed, 0xf8,
0xa9, 0x45, 0x02, 0x9f, 0xf9, 0xa8, 0x1a, 0x2b, 0xea, 0x3b, 0x4f, 0x09, 0xf6, 0x86, 0xfd, 0x41,
0x9b, 0x1c, 0x4e, 0xda, 0x62, 0xb5, 0x4d, 0xc7, 0x87, 0xc3, 0x37, 0xb4, 0xfd, 0x26, 0xb4, 0xb6,
0xee, 0x03, 0x74, 0xfc, 0xe9, 0xd4, 0xf7, 0x6c, 0x4c, 0x09, 0x32, 0xa1, 0x8c, 0x83, 0xa0, 0xe3,
0x8f, 0xb1, 0x69, 0x34, 0x8c, 0x66, 0xc9, 0x8e, 0x44, 0x74, 0x15, 0x56, 0x71, 0x10, 0x0c, 0xe8,
0xc4, 0x2c, 0x34, 0x8c, 0x66, 0xd5, 0x0e, 0x25, 0x6b, 0x04, 0x6b, 0x7b, 0x3c, 0xdf, 0xbe, 0x3f,
0x71, 0x3d, 0x1b, 0x1f, 0xa1, 0x06, 0xd4, 0x9e, 0x12, 0x1c, 0x38, 0xcc, 0xf5, 0xbd, 0x7e, 0x57,
0x84, 0xa9, 0xda, 0xaa, 0x8a, 0x27, 0x11, 0x2e, 0xfd, 0x6e, 0x18, 0x2b, 0x12, 0x79, 0x92, 0x67,
0x78, 0x14, 0x60, 0x66, 0x16, 0x65, 0x12, 0x29, 0x59, 0xdf, 0xc1, 0xba, 0x9a, 0x84, 0x12, 0xb4,
0x05, 0x25, 0xe6, 0x1f, 0x62, 0x2f, 0x8c, 0x2f, 0x05, 0xf4, 0x19, 0xc0, 0x28, 0x2e, 0x46, 0x04,
0xaf, 0xed, 0x6e, 0xb7, 0x12, 0x80, 0x92, 0x4a, 0x6d, 0xc5, 0xd0, 0xc2, 0xb0, 0xb3, 0x37, 0x1e,
0xbf, 0xa0, 0x38, 0xb0, 0xf1, 0xc4, 0xa5, 0x0c, 0x07, 0x7b, 0xe3, 0xf1, 0xa3, 0xc0, 0xc5, 0xde,
0xb8, 0xdf, 0xdd, 0x77, 0x29, 0x0b, 0xeb, 0xf2, 0xb3, 0x75, 0x29, 0x2a, 0x74, 0x0b, 0x60, 0x46,
0x71, 0x20, 0x5d, 0xcc, 0x42, 0xa3, 0xd8, 0xac, 0xda, 0x8a, 0xc6, 0xfa, 0x16, 0xac, 0x45, 0x69,
0x28, 0x49, 0xd5, 0x60, 0x2c, 0x5b, 0xc3, 0x3b, 0x03, 0x6e, 0xdb, 0x78, 0x3c, 0x1b, 0xe1, 0xf7,
0xae, 0xe3, 0x26, 0x54, 0x63, 0x51, 0x80, 0x58, 0xb2, 0x13, 0x45, 0xaa, 0xca, 0x62, 0xa6, 0xca,
0x97, 0x70, 0x67, 0x89, 0x7d, 0x9c, 0xbf, 0xd0, 0x9f, 0x0d, 0xd8, 0xe9, 0x61, 0xf6, 0xde, 0x55,
0x76, 0x01, 0x88, 0x33, 0x71, 0xbd, 0xa4, 0xcc, 0xda, 0xee, 0xed, 0x16, 0xc5, 0xc1, 0x31, 0x0e,
0x86, 0x0e, 0x71, 0x87, 0xc4, 0x09, 0x9c, 0x29, 0x6d, 0xd9, 0xf8, 0x68, 0x86, 0x29, 0x3b, 0x88,
0x6d, 0x6d, 0xc5, 0xcf, 0xfa, 0xc7, 0x00, 0x6b, 0xd1, 0x6e, 0x28, 0x41, 0x5f, 0xc0, 0x25, 0x01,
0x91, 0xf7, 0xca, 0x17, 0xb0, 0x19, 0x8d, 0x62, 0xb3, 0xb6, 0x7b, 0x23, 0x27, 0xdd, 0x8b, 0xd0,
0xcc, 0xd6, 0x1c, 0xd0, 0xc3, 0x9c, 0xdd, 0xde, 0xc9, 0xdd, 0x2d, 0x25, 0xbe, 0x47, 0x71, 0xfe,
0x76, 0x53, 0x98, 0x17, 0x97, 0xc5, 0xfc, 0xb7, 0x02, 0xac, 0xf7, 0x30, 0xeb, 0xfc, 0xe0, 0xb0,
0x7d, 0x7f, 0x42, 0x39, 0xc0, 0x26, 0x94, 0x3b, 0xbe, 0xc7, 0xb0, 0xc7, 0x42, 0x70, 0x23, 0x51,
0x0e, 0x31, 0xaf, 0x3e, 0x3a, 0x29, 0xa4, 0xc4, 0xf5, 0x36, 0x1e, 0x1d, 0xf7, 0xbb, 0xd1, 0x70,
0x4b, 0x09, 0xd5, 0xa1, 0xc2, 0x2d, 0x9e, 0xbb, 0x53, 0x6c, 0xae, 0x88, 0x95, 0x58, 0xe6, 0x34,
0x3e, 0xc3, 0x94, 0xba, 0xbe, 0xf7, 0xfc, 0x2d, 0xc1, 0x66, 0x49, 0x34, 0xa3, 0xaa, 0xe2, 0x16,
0x61, 0x62, 0x61, 0xb1, 0x2a, 0x2d, 0x14, 0x15, 0x27, 0x3a, 0x41, 0xc3, 0x2c, 0x9f, 0x85, 0xe8,
0xe4, 0x39, 0x7d, 0xac, 0x55, 0x32, 0xc7, 0x9a, 0xf5, 0x57, 0x11, 0xca, 0x21, 0x42, 0x72, 0xdf,
0x3c, 0xc1, 0x80, 0x4e, 0x92, 0xf6, 0x53, 0x54, 0xe8, 0x2e, 0x6c, 0x52, 0x16, 0xb8, 0xde, 0xa4,
0xf3, 0xda, 0xc5, 0x1e, 0x93, 0x76, 0x12, 0xb0, 0xec, 0x82, 0x82, 0x69, 0xf1, 0x14, 0x4c, 0x57,
0x34, 0x4c, 0x3f, 0x86, 0x0d, 0x6e, 0x81, 0x83, 0x83, 0xd7, 0x0e, 0x7b, 0xe5, 0x07, 0xd3, 0x7e,
0x37, 0x04, 0x2f, 0xa3, 0x47, 0x1f, 0xc2, 0xba, 0xd4, 0x3d, 0x71, 0x47, 0x87, 0x9e, 0x33, 0x95,
0x20, 0x56, 0xed, 0x94, 0x16, 0xdd, 0x86, 0x35, 0xa9, 0x79, 0xe4, 0x8c, 0xf0, 0x0b, 0x7b, 0x5f,
0x40, 0x59, 0xb5, 0x75, 0x65, 0x9a, 0xb1, 0x4a, 0x96, 0x31, 0x13, 0xca, 0x03, 0x3a, 0x79, 0x14,
0xf8, 0x53, 0xb3, 0x2a, 0xdf, 0x31, 0xa1, 0x98, 0xe6, 0x12, 0xb2, 0x5c, 0x2a, 0x5d, 0x57, 0xcb,
0x76, 0x1d, 0x73, 0xd8, 0x8c, 0x9a, 0x97, 0x84, 0x5b, 0x28, 0x69, 0xdd, 0xb5, 0xd6, 0x30, 0x9a,
0x45, 0xa5, 0xbb, 0x6e, 0x01, 0x74, 0x02, 0xec, 0x30, 0x2c, 0x56, 0xd7, 0xc5, 0xaa, 0xa2, 0x41,
0xeb, 0x50, 0x78, 0x78, 0x62, 0x5e, 0x16, 0x89, 0x0a, 0x0f, 0x4f, 0xac, 0xbf, 0x0d, 0xb8, 0xac,
0x8d, 0x01, 0x25, 0xa8, 0x05, 0x95, 0x48, 0x0e, 0xa7, 0x1a, 0xa9, 0xf3, 0x24, 0x97, 0xec, 0xd8,
0x86, 0x0f, 0xf2, 0xc1, 0x79, 0x07, 0x59, 0x6f, 0xc7, 0x28, 0xe4, 0x93, 0xd9, 0x54, 0x74, 0x05,
0x87, 0x2a, 0x51, 0xf1, 0x51, 0x4f, 0xa6, 0x59, 0xb4, 0xc7, 0xe9, 0xa3, 0x9e, 0x3c, 0x5b, 0xf7,
0x60, 0x8d, 0x23, 0xe7, 0x52, 0xe6, 0x8e, 0xc4, 0xa0, 0x23, 0x58, 0x79, 0xc5, 0xb9, 0x92, 0x3d,
0x2c, 0x9e, 0x39, 0x30, 0xcc, 0x0f, 0xbb, 0xb5, 0xc0, 0x7c, 0x8b, 0xc1, 0x46, 0x0f, 0xb3, 0xbd,
0x11, 0x73, 0x8f, 0xc3, 0x63, 0xff, 0x08, 0xdd, 0x4f, 0x05, 0x0a, 0x4f, 0x78, 0x53, 0xd9, 0x82,
0xb6, 0x6e, 0xa7, 0xf2, 0xa6, 0x06, 0xae, 0x90, 0x1d, 0xb8, 0x97, 0x50, 0x91, 0xc9, 0x28, 0xe1,
0x34, 0xf3, 0x46, 0x7d, 0xc2, 0xdb, 0x57, 0xee, 0x34, 0x96, 0x79, 0x6b, 0x88, 0x53, 0x75, 0x1c,
0x1d, 0x48, 0x52, 0xe2, 0xf4, 0x0f, 0x30, 0xa5, 0xce, 0x04, 0x27, 0x10, 0x2a, 0x1a, 0x6b, 0x06,
0x9b, 0xa9, 0xaa, 0x28, 0x41, 0x1f, 0x41, 0x89, 0x3f, 0x47, 0x64, 0x5f, 0x51, 0xca, 0x89, 0x6c,
0x6c, 0x69, 0x91, 0x62, 0xa0, 0xb0, 0x2c, 0x03, 0x6a, 0xda, 0x5e, 0xe0, 0xcf, 0xc8, 0xc5, 0xa0,
0xf9, 0xab, 0x01, 0xd5, 0x30, 0x1d, 0x25, 0xfc, 0x0e, 0x20, 0x04, 0x05, 0xd0, 0x44, 0xc1, 0xc7,
0x50, 0x08, 0x31, 0xa4, 0x91, 0xb8, 0x08, 0xd3, 0xf3, 0x76, 0xe5, 0x5b, 0x40, 0x69, 0x4c, 0x28,
0x41, 0x77, 0x61, 0x55, 0x08, 0x11, 0x19, 0x5b, 0x4a, 0xa0, 0xd8, 0xca, 0x0e, 0x6d, 0xce, 0x4b,
0xc7, 0x3d, 0xa8, 0x75, 0x1d, 0xc6, 0x37, 0x2f, 0x5e, 0xc4, 0x08, 0x56, 0xb8, 0x18, 0x8d, 0x03,
0x7f, 0x46, 0x1b, 0x50, 0xe4, 0xd5, 0xca, 0xab, 0x12, 0x7f, 0xb4, 0x7e, 0x84, 0x6b, 0x3d, 0xcc,
0xc2, 0xba, 0x75, 0x26, 0xfe, 0x7b, 0x26, 0xff, 0x28, 0x80, 0x99, 0x9f, 0x5d, 0x60, 0xb6, 0x79,
0x10, 0xb8, 0xc7, 0x0e, 0xc3, 0x0a, 0x4f, 0xf2, 0xae, 0x9f, 0x5d, 0x40, 0x4d, 0xb8, 0x2c, 0xd0,
0x53, 0x6c, 0x65, 0x95, 0x69, 0x35, 0xda, 0x87, 0xed, 0x8c, 0x7b, 0x7c, 0x43, 0xac, 0xed, 0x5e,
0x55, 0xca, 0x53, 0xe0, 0xb4, 0xf3, 0x9d, 0xd0, 0x97, 0x70, 0x25, 0x95, 0x40, 0xc4, 0x5a, 0x99,
0x1b, 0x2b, 0xcf, 0x25, 0xc5, 0x7a, 0x69, 0xf9, 0x86, 0xdb, 0xee, 0x61, 0x26, 0x02, 0x5e, 0x34,
0x7d, 0xbf, 0x17, 0xe0, 0x6a, 0x5e, 0x6e, 0x4a, 0xf8, 0x6b, 0xbd, 0xef, 0x8d, 0x02, 0xec, 0x50,
0x39, 0x05, 0x09, 0x77, 0x19, 0x3d, 0x7f, 0x5d, 0x3f, 0xf7, 0x99, 0xf3, 0x3a, 0x36, 0x94, 0xc4,
0xe9, 0x4a, 0xf4, 0x18, 0xb6, 0xd2, 0x9e, 0x4b, 0xb0, 0x96, 0xeb, 0x83, 0xba, 0xb0, 0xa9, 0x05,
0x5f, 0x82, 0xb2, 0xac, 0xc3, 0x79, 0x09, 0x3b, 0x81, 0xad, 0xf0, 0x1e, 0x7e, 0xd1, 0x7c, 0xfd,
0x52, 0x14, 0xbd, 0x92, 0x4e, 0x4d, 0x09, 0x9f, 0x9e, 0x08, 0x28, 0xbe, 0x9a, 0xb0, 0x95, 0x56,
0x73, 0xb2, 0x92, 0xf7, 0x8c, 0x42, 0x96, 0xa6, 0x44, 0x16, 0x5c, 0x12, 0x78, 0x45, 0x46, 0xf2,
0x78, 0xd5, 0x74, 0x7c, 0x72, 0x52, 0xc1, 0x97, 0x99, 0x9c, 0x1c, 0x17, 0x4e, 0xa7, 0x96, 0x5e,
0xc4, 0x29, 0xcd, 0xa7, 0x33, 0xe3, 0x80, 0x1e, 0xc0, 0x86, 0xba, 0x3f, 0x11, 0x64, 0x75, 0x6e,
0x90, 0x8c, 0x7d, 0xaa, 0x25, 0xca, 0x4b, 0xb6, 0xc4, 0xee, 0x9f, 0x65, 0xa8, 0x08, 0xa3, 0xce,
0xe0, 0x19, 0xda, 0x03, 0x48, 0x7e, 0x21, 0x20, 0x95, 0x7e, 0xed, 0xf7, 0x45, 0xfd, 0xfa, 0x29,
0x2b, 0x94, 0xa0, 0x9f, 0xe0, 0xd6, 0xfc, 0xef, 0x77, 0x74, 0x57, 0x73, 0x5e, 0xf0, 0x47, 0xa1,
0xfe, 0xc9, 0x19, 0xac, 0x29, 0x41, 0xef, 0x0c, 0xd8, 0x59, 0xf8, 0x65, 0x8d, 0xda, 0x4a, 0xd0,
0x65, 0xfe, 0x07, 0xd4, 0x3f, 0x3d, 0x9b, 0x83, 0xc4, 0x61, 0xfe, 0x27, 0xaf, 0x86, 0xc3, 0xc2,
0x6f, 0x75, 0x0d, 0x87, 0x25, 0xbe, 0xa5, 0xbb, 0x50, 0x53, 0x2e, 0xe1, 0xe8, 0xba, 0xee, 0xad,
0x7c, 0xa3, 0xd6, 0xeb, 0xa7, 0x2d, 0x51, 0x82, 0x1e, 0xc3, 0x9a, 0x76, 0xb9, 0x43, 0x37, 0x74,
0x63, 0xed, 0x32, 0x5b, 0xbf, 0x79, 0xfa, 0x22, 0x25, 0x68, 0x20, 0xbe, 0x8e, 0x95, 0xdb, 0x09,
0xca, 0xb5, 0x8f, 0x2e, 0x73, 0xf5, 0xff, 0xcd, 0x59, 0xa5, 0x04, 0x0d, 0xc5, 0x51, 0x96, 0x79,
0x7d, 0x23, 0x4b, 0x77, 0xcb, 0xbb, 0x5d, 0xd4, 0x3f, 0x58, 0x68, 0x43, 0x09, 0xfa, 0x5a, 0xdc,
0xa6, 0x52, 0x2f, 0x18, 0xd4, 0xd0, 0x5d, 0xb3, 0xef, 0xbe, 0xfa, 0xce, 0x02, 0x0b, 0x4a, 0xd0,
0x57, 0xe2, 0xf2, 0xaa, 0x9f, 0x85, 0xe8, 0xff, 0x59, 0x82, 0xf5, 0xc0, 0x8d, 0xf9, 0x06, 0x94,
0x3c, 0xb8, 0xf6, 0xcd, 0x76, 0x2b, 0xf9, 0xd3, 0xf9, 0x79, 0xfc, 0xf4, 0xfd, 0xaa, 0xf8, 0x8d,
0x79, 0xef, 0xdf, 0x00, 0x00, 0x00, 0xff, 0xff, 0xd2, 0x6a, 0x73, 0x53, 0x11, 0x15, 0x00, 0x00,
0x60, 0x92, 0x02, 0x6d, 0xd1, 0x08, 0xac, 0xb4, 0x56, 0x09, 0x5b, 0xe4, 0x9a, 0xbb, 0x72, 0x1c,
0x14, 0xbd, 0xe6, 0xd2, 0x7b, 0x0f, 0x3d, 0xf6, 0x15, 0xfa, 0x04, 0x3d, 0xf6, 0x31, 0x8a, 0x3e,
0x47, 0x81, 0x62, 0x77, 0xf9, 0xb1, 0x4b, 0xd2, 0x92, 0xec, 0xa0, 0xbe, 0x71, 0x66, 0xe7, 0x63,
0xe7, 0xf7, 0x9b, 0x59, 0x2e, 0x09, 0x37, 0x9d, 0xd1, 0xc4, 0xf5, 0x06, 0xc3, 0x09, 0x6d, 0xc5,
0x4f, 0x4d, 0x12, 0xf8, 0xcc, 0x47, 0x95, 0x58, 0x51, 0xdb, 0x7e, 0x4e, 0xb0, 0x37, 0xe8, 0xf5,
0x5b, 0xe4, 0x70, 0xdc, 0x12, 0xab, 0x2d, 0x3a, 0x3a, 0x1c, 0xbc, 0xa1, 0xad, 0x37, 0xa1, 0xb5,
0xf5, 0x10, 0xa0, 0xed, 0x4f, 0x26, 0xbe, 0x67, 0x63, 0x4a, 0x90, 0x09, 0x65, 0x1c, 0x04, 0x6d,
0x7f, 0x84, 0x4d, 0xa3, 0x6e, 0x34, 0x4a, 0x76, 0x24, 0xa2, 0xeb, 0xb0, 0x8c, 0x83, 0xa0, 0x4f,
0xc7, 0x66, 0xa1, 0x6e, 0x34, 0x2a, 0x76, 0x28, 0x59, 0x43, 0x58, 0xdd, 0xe5, 0xf9, 0xf6, 0xfc,
0xb1, 0xeb, 0xd9, 0xf8, 0x18, 0xd5, 0xa1, 0xfa, 0x9c, 0xe0, 0xc0, 0x61, 0xae, 0xef, 0xf5, 0x3a,
0x22, 0x4c, 0xc5, 0x56, 0x55, 0x3c, 0x89, 0x70, 0xe9, 0x75, 0xc2, 0x58, 0x91, 0xc8, 0x93, 0xbc,
0xc0, 0xc3, 0x00, 0x33, 0xb3, 0x28, 0x93, 0x48, 0xc9, 0xfa, 0x0e, 0xd6, 0xd4, 0x24, 0x94, 0xa0,
0x4d, 0x28, 0x31, 0xff, 0x10, 0x7b, 0x61, 0x7c, 0x29, 0xa0, 0xcf, 0x00, 0x86, 0x71, 0x31, 0x22,
0x78, 0x75, 0x67, 0xab, 0x99, 0x00, 0x94, 0x54, 0x6a, 0x2b, 0x86, 0x16, 0x86, 0xed, 0xdd, 0xd1,
0xe8, 0x15, 0xc5, 0x81, 0x8d, 0xc7, 0x2e, 0x65, 0x38, 0xd8, 0x1d, 0x8d, 0x9e, 0x04, 0x2e, 0xf6,
0x46, 0xbd, 0xce, 0x9e, 0x4b, 0x59, 0x58, 0x97, 0x9f, 0xad, 0x4b, 0x51, 0xa1, 0x3b, 0x00, 0x53,
0x8a, 0x03, 0xe9, 0x62, 0x16, 0xea, 0xc5, 0x46, 0xc5, 0x56, 0x34, 0xd6, 0xb7, 0x60, 0xcd, 0x4b,
0x43, 0x49, 0xaa, 0x06, 0x63, 0xd1, 0x1a, 0xde, 0x19, 0x70, 0xd7, 0xc6, 0xa3, 0xe9, 0x10, 0xbf,
0x77, 0x1d, 0xb7, 0xa1, 0x12, 0x8b, 0x02, 0xc4, 0x92, 0x9d, 0x28, 0x52, 0x55, 0x16, 0x33, 0x55,
0xbe, 0x86, 0x7b, 0x0b, 0xec, 0xe3, 0xe2, 0x85, 0xfe, 0x6c, 0xc0, 0x76, 0x17, 0xb3, 0xf7, 0xae,
0xb2, 0x03, 0x40, 0x9c, 0xb1, 0xeb, 0x25, 0x65, 0x56, 0x77, 0xee, 0x36, 0x29, 0x0e, 0x4e, 0x70,
0x30, 0x70, 0x88, 0x3b, 0x20, 0x4e, 0xe0, 0x4c, 0x68, 0xd3, 0xc6, 0xc7, 0x53, 0x4c, 0xd9, 0x7e,
0x6c, 0x6b, 0x2b, 0x7e, 0xd6, 0xdf, 0x06, 0x58, 0xf3, 0x76, 0x43, 0x09, 0xfa, 0x02, 0xae, 0x08,
0x88, 0xbc, 0x03, 0x5f, 0xc0, 0x66, 0xd4, 0x8b, 0x8d, 0xea, 0xce, 0xad, 0x9c, 0x74, 0xaf, 0x42,
0x33, 0x5b, 0x73, 0x40, 0x8f, 0x73, 0x76, 0x7b, 0x2f, 0x77, 0xb7, 0x94, 0xf8, 0x1e, 0xc5, 0xf9,
0xdb, 0x4d, 0x61, 0x5e, 0x5c, 0x14, 0xf3, 0xdf, 0x0a, 0xb0, 0xd6, 0xc5, 0xac, 0xfd, 0x83, 0xc3,
0xf6, 0xfc, 0x31, 0xe5, 0x00, 0x9b, 0x50, 0x6e, 0xfb, 0x1e, 0xc3, 0x1e, 0x0b, 0xc1, 0x8d, 0x44,
0x39, 0xc4, 0xbc, 0xfa, 0xe8, 0xa4, 0x90, 0x12, 0xd7, 0xdb, 0x78, 0x78, 0xd2, 0xeb, 0x44, 0xc3,
0x2d, 0x25, 0x54, 0x83, 0x15, 0x6e, 0xf1, 0xd2, 0x9d, 0x60, 0x73, 0x49, 0xac, 0xc4, 0x32, 0xa7,
0xf1, 0x05, 0xa6, 0xd4, 0xf5, 0xbd, 0x97, 0x6f, 0x09, 0x36, 0x4b, 0xa2, 0x19, 0x55, 0x15, 0xb7,
0x08, 0x13, 0x0b, 0x8b, 0x65, 0x69, 0xa1, 0xa8, 0x38, 0xd1, 0x09, 0x1a, 0x66, 0xf9, 0x3c, 0x44,
0x27, 0xcf, 0xe9, 0x63, 0x6d, 0x25, 0x73, 0xac, 0x59, 0xff, 0x14, 0xa1, 0x1c, 0x22, 0x24, 0xf7,
0xcd, 0x13, 0xf4, 0xe9, 0x38, 0x69, 0x3f, 0x45, 0x85, 0xee, 0xc3, 0x06, 0x65, 0x81, 0xeb, 0x8d,
0xdb, 0x47, 0x2e, 0xf6, 0x98, 0xb4, 0x93, 0x80, 0x65, 0x17, 0x14, 0x4c, 0x8b, 0x67, 0x60, 0xba,
0xa4, 0x61, 0xfa, 0x31, 0xac, 0x73, 0x0b, 0x1c, 0xec, 0x1f, 0x39, 0xec, 0xc0, 0x0f, 0x26, 0xbd,
0x4e, 0x08, 0x5e, 0x46, 0x8f, 0x3e, 0x84, 0x35, 0xa9, 0x7b, 0xe6, 0x0e, 0x0f, 0x3d, 0x67, 0x22,
0x41, 0xac, 0xd8, 0x29, 0x2d, 0xba, 0x0b, 0xab, 0x52, 0xf3, 0xc4, 0x19, 0xe2, 0x57, 0xf6, 0x9e,
0x80, 0xb2, 0x62, 0xeb, 0x4a, 0x7e, 0x78, 0x74, 0x03, 0x7f, 0x4a, 0x9e, 0xf1, 0x40, 0x12, 0xa5,
0x44, 0x91, 0xe6, 0xb3, 0x92, 0xe5, 0xd3, 0x84, 0x72, 0x9f, 0x8e, 0x9f, 0x04, 0xfe, 0xc4, 0x04,
0xf9, 0x06, 0x0a, 0xc5, 0x34, 0xd3, 0xd5, 0x2c, 0xd3, 0x4a, 0x4f, 0x5e, 0xc9, 0xf6, 0x24, 0x73,
0xd8, 0x94, 0x9a, 0xab, 0xc2, 0x2d, 0x94, 0xb4, 0xde, 0x5b, 0xab, 0x1b, 0x8d, 0xa2, 0xd2, 0x7b,
0x77, 0x00, 0xda, 0x01, 0x76, 0x18, 0x16, 0xab, 0x57, 0xc5, 0xaa, 0xa2, 0x41, 0x6b, 0x50, 0x78,
0x7c, 0x6a, 0xae, 0x8b, 0x44, 0x85, 0xc7, 0xa7, 0xd6, 0x5f, 0x06, 0x5c, 0xd5, 0x86, 0x84, 0x12,
0xd4, 0x84, 0x95, 0x48, 0x0e, 0x67, 0x1e, 0xa9, 0xd3, 0x26, 0x97, 0xec, 0xd8, 0x86, 0x8f, 0xf9,
0xfe, 0x45, 0xc7, 0x5c, 0x6f, 0xd6, 0x28, 0xe4, 0xb3, 0xe9, 0x44, 0xf4, 0x0c, 0x87, 0x2a, 0x51,
0xf1, 0x83, 0x20, 0x99, 0x75, 0xd1, 0x3c, 0x67, 0x1f, 0x04, 0xc9, 0xb3, 0xf5, 0x00, 0x56, 0x39,
0x72, 0x2e, 0x65, 0xee, 0x50, 0x1c, 0x03, 0x08, 0x96, 0x0e, 0x38, 0x57, 0xb2, 0xc3, 0xc5, 0x33,
0x07, 0x86, 0xf9, 0x61, 0x2f, 0x17, 0x98, 0x6f, 0x31, 0x58, 0xef, 0x62, 0xb6, 0x3b, 0x64, 0xee,
0x49, 0xf8, 0x52, 0x38, 0x46, 0x0f, 0x53, 0x81, 0xc2, 0xf3, 0xdf, 0x54, 0xb6, 0xa0, 0xad, 0xdb,
0xa9, 0xbc, 0xa9, 0x71, 0x2c, 0x64, 0xc7, 0xf1, 0x35, 0xac, 0xc8, 0x64, 0x94, 0x70, 0x9a, 0x79,
0x1b, 0x8b, 0x9e, 0x94, 0x3b, 0x8d, 0x65, 0xde, 0x1a, 0xe2, 0xcc, 0x1d, 0x45, 0xc7, 0x95, 0x94,
0x38, 0xfd, 0x7d, 0x4c, 0xa9, 0x33, 0xc6, 0x09, 0x84, 0x8a, 0xc6, 0x9a, 0xc2, 0x46, 0xaa, 0x2a,
0x4a, 0xd0, 0x47, 0x50, 0xe2, 0xcf, 0x11, 0xd9, 0xd7, 0x94, 0x72, 0x22, 0x1b, 0x5b, 0x5a, 0xa4,
0x18, 0x28, 0x2c, 0xca, 0x80, 0x9a, 0x56, 0xcc, 0xd5, 0xe5, 0xa0, 0xf9, 0xab, 0x11, 0xce, 0xb5,
0x28, 0x53, 0x1b, 0x72, 0x23, 0x3d, 0xe4, 0x26, 0x94, 0x85, 0x10, 0x43, 0x1a, 0x89, 0xf3, 0x30,
0xbd, 0x68, 0x57, 0xbe, 0x05, 0x94, 0xc6, 0x84, 0x12, 0x74, 0x1f, 0x96, 0x85, 0x10, 0x91, 0xb1,
0xa9, 0x04, 0x8a, 0xad, 0xec, 0xd0, 0xe6, 0xa2, 0x74, 0x3c, 0x80, 0x6a, 0xc7, 0x61, 0x7c, 0xf3,
0xe2, 0x35, 0x8d, 0x60, 0x89, 0x8b, 0xd1, 0x38, 0xf0, 0x67, 0xb4, 0x0e, 0x45, 0x5e, 0xad, 0xbc,
0x48, 0xf1, 0x47, 0xeb, 0x47, 0xb8, 0xd1, 0xc5, 0x2c, 0xac, 0x5b, 0x67, 0xe2, 0xbf, 0x67, 0xf2,
0x8f, 0x02, 0x98, 0xf9, 0xd9, 0x05, 0x66, 0x1b, 0xfb, 0x81, 0x7b, 0xe2, 0x30, 0xac, 0xf0, 0x24,
0xbf, 0x04, 0xb2, 0x0b, 0xa8, 0x01, 0x57, 0x05, 0x7a, 0x8a, 0xad, 0xac, 0x32, 0xad, 0x46, 0x7b,
0xb0, 0x95, 0x71, 0x8f, 0xef, 0x8f, 0xd5, 0x9d, 0xeb, 0x4a, 0x79, 0x0a, 0x9c, 0x76, 0xbe, 0x13,
0xfa, 0x12, 0xae, 0xa5, 0x12, 0x88, 0x58, 0x4b, 0x33, 0x63, 0xe5, 0xb9, 0xa4, 0x58, 0x2f, 0x2d,
0xde, 0x70, 0x5b, 0x5d, 0xcc, 0x44, 0xc0, 0xcb, 0xa6, 0xef, 0xf7, 0x02, 0x5c, 0xcf, 0xcb, 0x4d,
0x09, 0x7f, 0xe9, 0xf7, 0xbc, 0x61, 0x80, 0x1d, 0x2a, 0xa7, 0x20, 0xe1, 0x2e, 0xa3, 0xe7, 0x2f,
0xf3, 0x97, 0x3e, 0x73, 0x8e, 0x62, 0x43, 0x49, 0x9c, 0xae, 0x44, 0x4f, 0x61, 0x33, 0xed, 0xb9,
0x00, 0x6b, 0xb9, 0x3e, 0xa8, 0x03, 0x1b, 0x5a, 0xf0, 0x05, 0x28, 0xcb, 0x3a, 0x5c, 0x94, 0xb0,
0x53, 0xd8, 0x0c, 0x6f, 0xe9, 0x97, 0xcd, 0xd7, 0x2f, 0x45, 0xd1, 0x2b, 0xe9, 0xd4, 0x94, 0xf0,
0xe9, 0x89, 0x80, 0xe2, 0xab, 0x09, 0x5b, 0x69, 0x35, 0x27, 0x2b, 0x79, 0xcf, 0x28, 0x64, 0x69,
0x4a, 0x64, 0xc1, 0x15, 0x81, 0x57, 0x64, 0x24, 0x8f, 0x57, 0x4d, 0xc7, 0x27, 0x27, 0x15, 0x7c,
0x91, 0xc9, 0xc9, 0x71, 0xe1, 0x74, 0x6a, 0xe9, 0x45, 0x9c, 0xd2, 0x6c, 0x3a, 0x33, 0x0e, 0xe8,
0x11, 0xac, 0xab, 0xfb, 0x13, 0x41, 0x96, 0x67, 0x06, 0xc9, 0xd8, 0xa7, 0x5a, 0xa2, 0xbc, 0x60,
0x4b, 0xec, 0xfc, 0x59, 0x86, 0x15, 0x61, 0xd4, 0xee, 0xbf, 0x40, 0xbb, 0x00, 0xc9, 0x0f, 0x06,
0xa4, 0xd2, 0xaf, 0xfd, 0xdc, 0xa8, 0xdd, 0x3c, 0x63, 0x85, 0x12, 0xf4, 0x13, 0xdc, 0x99, 0xfd,
0x75, 0x8f, 0xee, 0x6b, 0xce, 0x73, 0xfe, 0x37, 0xd4, 0x3e, 0x39, 0x87, 0x35, 0x25, 0xe8, 0x9d,
0x01, 0xdb, 0x73, 0xbf, 0xbb, 0x51, 0x4b, 0x09, 0xba, 0xc8, 0xdf, 0x82, 0xda, 0xa7, 0xe7, 0x73,
0x90, 0x38, 0xcc, 0xfe, 0x20, 0xd6, 0x70, 0x98, 0xfb, 0x25, 0xaf, 0xe1, 0xb0, 0xc0, 0x97, 0x76,
0x07, 0xaa, 0xca, 0x25, 0x1c, 0xdd, 0xd4, 0xbd, 0x95, 0x2f, 0xd8, 0x5a, 0xed, 0xac, 0x25, 0x4a,
0xd0, 0x53, 0x58, 0xd5, 0x2e, 0x77, 0xe8, 0x96, 0x6e, 0xac, 0x5d, 0x66, 0x6b, 0xb7, 0xcf, 0x5e,
0xa4, 0x04, 0xf5, 0xc5, 0xb7, 0xb3, 0x72, 0x3b, 0x41, 0xb9, 0xf6, 0xd1, 0x65, 0xae, 0xf6, 0xbf,
0x19, 0xab, 0x94, 0xa0, 0x81, 0x38, 0xca, 0x32, 0xaf, 0x6f, 0x64, 0xe9, 0x6e, 0x79, 0xb7, 0x8b,
0xda, 0x07, 0x73, 0x6d, 0x28, 0x41, 0x5f, 0x8b, 0xdb, 0x54, 0xea, 0x05, 0x83, 0xea, 0xba, 0x6b,
0xf6, 0xdd, 0x57, 0xdb, 0x9e, 0x63, 0x41, 0x09, 0xfa, 0x4a, 0x5c, 0x5e, 0xf5, 0xb3, 0x10, 0xfd,
0x3f, 0x4b, 0xb0, 0x1e, 0xb8, 0x3e, 0xdb, 0x80, 0x92, 0x47, 0x37, 0xbe, 0xd9, 0x6a, 0x26, 0xff,
0x41, 0x3f, 0x8f, 0x9f, 0xbe, 0x5f, 0x16, 0x3f, 0x39, 0x1f, 0xfc, 0x1b, 0x00, 0x00, 0xff, 0xff,
0xcd, 0xf8, 0xf8, 0x38, 0x2f, 0x15, 0x00, 0x00,
}

@ -71,14 +71,15 @@ message ChatLog {
int32 SenderPlatformID = 5;
string SenderNickname = 6;
string SenderFaceURL = 7;
int32 SessionType = 8;
int32 MsgFrom = 9;
int32 ContentType = 10;
string Content = 11;
int32 Status = 12;
int64 SendTime = 13;
int64 CreateTime = 14;
string Ex = 15;
string GroupName = 8;
int32 SessionType = 9;
int32 MsgFrom = 10;
int32 ContentType = 11;
string Content = 12;
int32 Status = 13;
int64 SendTime = 14;
int64 CreateTime = 15;
string Ex = 16;
}
message GetChatLogsResp {

Loading…
Cancel
Save