Merge remote-tracking branch 'origin/tuoyun' into tuoyun

pull/103/head
wenxu12345 4 years ago
commit 21ff7a36b8

@ -1 +1 @@
Subproject commit 610fc07d46dd0ee52428bf429beb80a515e6b872
Subproject commit 0e57291413f3cccd365c6947875387638349276a

@ -94,7 +94,15 @@ func main() {
managementGroup.POST("/delete_user", manage.DeleteUser)
managementGroup.POST("/send_msg", manage.ManagementSendMsg)
managementGroup.POST("/get_all_users_uid", manage.GetAllUsersUid)
managementGroup.POST("/get_users_online_status", manage.GetUsersOnlineStatus)
}
//Conversation
conversationGroup := r.Group("/conversation")
{
conversationGroup.POST("/delete_user", manage.DeleteUser)
}
log.NewPrivateLog("api")
ginPort := flag.Int("port", 10000, "get ginServerPort from cmd,default 10000 as port")
flag.Parse()

@ -21,12 +21,12 @@ services:
- 37017:27017
container_name: mongo
volumes:
# - ./components/mongodb/data/db:/data/db
# - ./components/mongodb/data/logs:/data/logs
# - ./components/mongodb/data/conf:/etc/mongo
environment:
- MONGO_INITDB_ROOT_USERNAME=openIM
- MONGO_INITDB_ROOT_PASSWORD=openIM
- ./components/mongodb/data/db:/data/db
- ./components/mongodb/data/logs:/data/logs
- ./components/mongodb/data/conf:/etc/mongo
# environment:
# - MONGO_INITDB_ROOT_USERNAME=openIM
# - MONGO_INITDB_ROOT_PASSWORD=openIM
#TZ: Asia/Shanghai
restart: always

@ -8,9 +8,13 @@ package manage
import (
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/constant"
"Open_IM/pkg/common/log"
"Open_IM/pkg/common/token_verify"
"Open_IM/pkg/grpc-etcdv3/getcdv3"
pbRelay "Open_IM/pkg/proto/relay"
pbUser "Open_IM/pkg/proto/user"
"Open_IM/pkg/utils"
"context"
"github.com/gin-gonic/gin"
"net/http"
@ -24,6 +28,10 @@ type paramsDeleteUsers struct {
type paramsGetAllUsersUid struct {
OperationID string `json:"operationID" binding:"required"`
}
type paramsGetUsersOnlineStatus struct {
OperationID string `json:"operationID" binding:"required"`
UserIDList []string `json:"userIDList" binding:"required,lte=200"`
}
func DeleteUser(c *gin.Context) {
params := paramsDeleteUsers{}
@ -80,3 +88,66 @@ func GetAllUsersUid(c *gin.Context) {
c.JSON(http.StatusOK, resp)
}
func GetUsersOnlineStatus(c *gin.Context) {
params := paramsGetUsersOnlineStatus{}
if err := c.BindJSON(&params); err != nil {
c.JSON(http.StatusBadRequest, gin.H{"errCode": 400, "errMsg": err.Error()})
return
}
claims, err := token_verify.ParseToken(c.Request.Header.Get("token"))
if err != nil {
log.ErrorByKv("parse token failed", params.OperationID, "err", err.Error())
c.JSON(http.StatusBadRequest, gin.H{"errCode": 401, "errMsg": err.Error()})
return
}
if !utils.IsContain(claims.UID, config.Config.Manager.AppManagerUid) {
log.ErrorByKv(" Authentication failed", params.OperationID, "args", c)
c.JSON(http.StatusBadRequest, gin.H{"errCode": 402, "errMsg": "not authorized"})
return
}
req := &pbRelay.GetUsersOnlineStatusReq{
OperationID: params.OperationID,
UserIDList: params.UserIDList,
}
var wsResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult
var respResult []*pbRelay.GetUsersOnlineStatusResp_SuccessResult
flag := false
log.NewDebug(params.OperationID, "GetUsersOnlineStatus req come here", params.UserIDList)
grpcCons := getcdv3.GetConn4Unique(config.Config.Etcd.EtcdSchema, strings.Join(config.Config.Etcd.EtcdAddr, ","), config.Config.RpcRegisterName.OpenImOnlineMessageRelayName)
for _, v := range grpcCons {
client := pbRelay.NewOnlineMessageRelayServiceClient(v)
reply, err := client.GetUsersOnlineStatus(context.Background(), req)
if err != nil {
log.NewError(params.OperationID, "GetUsersOnlineStatus rpc err", req.String(), err.Error())
continue
} else {
if reply.ErrCode == 0 {
wsResult = append(wsResult, reply.SuccessResult...)
}
}
}
log.NewDebug(params.OperationID, "call GetUsersOnlineStatus rpc server is success", wsResult)
//Online data merge of each node
for _, v1 := range params.UserIDList {
flag = false
temp := new(pbRelay.GetUsersOnlineStatusResp_SuccessResult)
for _, v2 := range wsResult {
if v2.UserID == v1 {
flag = true
temp.UserID = v1
temp.Status = constant.OnlineStatus
temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, v2.DetailPlatformStatus...)
}
}
if !flag {
temp.UserID = v1
temp.Status = constant.OfflineStatus
}
respResult = append(respResult, temp)
}
log.NewDebug(params.OperationID, "Finished merged data", respResult)
resp := gin.H{"errCode": 0, "errMsg": "", "successResult": respResult}
c.JSON(http.StatusOK, resp)
}

@ -122,7 +122,31 @@ func (r *RPCServer) MsgToUser(_ context.Context, in *pbRelay.MsgToUserReq) (*pbR
Resp: resp,
}, nil
}
func (r *RPCServer) GetUsersOnlineStatus(_ context.Context, req *pbRelay.GetUsersOnlineStatusReq) (*pbRelay.GetUsersOnlineStatusResp, error) {
log.NewDebug(req.OperationID, "rpc GetUsersOnlineStatus arrived server", req.String())
var UIDAndPID []string
var resp pbRelay.GetUsersOnlineStatusResp
for _, v1 := range req.UserIDList {
userIDList := genUidPlatformArray(v1)
temp := new(pbRelay.GetUsersOnlineStatusResp_SuccessResult)
temp.UserID = v1
for _, v2 := range userIDList {
UIDAndPID = strings.Split(v2, " ")
if conn := ws.getUserConn(v2); conn != nil {
ps := new(pbRelay.GetUsersOnlineStatusResp_SuccessDetail)
ps.Platform = UIDAndPID[1]
ps.Status = constant.OnlineStatus
temp.Status = constant.OnlineStatus
temp.DetailPlatformStatus = append(temp.DetailPlatformStatus, ps)
}
}
if temp.Status == constant.OnlineStatus {
resp.SuccessResult = append(resp.SuccessResult, temp)
}
}
return &resp, nil
}
func sendMsgToUser(conn *UserConn, bMsg []byte, in *pbRelay.MsgToUserReq, RecvPlatForm, RecvID string) (ResultCode int64) {
err := ws.writeMsg(conn, websocket.BinaryMessage, bMsg)
if err != nil {

@ -48,8 +48,9 @@ func MsgToUser(sendPbData *pbRelay.MsgToUserReq, OfflineInfo, Options string) {
reply, err := msgClient.MsgToUser(context.Background(), sendPbData)
if err != nil {
log.InfoByKv("push data to client rpc err", sendPbData.OperationID, "err", err)
continue
}
if reply != nil && reply.Resp != nil && err == nil {
if reply != nil && reply.Resp != nil {
wsResult = append(wsResult, reply.Resp...)
}
}

@ -81,3 +81,9 @@ func Test_ParseToken(t *testing.T) {
assert.Equal(t, claims.UID, uid)
}
}
func Test_GetClaimFromToken(t *testing.T) {
token := "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJVSUQiOiJvcGVuSU0xMjM0NTYiLCJQbGF0Zm9ybSI6IiIsImV4cCI6MTYzODg0NjQ3NiwibmJmIjoxNjM4MjQxNjc2LCJpYXQiOjE2MzgyNDE2NzZ9.W8RZB7ec5ySFj-rGE2Aho2z32g3MprQMdCyPiQu_C2I"
c, err := token_verify.GetClaimFromToken(token)
assert.Nil(t, c)
assert.Nil(t, err)
}

@ -164,10 +164,10 @@ func init() {
// it will panic cannot find config/config.yaml
bytes, err := ioutil.ReadFile(Root + "/config/config.yaml")
if err != nil {
panic(err)
panic(err.Error())
}
if err = yaml.Unmarshal(bytes, &Config); err != nil {
panic(err)
panic(err.Error())
}
}

@ -86,6 +86,9 @@ const (
WebAndOther = 3
//Pc端互斥移动端互斥但是web端可以同时在线
PcMobileAndWeb = 4
OnlineStatus = "online"
OfflineStatus = "offline"
)
var ContentType2PushContent = map[int64]string{

@ -2,6 +2,7 @@ package db
import (
"Open_IM/pkg/common/config"
"Open_IM/pkg/common/log"
"github.com/garyburd/redigo/redis"
"gopkg.in/mgo.v2"
"time"
@ -20,6 +21,8 @@ func key(dbAddress, dbName string) string {
}
func init() {
var mgoSession *mgo.Session
var err1 error
//mysql init
initMysqlDB()
// mongo init
@ -35,14 +38,21 @@ func init() {
}
mgoSession, err := mgo.DialWithInfo(mgoDailInfo)
if err != nil {
panic(err)
log.NewError("mgo init err", err.Error(), mgoDailInfo)
}
if err != nil {
time.Sleep(time.Duration(30) * time.Second)
mgoSession, err1 = mgo.DialWithInfo(mgoDailInfo)
if err1 != nil {
panic(err1.Error())
}
}
DB.mgoSession = mgoSession
DB.mgoSession.SetMode(mgo.Monotonic, true)
c := DB.mgoSession.DB(config.Config.Mongo.DBDatabase).C(cChat)
err = c.EnsureIndexKey("uid")
if err != nil {
panic(err)
panic(err.Error())
}
// redis pool init

@ -19,18 +19,24 @@ func initMysqlDB() {
//When there is no open IM database, connect to the mysql built-in database to create openIM database
dsn := fmt.Sprintf("%s:%s@tcp(%s)/%s?charset=utf8mb4&parseTime=true&loc=Local",
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], "mysql")
var db *gorm.DB
var err1 error
db, err := gorm.Open("mysql", dsn)
if err != nil {
log.Error("", "", dsn)
panic(err)
}
if err != nil {
time.Sleep(time.Duration(30) * time.Second)
db, err1 = gorm.Open("mysql", dsn)
if err1 != nil {
panic(err1.Error())
}
}
//Check the database and table during initialization
sql := fmt.Sprintf("CREATE DATABASE IF NOT EXISTS %s ;", config.Config.Mysql.DBDatabaseName)
err = db.Exec(sql).Error
if err != nil {
panic(err)
panic(err.Error())
}
db.Close()
@ -38,7 +44,7 @@ func initMysqlDB() {
config.Config.Mysql.DBUserName, config.Config.Mysql.DBPassword, config.Config.Mysql.DBAddress[0], config.Config.Mysql.DBDatabaseName)
db, err = gorm.Open("mysql", dsn)
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable := "CREATE TABLE IF NOT EXISTS `user` (" +
@ -56,7 +62,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `friend` (" +
@ -69,7 +75,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `friend_request` (" +
@ -82,7 +88,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `black_list` (" +
@ -94,7 +100,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `user_black_list` (" +
@ -105,7 +111,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `group` (" +
@ -120,7 +126,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `group_member` (" +
@ -134,7 +140,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `group_request` (" +
@ -155,7 +161,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB AUTO_INCREMENT=38 DEFAULT CHARSET=utf8mb4;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
sqlTable = "CREATE TABLE IF NOT EXISTS `chat_log` (" +
@ -173,7 +179,7 @@ func initMysqlDB() {
" ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC;"
err = db.Exec(sqlTable).Error
if err != nil {
panic(err)
panic(err.Error())
}
}

@ -3,7 +3,6 @@ package db
import (
"Open_IM/pkg/common/constant"
log2 "Open_IM/pkg/common/log"
"Open_IM/pkg/utils"
"github.com/garyburd/redigo/redis"
)
@ -77,38 +76,24 @@ func (d *DataBases) DelAppleDeviceToken(accountAddress string) (err error) {
//Store userid and platform class to redis
func (d *DataBases) AddTokenFlag(userID string, platformID int32, token string, flag int) error {
key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID)
var m map[string]int
m = make(map[string]int)
ls, err := redis.String(d.Exec("GET", key))
if err != nil && err != redis.ErrNil {
return err
}
if err == redis.ErrNil {
} else {
_ = utils.JsonStringToStruct(ls, &m)
}
m[token] = flag
s := utils.StructToJsonString(m)
_, err1 := d.Exec("SET", key, s)
log2.NewDebug("", "add token key is ", key)
_, err1 := d.Exec("HSet", key, token, flag)
return err1
}
func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (m map[string]int, e error) {
func (d *DataBases) GetTokenMapByUidPid(userID, platformID string) (map[string]int, error) {
key := uidPidToken + userID + ":" + platformID
log2.NewDebug("", "key is ", key)
s, e := redis.String(d.Exec("GET", key))
if e != nil {
return nil, e
} else {
m = make(map[string]int)
_ = utils.JsonStringToStruct(s, &m)
return m, nil
}
log2.NewDebug("", "get token key is ", key)
return redis.IntMap(d.Exec("HGETALL", key))
}
func (d *DataBases) SetTokenMapByUidPid(userID string, platformID int32, m map[string]int) error {
key := uidPidToken + userID + ":" + constant.PlatformIDToName(platformID)
s := utils.StructToJsonString(m)
_, err := d.Exec("SET", key, s)
//var a []interface{}
//for k, v := range m {
// a = append(a, k)
// a = append(a, v)
//}
_, err := d.Exec("hmset", key, redis.Args{}.Add().AddFlat(m)...)
return err
}

@ -0,0 +1,21 @@
package db
import (
"fmt"
"github.com/stretchr/testify/assert"
"testing"
)
func Test_SetTokenMapByUidPid(t *testing.T) {
m := make(map[string]int, 0)
m["哈哈"] = 1
m["heihei"] = 2
m["2332"] = 4
_ = DB.SetTokenMapByUidPid("1234", 2, m)
}
func Test_GetTokenMapByUidPid(t *testing.T) {
m, err := DB.GetTokenMapByUidPid("1234", "Android")
assert.Nil(t, err)
fmt.Println(m)
}

@ -20,14 +20,14 @@ func NewKafkaConsumer(addr []string, topic string) *Consumer {
consumer, err := sarama.NewConsumer(p.addr, nil)
if err != nil {
panic(err)
panic(err.Error())
return nil
}
p.Consumer = consumer
partitionList, err := consumer.Partitions(p.Topic)
if err != nil {
panic(err)
panic(err.Error())
return nil
}
p.PartitionList = partitionList

@ -30,11 +30,11 @@ func NewMConsumerGroup(consumerConfig *MConsumerGroupConfig, topics, addr []stri
config.Consumer.Return.Errors = consumerConfig.IsReturnErr
client, err := sarama.NewClient(addr, config)
if err != nil {
panic(err)
panic(err.Error())
}
consumerGroup, err := sarama.NewConsumerGroupFromClient(groupID, client)
if err != nil {
panic(err)
panic(err.Error())
}
return &MConsumerGroup{
consumerGroup,
@ -47,7 +47,7 @@ func (mc *MConsumerGroup) RegisterHandleAndConsumer(handler sarama.ConsumerGroup
for {
err := mc.ConsumerGroup.Consume(ctx, mc.topics, handler)
if err != nil {
panic(err)
panic(err.Error())
}
}
}

@ -25,7 +25,7 @@ func NewKafkaProducer(addr []string, topic string) *Producer {
producer, err := sarama.NewSyncProducer(p.addr, p.config) //Initialize the client
if err != nil {
panic(err)
panic(err.Error())
return nil
}
p.producer = producer

@ -34,7 +34,7 @@ func loggerInit(moduleName string) *Logger {
//Close std console output
src, err := os.OpenFile(os.DevNull, os.O_APPEND|os.O_WRONLY, os.ModeAppend)
if err != nil {
panic(err)
panic(err.Error())
}
writer := bufio.NewWriter(src)
logger.SetOutput(writer)
@ -82,7 +82,7 @@ func initRotateLogs(rotationTime time.Duration, maxRemainNum uint, level string,
rotatelogs.WithRotationCount(maxRemainNum),
)
if err != nil {
panic(err)
panic(err.Error())
} else {
return writer
}

@ -55,7 +55,7 @@ func secret() jwt.Keyfunc {
}
}
func getClaimFromToken(tokensString string) (*Claims, error) {
func GetClaimFromToken(tokensString string) (*Claims, error) {
token, err := jwt.ParseWithClaims(tokensString, &Claims{}, secret())
if err != nil {
if ve, ok := err.(*jwt.ValidationError); ok {
@ -82,7 +82,7 @@ func getClaimFromToken(tokensString string) (*Claims, error) {
func ParseToken(tokensString string) (claims *Claims, err error) {
claims, err = getClaimFromToken(tokensString)
claims, err = GetClaimFromToken(tokensString)
if err != nil {
log.NewError("", "token validate err", err.Error())
return nil, err
@ -112,7 +112,7 @@ func ParseToken(tokensString string) (claims *Claims, err error) {
return nil, &constant.ErrTokenUnknown
}
}
return nil, err
return nil, &constant.ErrTokenUnknown
}
//func MakeTheTokenInvalid(currentClaims *Claims, platformClass string) (bool, error) {
@ -132,7 +132,7 @@ func ParseToken(tokensString string) (claims *Claims, err error) {
//}
func ParseRedisInterfaceToken(redisToken interface{}) (*Claims, error) {
return getClaimFromToken(string(redisToken.([]uint8)))
return GetClaimFromToken(string(redisToken.([]uint8)))
}
//Validation token, false means failure, true means successful verification

@ -47,7 +47,7 @@ func (m *MsgToUserReq) Reset() { *m = MsgToUserReq{} }
func (m *MsgToUserReq) String() string { return proto.CompactTextString(m) }
func (*MsgToUserReq) ProtoMessage() {}
func (*MsgToUserReq) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_ff2396ffa84abfa7, []int{0}
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{0}
}
func (m *MsgToUserReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgToUserReq.Unmarshal(m, b)
@ -176,7 +176,7 @@ func (m *MsgToUserResp) Reset() { *m = MsgToUserResp{} }
func (m *MsgToUserResp) String() string { return proto.CompactTextString(m) }
func (*MsgToUserResp) ProtoMessage() {}
func (*MsgToUserResp) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_ff2396ffa84abfa7, []int{1}
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{1}
}
func (m *MsgToUserResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_MsgToUserResp.Unmarshal(m, b)
@ -227,7 +227,7 @@ func (m *SingleMsgToUser) Reset() { *m = SingleMsgToUser{} }
func (m *SingleMsgToUser) String() string { return proto.CompactTextString(m) }
func (*SingleMsgToUser) ProtoMessage() {}
func (*SingleMsgToUser) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_ff2396ffa84abfa7, []int{2}
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{2}
}
func (m *SingleMsgToUser) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_SingleMsgToUser.Unmarshal(m, b)
@ -268,10 +268,281 @@ func (m *SingleMsgToUser) GetRecvPlatFormID() int32 {
return 0
}
type GetUsersOnlineStatusReq struct {
UserIDList []string `protobuf:"bytes,1,rep,name=userIDList" json:"userIDList,omitempty"`
OperationID string `protobuf:"bytes,2,opt,name=operationID" json:"operationID,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetUsersOnlineStatusReq) Reset() { *m = GetUsersOnlineStatusReq{} }
func (m *GetUsersOnlineStatusReq) String() string { return proto.CompactTextString(m) }
func (*GetUsersOnlineStatusReq) ProtoMessage() {}
func (*GetUsersOnlineStatusReq) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{3}
}
func (m *GetUsersOnlineStatusReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUsersOnlineStatusReq.Unmarshal(m, b)
}
func (m *GetUsersOnlineStatusReq) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUsersOnlineStatusReq.Marshal(b, m, deterministic)
}
func (dst *GetUsersOnlineStatusReq) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUsersOnlineStatusReq.Merge(dst, src)
}
func (m *GetUsersOnlineStatusReq) XXX_Size() int {
return xxx_messageInfo_GetUsersOnlineStatusReq.Size(m)
}
func (m *GetUsersOnlineStatusReq) XXX_DiscardUnknown() {
xxx_messageInfo_GetUsersOnlineStatusReq.DiscardUnknown(m)
}
var xxx_messageInfo_GetUsersOnlineStatusReq proto.InternalMessageInfo
func (m *GetUsersOnlineStatusReq) GetUserIDList() []string {
if m != nil {
return m.UserIDList
}
return nil
}
func (m *GetUsersOnlineStatusReq) GetOperationID() string {
if m != nil {
return m.OperationID
}
return ""
}
type GetUsersOnlineStatusResp struct {
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
SuccessResult []*GetUsersOnlineStatusResp_SuccessResult `protobuf:"bytes,3,rep,name=successResult" json:"successResult,omitempty"`
FailedResult []*GetUsersOnlineStatusResp_FailedDetail `protobuf:"bytes,4,rep,name=failedResult" json:"failedResult,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetUsersOnlineStatusResp) Reset() { *m = GetUsersOnlineStatusResp{} }
func (m *GetUsersOnlineStatusResp) String() string { return proto.CompactTextString(m) }
func (*GetUsersOnlineStatusResp) ProtoMessage() {}
func (*GetUsersOnlineStatusResp) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{4}
}
func (m *GetUsersOnlineStatusResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUsersOnlineStatusResp.Unmarshal(m, b)
}
func (m *GetUsersOnlineStatusResp) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUsersOnlineStatusResp.Marshal(b, m, deterministic)
}
func (dst *GetUsersOnlineStatusResp) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUsersOnlineStatusResp.Merge(dst, src)
}
func (m *GetUsersOnlineStatusResp) XXX_Size() int {
return xxx_messageInfo_GetUsersOnlineStatusResp.Size(m)
}
func (m *GetUsersOnlineStatusResp) XXX_DiscardUnknown() {
xxx_messageInfo_GetUsersOnlineStatusResp.DiscardUnknown(m)
}
var xxx_messageInfo_GetUsersOnlineStatusResp proto.InternalMessageInfo
func (m *GetUsersOnlineStatusResp) GetErrCode() int32 {
if m != nil {
return m.ErrCode
}
return 0
}
func (m *GetUsersOnlineStatusResp) GetErrMsg() string {
if m != nil {
return m.ErrMsg
}
return ""
}
func (m *GetUsersOnlineStatusResp) GetSuccessResult() []*GetUsersOnlineStatusResp_SuccessResult {
if m != nil {
return m.SuccessResult
}
return nil
}
func (m *GetUsersOnlineStatusResp) GetFailedResult() []*GetUsersOnlineStatusResp_FailedDetail {
if m != nil {
return m.FailedResult
}
return nil
}
type GetUsersOnlineStatusResp_SuccessDetail struct {
Platform string `protobuf:"bytes,1,opt,name=platform" json:"platform,omitempty"`
Status string `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) Reset() {
*m = GetUsersOnlineStatusResp_SuccessDetail{}
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) String() string { return proto.CompactTextString(m) }
func (*GetUsersOnlineStatusResp_SuccessDetail) ProtoMessage() {}
func (*GetUsersOnlineStatusResp_SuccessDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{4, 0}
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Unmarshal(m, b)
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Marshal(b, m, deterministic)
}
func (dst *GetUsersOnlineStatusResp_SuccessDetail) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Merge(dst, src)
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_Size() int {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.Size(m)
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) XXX_DiscardUnknown() {
xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail.DiscardUnknown(m)
}
var xxx_messageInfo_GetUsersOnlineStatusResp_SuccessDetail proto.InternalMessageInfo
func (m *GetUsersOnlineStatusResp_SuccessDetail) GetPlatform() string {
if m != nil {
return m.Platform
}
return ""
}
func (m *GetUsersOnlineStatusResp_SuccessDetail) GetStatus() string {
if m != nil {
return m.Status
}
return ""
}
type GetUsersOnlineStatusResp_FailedDetail struct {
UserID string `protobuf:"bytes,3,opt,name=userID" json:"userID,omitempty"`
ErrCode int32 `protobuf:"varint,1,opt,name=errCode" json:"errCode,omitempty"`
ErrMsg string `protobuf:"bytes,2,opt,name=errMsg" json:"errMsg,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetUsersOnlineStatusResp_FailedDetail) Reset() { *m = GetUsersOnlineStatusResp_FailedDetail{} }
func (m *GetUsersOnlineStatusResp_FailedDetail) String() string { return proto.CompactTextString(m) }
func (*GetUsersOnlineStatusResp_FailedDetail) ProtoMessage() {}
func (*GetUsersOnlineStatusResp_FailedDetail) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{4, 1}
}
func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Unmarshal(m, b)
}
func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Marshal(b, m, deterministic)
}
func (dst *GetUsersOnlineStatusResp_FailedDetail) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Merge(dst, src)
}
func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_Size() int {
return xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.Size(m)
}
func (m *GetUsersOnlineStatusResp_FailedDetail) XXX_DiscardUnknown() {
xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail.DiscardUnknown(m)
}
var xxx_messageInfo_GetUsersOnlineStatusResp_FailedDetail proto.InternalMessageInfo
func (m *GetUsersOnlineStatusResp_FailedDetail) GetUserID() string {
if m != nil {
return m.UserID
}
return ""
}
func (m *GetUsersOnlineStatusResp_FailedDetail) GetErrCode() int32 {
if m != nil {
return m.ErrCode
}
return 0
}
func (m *GetUsersOnlineStatusResp_FailedDetail) GetErrMsg() string {
if m != nil {
return m.ErrMsg
}
return ""
}
type GetUsersOnlineStatusResp_SuccessResult struct {
UserID string `protobuf:"bytes,1,opt,name=userID" json:"userID,omitempty"`
Status string `protobuf:"bytes,2,opt,name=status" json:"status,omitempty"`
DetailPlatformStatus []*GetUsersOnlineStatusResp_SuccessDetail `protobuf:"bytes,3,rep,name=detailPlatformStatus" json:"detailPlatformStatus,omitempty"`
XXX_NoUnkeyedLiteral struct{} `json:"-"`
XXX_unrecognized []byte `json:"-"`
XXX_sizecache int32 `json:"-"`
}
func (m *GetUsersOnlineStatusResp_SuccessResult) Reset() {
*m = GetUsersOnlineStatusResp_SuccessResult{}
}
func (m *GetUsersOnlineStatusResp_SuccessResult) String() string { return proto.CompactTextString(m) }
func (*GetUsersOnlineStatusResp_SuccessResult) ProtoMessage() {}
func (*GetUsersOnlineStatusResp_SuccessResult) Descriptor() ([]byte, []int) {
return fileDescriptor_relay_709d2b3cc3a7ad83, []int{4, 2}
}
func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Unmarshal(m, b)
}
func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Marshal(b []byte, deterministic bool) ([]byte, error) {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Marshal(b, m, deterministic)
}
func (dst *GetUsersOnlineStatusResp_SuccessResult) XXX_Merge(src proto.Message) {
xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Merge(dst, src)
}
func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_Size() int {
return xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.Size(m)
}
func (m *GetUsersOnlineStatusResp_SuccessResult) XXX_DiscardUnknown() {
xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult.DiscardUnknown(m)
}
var xxx_messageInfo_GetUsersOnlineStatusResp_SuccessResult proto.InternalMessageInfo
func (m *GetUsersOnlineStatusResp_SuccessResult) GetUserID() string {
if m != nil {
return m.UserID
}
return ""
}
func (m *GetUsersOnlineStatusResp_SuccessResult) GetStatus() string {
if m != nil {
return m.Status
}
return ""
}
func (m *GetUsersOnlineStatusResp_SuccessResult) GetDetailPlatformStatus() []*GetUsersOnlineStatusResp_SuccessDetail {
if m != nil {
return m.DetailPlatformStatus
}
return nil
}
func init() {
proto.RegisterType((*MsgToUserReq)(nil), "relay.MsgToUserReq")
proto.RegisterType((*MsgToUserResp)(nil), "relay.MsgToUserResp")
proto.RegisterType((*SingleMsgToUser)(nil), "relay.SingleMsgToUser")
proto.RegisterType((*GetUsersOnlineStatusReq)(nil), "relay.GetUsersOnlineStatusReq")
proto.RegisterType((*GetUsersOnlineStatusResp)(nil), "relay.GetUsersOnlineStatusResp")
proto.RegisterType((*GetUsersOnlineStatusResp_SuccessDetail)(nil), "relay.GetUsersOnlineStatusResp.SuccessDetail")
proto.RegisterType((*GetUsersOnlineStatusResp_FailedDetail)(nil), "relay.GetUsersOnlineStatusResp.FailedDetail")
proto.RegisterType((*GetUsersOnlineStatusResp_SuccessResult)(nil), "relay.GetUsersOnlineStatusResp.SuccessResult")
}
// Reference imports to suppress errors if they are not otherwise used.
@ -286,6 +557,7 @@ const _ = grpc.SupportPackageIsVersion4
type OnlineMessageRelayServiceClient interface {
MsgToUser(ctx context.Context, in *MsgToUserReq, opts ...grpc.CallOption) (*MsgToUserResp, error)
GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error)
}
type onlineMessageRelayServiceClient struct {
@ -305,10 +577,20 @@ func (c *onlineMessageRelayServiceClient) MsgToUser(ctx context.Context, in *Msg
return out, nil
}
func (c *onlineMessageRelayServiceClient) GetUsersOnlineStatus(ctx context.Context, in *GetUsersOnlineStatusReq, opts ...grpc.CallOption) (*GetUsersOnlineStatusResp, error) {
out := new(GetUsersOnlineStatusResp)
err := grpc.Invoke(ctx, "/relay.OnlineMessageRelayService/GetUsersOnlineStatus", in, out, c.cc, opts...)
if err != nil {
return nil, err
}
return out, nil
}
// Server API for OnlineMessageRelayService service
type OnlineMessageRelayServiceServer interface {
MsgToUser(context.Context, *MsgToUserReq) (*MsgToUserResp, error)
GetUsersOnlineStatus(context.Context, *GetUsersOnlineStatusReq) (*GetUsersOnlineStatusResp, error)
}
func RegisterOnlineMessageRelayServiceServer(s *grpc.Server, srv OnlineMessageRelayServiceServer) {
@ -333,6 +615,24 @@ func _OnlineMessageRelayService_MsgToUser_Handler(srv interface{}, ctx context.C
return interceptor(ctx, in, info, handler)
}
func _OnlineMessageRelayService_GetUsersOnlineStatus_Handler(srv interface{}, ctx context.Context, dec func(interface{}) error, interceptor grpc.UnaryServerInterceptor) (interface{}, error) {
in := new(GetUsersOnlineStatusReq)
if err := dec(in); err != nil {
return nil, err
}
if interceptor == nil {
return srv.(OnlineMessageRelayServiceServer).GetUsersOnlineStatus(ctx, in)
}
info := &grpc.UnaryServerInfo{
Server: srv,
FullMethod: "/relay.OnlineMessageRelayService/GetUsersOnlineStatus",
}
handler := func(ctx context.Context, req interface{}) (interface{}, error) {
return srv.(OnlineMessageRelayServiceServer).GetUsersOnlineStatus(ctx, req.(*GetUsersOnlineStatusReq))
}
return interceptor(ctx, in, info, handler)
}
var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{
ServiceName: "relay.OnlineMessageRelayService",
HandlerType: (*OnlineMessageRelayServiceServer)(nil),
@ -341,39 +641,57 @@ var _OnlineMessageRelayService_serviceDesc = grpc.ServiceDesc{
MethodName: "MsgToUser",
Handler: _OnlineMessageRelayService_MsgToUser_Handler,
},
{
MethodName: "GetUsersOnlineStatus",
Handler: _OnlineMessageRelayService_GetUsersOnlineStatus_Handler,
},
},
Streams: []grpc.StreamDesc{},
Metadata: "relay/relay.proto",
}
func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_ff2396ffa84abfa7) }
var fileDescriptor_relay_ff2396ffa84abfa7 = []byte{
// 414 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x74, 0x92, 0xc1, 0x6b, 0xdb, 0x30,
0x14, 0xc6, 0xf1, 0xbc, 0xa4, 0xcd, 0x4b, 0x93, 0xac, 0xda, 0x28, 0x5a, 0x0f, 0xc3, 0x84, 0x51,
0xc2, 0x0e, 0x19, 0x74, 0xb0, 0x4b, 0x6f, 0xab, 0x09, 0x18, 0xe6, 0x76, 0xc8, 0xe9, 0x65, 0x37,
0xd7, 0x7d, 0x33, 0x62, 0xb6, 0xe4, 0x48, 0x5e, 0xa1, 0xff, 0xdd, 0xfe, 0xb4, 0xa1, 0xa7, 0x64,
0xd1, 0x32, 0x7a, 0x31, 0xfe, 0x7e, 0xef, 0xf3, 0xf3, 0xa7, 0xa7, 0x07, 0xa7, 0x06, 0x9b, 0xf2,
0xe9, 0x23, 0x3d, 0x97, 0x9d, 0xd1, 0xbd, 0x66, 0x03, 0x12, 0xf3, 0xdf, 0x31, 0x9c, 0xe4, 0xb6,
0x5e, 0xeb, 0x3b, 0x8b, 0x46, 0xe0, 0x86, 0x9d, 0xc1, 0xb0, 0x40, 0xf5, 0x90, 0xa5, 0x3c, 0x4a,
0xa2, 0xc5, 0x48, 0x6c, 0x95, 0xe3, 0x02, 0xab, 0xc7, 0x2c, 0xe5, 0x2f, 0x3c, 0xf7, 0x8a, 0x71,
0x38, 0xba, 0xd6, 0xaa, 0x47, 0xd5, 0xf3, 0x01, 0x15, 0x76, 0xd2, 0x55, 0x9c, 0xa7, 0xc0, 0x0d,
0x1f, 0x26, 0xd1, 0x22, 0x16, 0x3b, 0xc9, 0xce, 0xe1, 0xd8, 0x75, 0x5d, 0xcb, 0x16, 0xf9, 0x11,
0x95, 0xfe, 0x6a, 0xf7, 0x55, 0x6e, 0xeb, 0x95, 0xd1, 0x2d, 0x3f, 0x4e, 0xa2, 0xc5, 0x40, 0xec,
0x24, 0x4b, 0x60, 0xbc, 0x6d, 0xbd, 0x7e, 0xea, 0x90, 0x8f, 0xa8, 0x1a, 0x22, 0xe7, 0x28, 0xd0,
0x5a, 0xa9, 0x15, 0x39, 0xc0, 0x3b, 0x02, 0xe4, 0x1c, 0xb7, 0x1d, 0x9a, 0xb2, 0x97, 0x5a, 0x65,
0x29, 0x1f, 0x53, 0xe2, 0x10, 0xf9, 0x1e, 0xe6, 0x11, 0x4d, 0x6e, 0xeb, 0x2c, 0xe5, 0x27, 0xde,
0x11, 0x20, 0xf6, 0x0e, 0xe0, 0x5b, 0x53, 0xf6, 0x3f, 0xb4, 0x69, 0xb3, 0x94, 0x4f, 0xe8, 0x27,
0x01, 0x61, 0x17, 0x30, 0x75, 0xa7, 0x41, 0x73, 0x23, 0xab, 0x9f, 0x37, 0x65, 0x8b, 0x7c, 0x4a,
0x4d, 0x0e, 0x28, 0x7b, 0x0f, 0x13, 0x4f, 0x56, 0x65, 0x85, 0x77, 0xe2, 0x2b, 0x9f, 0x91, 0xed,
0x5f, 0x48, 0xa7, 0x6e, 0x24, 0xaa, 0xde, 0xe7, 0x79, 0xe5, 0xf3, 0x04, 0x68, 0x7e, 0x05, 0x93,
0xe0, 0x06, 0x6d, 0xc7, 0x3e, 0xc0, 0x4b, 0x83, 0xb6, 0xe3, 0x51, 0x12, 0x2f, 0xc6, 0x97, 0x67,
0x4b, 0x7f, 0xed, 0x85, 0x54, 0x75, 0x83, 0x7b, 0x27, 0x79, 0xe6, 0x1b, 0x98, 0x1d, 0x14, 0xdc,
0xf9, 0x04, 0xda, 0x5f, 0x4d, 0x7f, 0xad, 0x1f, 0x90, 0xb6, 0x20, 0x16, 0x01, 0x79, 0x76, 0x13,
0x2e, 0x60, 0xea, 0xde, 0xdc, 0x24, 0x56, 0x7e, 0x36, 0x31, 0xcd, 0xe6, 0x80, 0x5e, 0x16, 0xf0,
0xf6, 0x56, 0x35, 0x52, 0x61, 0x8e, 0xd6, 0x96, 0x35, 0x0a, 0x17, 0xcf, 0x0d, 0x58, 0x56, 0xc8,
0x3e, 0xc3, 0x68, 0x9f, 0xe4, 0xf5, 0x36, 0x7a, 0xb8, 0xa0, 0xe7, 0x6f, 0xfe, 0x87, 0xb6, 0xfb,
0x72, 0xfa, 0x7d, 0xb6, 0xf4, 0xfb, 0x7d, 0xd5, 0xdd, 0x53, 0xc7, 0xfb, 0x21, 0x2d, 0xfa, 0xa7,
0x3f, 0x01, 0x00, 0x00, 0xff, 0xff, 0xe2, 0x9b, 0x83, 0x12, 0xfd, 0x02, 0x00, 0x00,
func init() { proto.RegisterFile("relay/relay.proto", fileDescriptor_relay_709d2b3cc3a7ad83) }
var fileDescriptor_relay_709d2b3cc3a7ad83 = []byte{
// 628 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x54, 0x41, 0x6b, 0xdb, 0x4c,
0x10, 0x45, 0x9f, 0xe2, 0x24, 0x9e, 0xd8, 0xc9, 0x97, 0x6d, 0x48, 0xb7, 0x3a, 0xa4, 0xc6, 0x94,
0x60, 0x4a, 0xeb, 0x42, 0x0a, 0xbd, 0xe4, 0x56, 0x0b, 0x17, 0x41, 0x9c, 0x84, 0x95, 0x43, 0x4b,
0x7b, 0x52, 0xe4, 0x89, 0x11, 0x95, 0x25, 0x79, 0x77, 0x1d, 0xc8, 0xdf, 0xe9, 0xb9, 0xf7, 0x5e,
0xfb, 0xd3, 0xca, 0xee, 0x4a, 0xf6, 0xda, 0xb5, 0x1b, 0x72, 0x31, 0x7e, 0x6f, 0x66, 0xdf, 0xcc,
0xbc, 0xd9, 0x15, 0x1c, 0x72, 0x4c, 0xa3, 0x87, 0x77, 0xfa, 0xb7, 0x5b, 0xf0, 0x5c, 0xe6, 0xa4,
0xa6, 0x41, 0xfb, 0xb7, 0x0b, 0x8d, 0x81, 0x18, 0x0f, 0xf3, 0x1b, 0x81, 0x9c, 0xe1, 0x94, 0x1c,
0xc3, 0x76, 0x88, 0xd9, 0x28, 0xf0, 0xa9, 0xd3, 0x72, 0x3a, 0x75, 0x56, 0x22, 0xc5, 0x33, 0x8c,
0xef, 0x03, 0x9f, 0xfe, 0x67, 0x78, 0x83, 0x08, 0x85, 0x9d, 0x5e, 0x9e, 0x49, 0xcc, 0x24, 0xad,
0xe9, 0x40, 0x05, 0x55, 0x44, 0xe5, 0x84, 0x38, 0xa5, 0xdb, 0x2d, 0xa7, 0xe3, 0xb2, 0x0a, 0x12,
0x0f, 0x76, 0x95, 0xea, 0x30, 0x99, 0x20, 0xdd, 0xd1, 0xa1, 0x39, 0x56, 0xa7, 0x06, 0x62, 0xdc,
0xe7, 0xf9, 0x84, 0xee, 0xb6, 0x9c, 0x4e, 0x8d, 0x55, 0x90, 0xb4, 0x60, 0xaf, 0x94, 0x1e, 0x3e,
0x14, 0x48, 0xeb, 0x3a, 0x6a, 0x53, 0x2a, 0x23, 0x44, 0x21, 0x92, 0x3c, 0xd3, 0x19, 0x60, 0x32,
0x2c, 0x4a, 0x65, 0x5c, 0x15, 0xc8, 0x23, 0x99, 0xe4, 0x59, 0xe0, 0xd3, 0x3d, 0xdd, 0xb1, 0x4d,
0x19, 0x0d, 0x7e, 0x8f, 0x7c, 0x20, 0xc6, 0x81, 0x4f, 0x1b, 0x26, 0xc3, 0xa2, 0xc8, 0x09, 0xc0,
0x75, 0x1a, 0xc9, 0xbb, 0x9c, 0x4f, 0x02, 0x9f, 0x36, 0x75, 0x11, 0x8b, 0x21, 0xa7, 0xb0, 0xaf,
0xa6, 0x41, 0x7e, 0x99, 0xc4, 0xdf, 0x2f, 0xa3, 0x09, 0xd2, 0x7d, 0x2d, 0xb2, 0xc2, 0x92, 0x57,
0xd0, 0x34, 0x4c, 0x3f, 0x8a, 0xf1, 0x86, 0x5d, 0xd0, 0x03, 0x9d, 0xb6, 0x4c, 0xea, 0xa9, 0xd3,
0x04, 0x33, 0x69, 0xfa, 0xf9, 0xdf, 0xf4, 0x63, 0x51, 0xed, 0x73, 0x68, 0x5a, 0x1b, 0x14, 0x05,
0x79, 0x0d, 0x5b, 0x1c, 0x45, 0x41, 0x9d, 0x96, 0xdb, 0xd9, 0x3b, 0x3b, 0xee, 0x9a, 0xb5, 0x87,
0x49, 0x36, 0x4e, 0x71, 0x91, 0xa9, 0x73, 0xda, 0x53, 0x38, 0x58, 0x09, 0xa8, 0xf9, 0x18, 0x8a,
0x59, 0x2a, 0x7b, 0xf9, 0x08, 0xf5, 0x2d, 0x70, 0x99, 0xc5, 0x6c, 0xbc, 0x09, 0xa7, 0xb0, 0xaf,
0xfe, 0x29, 0x27, 0xfa, 0xc6, 0x1b, 0x57, 0x7b, 0xb3, 0xc2, 0xb6, 0xbf, 0xc1, 0xf3, 0x4f, 0x28,
0x55, 0x29, 0x71, 0x95, 0xa5, 0x49, 0x86, 0xa1, 0x8c, 0xe4, 0x4c, 0xa8, 0xcb, 0x77, 0x02, 0x30,
0x13, 0xc8, 0x03, 0xff, 0x22, 0x11, 0x52, 0xf7, 0x5f, 0x67, 0x16, 0xa3, 0xcc, 0xc8, 0xad, 0xf5,
0x99, 0xfa, 0x36, 0xd5, 0xfe, 0xb5, 0x05, 0x74, 0xbd, 0xba, 0x28, 0xd4, 0xdd, 0x42, 0xce, 0xe7,
0x63, 0xd5, 0x58, 0x05, 0xd5, 0x4c, 0xc8, 0xd5, 0x7e, 0xab, 0x99, 0x0c, 0x22, 0x21, 0x34, 0xc5,
0x2c, 0x8e, 0x51, 0x08, 0x63, 0x00, 0x75, 0xb5, 0xa7, 0x6f, 0x4b, 0x4f, 0x37, 0x55, 0xea, 0x86,
0xf6, 0x21, 0xb6, 0xac, 0x41, 0xae, 0xa1, 0x71, 0x17, 0x25, 0x29, 0x8e, 0x4a, 0xcd, 0x2d, 0xad,
0xf9, 0xe6, 0x31, 0xcd, 0xbe, 0x3e, 0xe3, 0xa3, 0x8c, 0x92, 0x94, 0x2d, 0x29, 0x78, 0x3d, 0x68,
0x96, 0x15, 0x4d, 0x58, 0xbd, 0xb0, 0xa2, 0xbc, 0x91, 0xe5, 0x3b, 0x9e, 0x63, 0x35, 0xab, 0xd0,
0xaa, 0xd5, 0xac, 0x06, 0x79, 0x5f, 0xa0, 0x61, 0x97, 0x50, 0x79, 0xc6, 0x7a, 0xbd, 0xc7, 0x3a,
0x2b, 0xd1, 0xd3, 0x5d, 0xf4, 0x7e, 0x38, 0xf3, 0xfe, 0x4a, 0x0b, 0x16, 0xda, 0xce, 0x92, 0xf6,
0x86, 0xde, 0x48, 0x04, 0x47, 0x23, 0xdd, 0x55, 0xf5, 0xce, 0x8c, 0x2f, 0x4f, 0x5c, 0x47, 0xe9,
0xdd, 0x5a, 0xa9, 0xb3, 0x9f, 0x0e, 0xbc, 0x30, 0x07, 0x07, 0x28, 0x44, 0x34, 0x46, 0xa6, 0x34,
0xd5, 0xc3, 0x4f, 0x62, 0x24, 0x1f, 0xa0, 0xbe, 0x78, 0x21, 0xcf, 0xca, 0x7a, 0xf6, 0x87, 0xd3,
0x3b, 0xfa, 0x9b, 0x14, 0x05, 0xf9, 0x0c, 0x47, 0xeb, 0xba, 0x22, 0x27, 0xff, 0x6c, 0x79, 0xea,
0xbd, 0x7c, 0x64, 0xa4, 0x8f, 0x87, 0x5f, 0x0f, 0xba, 0xe6, 0x83, 0x7e, 0x5e, 0xdc, 0xea, 0x56,
0x6f, 0xb7, 0xf5, 0x97, 0xfd, 0xfd, 0x9f, 0x00, 0x00, 0x00, 0xff, 0xff, 0x4e, 0xe4, 0x7c, 0xdc,
0xee, 0x05, 0x00, 0x00,
}

@ -37,8 +37,34 @@ message SingleMsgToUser{
string RecvID = 2;
int32 RecvPlatFormID = 3;
}
message GetUsersOnlineStatusReq{
repeated string userIDList = 1;
string operationID = 2;
}
message GetUsersOnlineStatusResp{
int32 errCode = 1;
string errMsg = 2;
repeated SuccessResult successResult = 3;
repeated FailedDetail failedResult = 4;
message SuccessDetail{
string platform = 1;
string status = 2;
}
message FailedDetail{
string userID = 3;
int32 errCode = 1;
string errMsg = 2;
}
message SuccessResult{
string userID = 1;
string status = 2;
repeated SuccessDetail detailPlatformStatus = 3;
}
}
service OnlineMessageRelayService {
rpc MsgToUser(MsgToUserReq) returns(MsgToUserResp);
rpc GetUsersOnlineStatus(GetUsersOnlineStatusReq)returns(GetUsersOnlineStatusResp);
// rpc SendMsgByWS(SendMsgByWSReq) returns(MsgToUserResp);
}

@ -35,7 +35,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_user_9e1dacb346b997d7, []int{0}
return fileDescriptor_user_23985c8245c722d0, []int{0}
}
func (m *CommonResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_CommonResp.Unmarshal(m, b)
@ -81,7 +81,7 @@ func (m *DeleteUsersResp) Reset() { *m = DeleteUsersResp{} }
func (m *DeleteUsersResp) String() string { return proto.CompactTextString(m) }
func (*DeleteUsersResp) ProtoMessage() {}
func (*DeleteUsersResp) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{1}
return fileDescriptor_user_23985c8245c722d0, []int{1}
}
func (m *DeleteUsersResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteUsersResp.Unmarshal(m, b)
@ -128,7 +128,7 @@ func (m *DeleteUsersReq) Reset() { *m = DeleteUsersReq{} }
func (m *DeleteUsersReq) String() string { return proto.CompactTextString(m) }
func (*DeleteUsersReq) ProtoMessage() {}
func (*DeleteUsersReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{2}
return fileDescriptor_user_23985c8245c722d0, []int{2}
}
func (m *DeleteUsersReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_DeleteUsersReq.Unmarshal(m, b)
@ -181,7 +181,7 @@ func (m *GetAllUsersUidReq) Reset() { *m = GetAllUsersUidReq{} }
func (m *GetAllUsersUidReq) String() string { return proto.CompactTextString(m) }
func (*GetAllUsersUidReq) ProtoMessage() {}
func (*GetAllUsersUidReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{3}
return fileDescriptor_user_23985c8245c722d0, []int{3}
}
func (m *GetAllUsersUidReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetAllUsersUidReq.Unmarshal(m, b)
@ -227,7 +227,7 @@ func (m *GetAllUsersUidResp) Reset() { *m = GetAllUsersUidResp{} }
func (m *GetAllUsersUidResp) String() string { return proto.CompactTextString(m) }
func (*GetAllUsersUidResp) ProtoMessage() {}
func (*GetAllUsersUidResp) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{4}
return fileDescriptor_user_23985c8245c722d0, []int{4}
}
func (m *GetAllUsersUidResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetAllUsersUidResp.Unmarshal(m, b)
@ -274,7 +274,7 @@ func (m *GetUserInfoReq) Reset() { *m = GetUserInfoReq{} }
func (m *GetUserInfoReq) String() string { return proto.CompactTextString(m) }
func (*GetUserInfoReq) ProtoMessage() {}
func (*GetUserInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{5}
return fileDescriptor_user_23985c8245c722d0, []int{5}
}
func (m *GetUserInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInfoReq.Unmarshal(m, b)
@ -328,7 +328,7 @@ func (m *GetUserInfoResp) Reset() { *m = GetUserInfoResp{} }
func (m *GetUserInfoResp) String() string { return proto.CompactTextString(m) }
func (*GetUserInfoResp) ProtoMessage() {}
func (*GetUserInfoResp) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{6}
return fileDescriptor_user_23985c8245c722d0, []int{6}
}
func (m *GetUserInfoResp) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_GetUserInfoResp.Unmarshal(m, b)
@ -387,7 +387,7 @@ func (m *UserInfo) Reset() { *m = UserInfo{} }
func (m *UserInfo) String() string { return proto.CompactTextString(m) }
func (*UserInfo) ProtoMessage() {}
func (*UserInfo) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{7}
return fileDescriptor_user_23985c8245c722d0, []int{7}
}
func (m *UserInfo) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UserInfo.Unmarshal(m, b)
@ -475,7 +475,7 @@ func (m *LogoutReq) Reset() { *m = LogoutReq{} }
func (m *LogoutReq) String() string { return proto.CompactTextString(m) }
func (*LogoutReq) ProtoMessage() {}
func (*LogoutReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{8}
return fileDescriptor_user_23985c8245c722d0, []int{8}
}
func (m *LogoutReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_LogoutReq.Unmarshal(m, b)
@ -529,7 +529,7 @@ func (m *UpdateUserInfoReq) Reset() { *m = UpdateUserInfoReq{} }
func (m *UpdateUserInfoReq) String() string { return proto.CompactTextString(m) }
func (*UpdateUserInfoReq) ProtoMessage() {}
func (*UpdateUserInfoReq) Descriptor() ([]byte, []int) {
return fileDescriptor_user_9e1dacb346b997d7, []int{9}
return fileDescriptor_user_23985c8245c722d0, []int{9}
}
func (m *UpdateUserInfoReq) XXX_Unmarshal(b []byte) error {
return xxx_messageInfo_UpdateUserInfoReq.Unmarshal(m, b)
@ -803,9 +803,9 @@ var _User_serviceDesc = grpc.ServiceDesc{
Metadata: "user/user.proto",
}
func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_9e1dacb346b997d7) }
func init() { proto.RegisterFile("user/user.proto", fileDescriptor_user_23985c8245c722d0) }
var fileDescriptor_user_9e1dacb346b997d7 = []byte{
var fileDescriptor_user_23985c8245c722d0 = []byte{
// 562 bytes of a gzipped FileDescriptorProto
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0xa4, 0x54, 0x4d, 0x6f, 0xd3, 0x40,
0x10, 0x95, 0xed, 0x24, 0x8d, 0x27, 0x6a, 0x92, 0xae, 0x0a, 0xac, 0x22, 0x84, 0x22, 0x8b, 0x43,

@ -65,9 +65,11 @@ message UpdateUserInfoReq{
string Uid = 10;
}
service user {
rpc getUserInfo(GetUserInfoReq) returns(GetUserInfoResp);
rpc UpdateUserInfo(UpdateUserInfoReq) returns(CommonResp);
rpc DeleteUsers(DeleteUsersReq)returns(DeleteUsersResp);
rpc GetAllUsersUid(GetAllUsersUidReq)returns(GetAllUsersUidResp);
}

@ -17,7 +17,7 @@ func init() {
// see https://gist.github.com/jniltinho/9787946#gistcomment-3019898
conn, err := net.Dial("udp", "8.8.8.8:80")
if err != nil {
panic(err)
panic(err.Error())
}
defer conn.Close()

Loading…
Cancel
Save