@@ -22,6 +22,7 @@ require ( | |||||
) | ) | ||||
require ( | require ( | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2 // indirect | |||||
github.com/PuerkitoBio/purell v1.1.1 // indirect | github.com/PuerkitoBio/purell v1.1.1 // indirect | ||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect | ||||
github.com/davecgh/go-spew v1.1.1 // indirect | github.com/davecgh/go-spew v1.1.1 // indirect | ||||
@@ -1,4 +1,6 @@ | |||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= | ||||
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2 h1:LUWlvBgmzZfGqvH4VGEWk+JhXHlI+MFmLNl9uX7eh28= | |||||
code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git v1.0.2/go.mod h1:IEw6A61Kp2ctoeKIQMFVM/cFq9PUDAzJMb5lVXiEY2Y= | |||||
github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= | ||||
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= | ||||
github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= | github.com/PuerkitoBio/goquery v1.5.1/go.mod h1:GsLWisAFVj4WgDibEWF4pvYnkVQBpKBKeU+7zCJoLcc= | ||||
@@ -165,6 +167,10 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 | |||||
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= | github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= | ||||
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= | ||||
github.com/syyongx/php2go v0.9.7/go.mod h1:meN2eIhhUoxOd2nMxbpe8g6cFPXI5O9/UAAuz7oDdzw= | |||||
github.com/tidwall/gjson v1.14.1/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk= | |||||
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM= | |||||
github.com/tidwall/pretty v1.2.0/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU= | |||||
github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | github.com/ugorji/go v1.1.7/go.mod h1:kZn38zHttfInRq0xu/PH0az30d+z6vm202qpg1oXVMw= | ||||
github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= | github.com/ugorji/go/codec v1.1.7 h1:2SvQaVZ1ouYrrKKwoSk2pzd4A9evlKJb9oTL+OaLUSs= | ||||
github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | github.com/ugorji/go/codec v1.1.7/go.mod h1:Ax+UKWsSmolVDwsd+7N3ZtXu+yMGCf907BLYF3GoBXY= | ||||
@@ -0,0 +1,81 @@ | |||||
package db | |||||
import ( | |||||
"fmt" | |||||
"gim/internal/business/comm/db/model" | |||||
"gim/internal/business/comm/md" | |||||
"gim/internal/business/comm/utils" | |||||
"gim/internal/business/comm/utils/logx" | |||||
"gim/pkg/db" | |||||
"gim/pkg/gerrors" | |||||
) | |||||
type dbUserPushForJg struct{} | |||||
var DbUserPushForJg = new(dbUserPushForJg) | |||||
// UserPushForJgGetOne 获取一条记录 | |||||
func (*dbUserPushForJg) UserPushForJgGetOne(key string, masterId int64) (*model.UserPushForJg, error) { | |||||
var cfgList model.UserPushForJg | |||||
if err := db.DB.Where("`key` = ? and `master_id` = ?", key, masterId).First(&cfgList).Error; err != nil { | |||||
return nil, gerrors.WrapError(err) | |||||
} | |||||
return &cfgList, nil | |||||
} | |||||
// UserPushForJgInsert 插入一条配置信息 | |||||
func (*dbUserPushForJg) UserPushForJgInsert(uid, masterId int64, pushAlia string) bool { | |||||
cfg := model.UserPushForJg{Uid: uid, PushAlia: pushAlia, MasterId: masterId} | |||||
err := db.DB.Create(&cfg).Error | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return false | |||||
} | |||||
return true | |||||
} | |||||
// UserPushForJgUpdate 修改某条配置信息 | |||||
func (*dbUserPushForJg) UserPushForJgUpdate(uid, masterId int64, pushAlia string) bool { | |||||
cfg := model.UserPushForJg{Uid: uid, PushAlia: pushAlia, MasterId: masterId} | |||||
err := db.DB.Where("`uid` = ? and `master_id` = ?", uid, masterId).Update(&cfg).Error | |||||
if err != nil { | |||||
logx.Error(err) | |||||
return false | |||||
} | |||||
return true | |||||
} | |||||
// UserPushForJgGetWithDb 单条记录获取 | |||||
func (*dbUserPushForJg) UserPushForJgGetWithDb(masterId string, HKey string) string { | |||||
cacheKey := fmt.Sprintf(md.AppCfgCacheKey, masterId, HKey[0:1]) | |||||
get, err := db.RedisUtil.HGetString(cacheKey, HKey) | |||||
if err != nil || get == "" { | |||||
cfg, err := DbUserPushForJg.UserPushForJgGetOne(HKey, utils.StrToInt64(masterId)) | |||||
if err != nil || cfg == nil { | |||||
_ = logx.Error(err) | |||||
return "" | |||||
} | |||||
// key是否存在 | |||||
cacheKeyExist := false | |||||
if db.RedisUtil.Exists(cacheKey) { | |||||
cacheKeyExist = true | |||||
} | |||||
// 设置缓存 | |||||
_, err = db.RedisUtil.HSet(cacheKey, HKey, cfg.PushAlia) | |||||
if err != nil { | |||||
_ = logx.Error(err) | |||||
return "" | |||||
} | |||||
if !cacheKeyExist { // 如果是首次设置 设置过期时间 | |||||
_, err := db.RedisUtil.Expire(cacheKey, md.CfgCacheTime) | |||||
if err != nil { | |||||
_ = logx.Error(err) | |||||
return "" | |||||
} | |||||
} | |||||
return cfg.PushAlia | |||||
} | |||||
return get | |||||
} |
@@ -0,0 +1,8 @@ | |||||
package model | |||||
type UserPushForJg struct { | |||||
Id int64 | |||||
Uid int64 // 用户id | |||||
PushAlia string // 用户头像 | |||||
MasterId int64 // 站长id | |||||
} |
@@ -2,6 +2,7 @@ package md | |||||
// 缓存key统一管理, %s格式化为masterId | // 缓存key统一管理, %s格式化为masterId | ||||
const ( | const ( | ||||
AppCfgCacheKey = "%s:gim_cfg_cache:%s" // 占位符: masterId, key的第一个字母 | |||||
CfgCacheTime = 86400 | |||||
AppCfgCacheKey = "%s:gim_cfg_cache:%s" // 占位符: masterId, key的第一个字母 | |||||
AppUserPushForJgCacheKey = "%s:gim_user_push_for_jg_cache:%s" // 占位符: masterId, key的第一个字母 | |||||
CfgCacheTime = 86400 | |||||
) | ) |
@@ -84,6 +84,19 @@ func (s *LogicExtServer) AgreeAddFriend(ctx context.Context, in *pb.AgreeAddFrie | |||||
return &pb.Empty{}, nil | return &pb.Empty{}, nil | ||||
} | } | ||||
func (s *LogicExtServer) DeleteFriend(ctx context.Context, in *pb.DeleteFriendReq) (*pb.Empty, error) { | |||||
userId, _, err := grpclib.GetCtxData(ctx) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
err = app.FriendApp.DeleteFriend(ctx, userId, in.UserId) | |||||
if err != nil { | |||||
return nil, err | |||||
} | |||||
return &pb.Empty{}, nil | |||||
} | |||||
func (s *LogicExtServer) SetFriend(ctx context.Context, req *pb.SetFriendReq) (*pb.SetFriendResp, error) { | func (s *LogicExtServer) SetFriend(ctx context.Context, req *pb.SetFriendReq) (*pb.SetFriendResp, error) { | ||||
userId, _, err := grpclib.GetCtxData(ctx) | userId, _, err := grpclib.GetCtxData(ctx) | ||||
if err != nil { | if err != nil { | ||||
@@ -21,6 +21,11 @@ func (*friendApp) AddFriend(ctx context.Context, userId, friendId int64, remarks | |||||
return frienddomain.FriendService.AddFriend(ctx, userId, friendId, remarks, description) | return frienddomain.FriendService.AddFriend(ctx, userId, friendId, remarks, description) | ||||
} | } | ||||
// DeleteFriend 添加好友 | |||||
func (*friendApp) DeleteFriend(ctx context.Context, userId, friendId int64) error { | |||||
return frienddomain.FriendService.DeleteFriend(ctx, userId, friendId) | |||||
} | |||||
// AgreeAddFriend 同意添加好友 | // AgreeAddFriend 同意添加好友 | ||||
func (*friendApp) AgreeAddFriend(ctx context.Context, userId, friendId int64, remarks string) error { | func (*friendApp) AgreeAddFriend(ctx context.Context, userId, friendId int64, remarks string) error { | ||||
return frienddomain.FriendService.AgreeAddFriend(ctx, userId, friendId, remarks) | return frienddomain.FriendService.AgreeAddFriend(ctx, userId, friendId, remarks) | ||||
@@ -29,6 +29,12 @@ func (*friendRepo) Save(friend *Friend) error { | |||||
return gerrors.WrapError(db.DB.Save(&friend).Error) | return gerrors.WrapError(db.DB.Save(&friend).Error) | ||||
} | } | ||||
// Delete 删除好友 | |||||
func (*friendRepo) Delete(userId, friendId int64) error { | |||||
friend := Friend{} | |||||
return gerrors.WrapError(db.DB.Where("user_id = ? and friend_id = ?", userId, friendId).Delete(&friend).Error) | |||||
} | |||||
// List 获取好友列表 | // List 获取好友列表 | ||||
func (*friendRepo) List(userId int64, status int) ([]Friend, error) { | func (*friendRepo) List(userId int64, status int) ([]Friend, error) { | ||||
var friends []Friend | var friends []Friend | ||||
@@ -50,6 +50,15 @@ func (s *friendService) List(ctx context.Context, userId int64) ([]*pb.Friend, e | |||||
return infos, nil | return infos, nil | ||||
} | } | ||||
// DeleteFriend 删除好友 | |||||
func (*friendService) DeleteFriend(ctx context.Context, userId, friendId int64) error { | |||||
err := FriendRepo.Delete(userId, friendId) | |||||
if err != nil { | |||||
return err | |||||
} | |||||
return nil | |||||
} | |||||
// AddFriend 添加好友 | // AddFriend 添加好友 | ||||
func (*friendService) AddFriend(ctx context.Context, userId, friendId int64, remarks, description string) error { | func (*friendService) AddFriend(ctx context.Context, userId, friendId int64, remarks, description string) error { | ||||
friend, err := FriendRepo.Get(userId, friendId) | friend, err := FriendRepo.Get(userId, friendId) | ||||
@@ -0,0 +1,15 @@ | |||||
package md | |||||
type PushParams struct { | |||||
MasterId string `json:"master_id"` //站长id | |||||
Uid string `json:"uid"` //用户id | |||||
PushAlia string `json:"push_alia"` //推送别名 | |||||
Title string `json:"title"` //标题 | |||||
Content string `json:"content"` //内容 | |||||
PushType string `json:"push_type"` //推送类型`zhi_ying_gim` | |||||
MessageType string `json:"message_type"` //消息类型`UNKNOWN、TEXT、FACE、VOICE、IMAGE、FILE、LOCATION、COMMAND、CUSTOM` | |||||
SendUserNickname string `json:"send_user_nickname"` //消费发送者-会员昵称 | |||||
SendUserAvatarUrl string `json:"send_user_avatar_url"` //消费发送者-会员头像 | |||||
Memo string `json:"reason"` //备注 | |||||
Times string `json:"times"` //时间 | |||||
} |
@@ -0,0 +1,55 @@ | |||||
package service | |||||
import ( | |||||
jg_push "code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git/hdl" | |||||
md2 "code.fnuoos.com/go_rely_warehouse/zyos_go_jg_push.git/md" | |||||
"gim/internal/business/comm/db" | |||||
md3 "gim/internal/logic/domain/message/md" | |||||
"strings" | |||||
) | |||||
func getChangeContent(args md3.PushParams, Content string) string { | |||||
Content = strings.Replace(Content, "[MasterId]", args.MasterId, -1) | |||||
Content = strings.Replace(Content, "[消费发送者-会员昵称]", args.SendUserNickname, -1) | |||||
Content = strings.Replace(Content, "[备注]", args.Memo, -1) | |||||
Content = strings.Replace(Content, "[时间]", args.Times, -1) | |||||
return Content | |||||
} | |||||
// CommAddPush 公共处理推送数据 | |||||
func CommAddPush(args md3.PushParams) { | |||||
pushPlatform := db.DbSysCfg.SysCfgFindWithDb(args.MasterId, "app_push_platform")["app_push_platform"] | |||||
if pushPlatform == "jg" { //极光 | |||||
args.Content = getChangeContent(args, args.Content) | |||||
JgPush(args) | |||||
return | |||||
} | |||||
return | |||||
} | |||||
func JgPush(args md3.PushParams) { | |||||
thirdJgPush := db.DbSysCfg.SysCfgFindWithDb(args.MasterId, "jg_push_app_key", "jg_push_app_secret") | |||||
if thirdJgPush["jg_push_app_key"] == "" || thirdJgPush["jg_push_app_secret"] == "" { | |||||
return | |||||
} | |||||
alia := db.DbUserPushForJg.UserPushForJgGetWithDb(args.MasterId, args.Uid) | |||||
var aud = md2.PushAudience{Alias: []string{alia}} | |||||
var extras interface{} | |||||
var param = md2.PushParam{ | |||||
Platform: "all", | |||||
Audience: aud, | |||||
Title: args.Title, | |||||
Content: args.Content, | |||||
Extras: extras, | |||||
} | |||||
send, _, err := jg_push.Send(thirdJgPush["jg_push_app_key"], thirdJgPush["jg_push_app_secret"], param) | |||||
if err != nil { | |||||
return | |||||
} | |||||
if send == "" { | |||||
return | |||||
} | |||||
//TODO::发送成功处理 | |||||
return | |||||
} |
@@ -2,6 +2,8 @@ package service | |||||
import ( | import ( | ||||
"context" | "context" | ||||
svc "gim/internal/business/comm/service" | |||||
"gim/internal/logic/domain/message/md" | |||||
"gim/internal/logic/domain/message/model" | "gim/internal/logic/domain/message/model" | ||||
"gim/internal/logic/domain/message/repo" | "gim/internal/logic/domain/message/repo" | ||||
"gim/internal/logic/proxy" | "gim/internal/logic/proxy" | ||||
@@ -11,6 +13,8 @@ import ( | |||||
"gim/pkg/pb" | "gim/pkg/pb" | ||||
"gim/pkg/rpc" | "gim/pkg/rpc" | ||||
"gim/pkg/util" | "gim/pkg/util" | ||||
"strconv" | |||||
"time" | |||||
"go.uber.org/zap" | "go.uber.org/zap" | ||||
"google.golang.org/protobuf/proto" | "google.golang.org/protobuf/proto" | ||||
@@ -89,7 +93,9 @@ func (*messageService) ListByUserIdAndSeq(ctx context.Context, userId, seq int64 | |||||
// SendToUser 将消息发送给用户 | // SendToUser 将消息发送给用户 | ||||
func (*messageService) SendToUser(ctx context.Context, sender *pb.Sender, toUserId int64, req *pb.SendMessageReq) (int64, error) { | func (*messageService) SendToUser(ctx context.Context, sender *pb.Sender, toUserId int64, req *pb.SendMessageReq) (int64, error) { | ||||
masterId, _ := grpclib.GetCtxMasterId(ctx) | |||||
logger.Logger.Debug("SendToUser", | logger.Logger.Debug("SendToUser", | ||||
zap.String("master_id", masterId), | |||||
zap.Int64("request_id", grpclib.GetCtxRequestId(ctx)), | zap.Int64("request_id", grpclib.GetCtxRequestId(ctx)), | ||||
zap.Int64("to_user_id", toUserId)) | zap.Int64("to_user_id", toUserId)) | ||||
var ( | var ( | ||||
@@ -154,6 +160,23 @@ func (*messageService) SendToUser(ctx context.Context, sender *pb.Sender, toUser | |||||
for i := range devices { | for i := range devices { | ||||
// 消息不需要投递给发送消息的设备 | // 消息不需要投递给发送消息的设备 | ||||
if sender.DeviceId == devices[i].DeviceId { | if sender.DeviceId == devices[i].DeviceId { | ||||
isOpenAppPush := svc.SysCfgGet(masterId, "is_open_app_push") | |||||
if req.ReceiverType == 1 && isOpenAppPush == "1" { | |||||
//TODO::接收者类型为`user`, 进行极光推送 | |||||
CommAddPush(md.PushParams{ | |||||
MasterId: masterId, | |||||
Uid: strconv.FormatInt(req.ReceiverId, 10), | |||||
PushAlia: "", | |||||
Title: "新消息提醒", | |||||
Content: "", | |||||
PushType: "zhi_ying_gim", | |||||
MessageType: req.MessageType.String(), | |||||
SendUserNickname: sender.Nickname, | |||||
SendUserAvatarUrl: sender.AvatarUrl, | |||||
Memo: sender.SenderType.String(), | |||||
Times: time.Now().Format("2006-01-02 15:04:05.000"), | |||||
}) | |||||
} | |||||
continue | continue | ||||
} | } | ||||
@@ -419,8 +419,8 @@ type Sender struct { | |||||
SenderType SenderType `protobuf:"varint,1,opt,name=sender_type,json=senderType,proto3,enum=pb.SenderType" json:"sender_type,omitempty"` // 发送者类型,1:系统,2:用户,3:第三方业务系统 | SenderType SenderType `protobuf:"varint,1,opt,name=sender_type,json=senderType,proto3,enum=pb.SenderType" json:"sender_type,omitempty"` // 发送者类型,1:系统,2:用户,3:第三方业务系统 | ||||
SenderId int64 `protobuf:"varint,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` // 发送者id | SenderId int64 `protobuf:"varint,2,opt,name=sender_id,json=senderId,proto3" json:"sender_id,omitempty"` // 发送者id | ||||
DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 发送者设备id | DeviceId int64 `protobuf:"varint,3,opt,name=device_id,json=deviceId,proto3" json:"device_id,omitempty"` // 发送者设备id | ||||
AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 昵称 | |||||
Nickname string `protobuf:"bytes,5,opt,name=nickname,proto3" json:"nickname,omitempty"` // 头像 | |||||
AvatarUrl string `protobuf:"bytes,4,opt,name=avatar_url,json=avatarUrl,proto3" json:"avatar_url,omitempty"` // 头像 | |||||
Nickname string `protobuf:"bytes,5,opt,name=nickname,proto3" json:"nickname,omitempty"` // 昵称 | |||||
Extra string `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` // 扩展字段 | Extra string `protobuf:"bytes,6,opt,name=extra,proto3" json:"extra,omitempty"` // 扩展字段 | ||||
} | } | ||||
@@ -18,6 +18,8 @@ service LogicExt { | |||||
rpc AddFriend (AddFriendReq) returns (Empty); | rpc AddFriend (AddFriendReq) returns (Empty); | ||||
// 同意添加好友 | // 同意添加好友 | ||||
rpc AgreeAddFriend (AgreeAddFriendReq) returns (Empty); | rpc AgreeAddFriend (AgreeAddFriendReq) returns (Empty); | ||||
// 删除好友 | |||||
rpc DeleteFriend (DeleteFriendReq) returns (Empty); | |||||
// 设置好友信息 | // 设置好友信息 | ||||
rpc SetFriend (SetFriendReq) returns (SetFriendResp); | rpc SetFriend (SetFriendReq) returns (SetFriendResp); | ||||
// 获取好友列表 | // 获取好友列表 | ||||
@@ -82,6 +84,11 @@ message AddFriendReq { | |||||
string description = 3; // 描述 | string description = 3; // 描述 | ||||
} | } | ||||
message DeleteFriendReq { | |||||
int64 user_id = 1; // 用户id | |||||
} | |||||
message AgreeAddFriendReq { | message AgreeAddFriendReq { | ||||
int64 user_id = 1; // 用户id | int64 user_id = 1; // 用户id | ||||
string remarks = 2; // 备注 | string remarks = 2; // 备注 | ||||
@@ -1,60 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
service BusinessExt { | |||||
// 登录 | |||||
rpc SignIn (SignInReq) returns (SignInResp); | |||||
// 获取用户信息 | |||||
rpc GetUser (GetUserReq) returns (GetUserResp); | |||||
// 更新用户信息 | |||||
rpc UpdateUser (UpdateUserReq) returns (Empty); | |||||
// 搜索用户(这里简单数据库实现,生产环境建议使用ES) | |||||
rpc SearchUser (SearchUserReq) returns (SearchUserResp); | |||||
} | |||||
message Empty{} | |||||
message SignInReq { | |||||
string phone_number = 1; // 手机号 | |||||
string code = 2; // 验证码 | |||||
int64 device_id = 3; // 设备id | |||||
} | |||||
message SignInResp { | |||||
bool is_new = 1; // 是否是新用户 | |||||
int64 user_id = 2; // 用户id | |||||
string token = 3; // token | |||||
} | |||||
message User { | |||||
int64 user_id = 1; // 用户id | |||||
string nickname = 2; // 昵称 | |||||
int32 sex = 3; // 性别 | |||||
string avatar_url = 4; // 头像地址 | |||||
string extra = 5; // 附加字段 | |||||
int64 create_time = 6; // 创建时间 | |||||
int64 update_time = 7; // 更新时间 | |||||
} | |||||
message GetUserReq { | |||||
int64 user_id = 1; // 用户id | |||||
} | |||||
message GetUserResp { | |||||
User user = 1; // 用户信息 | |||||
} | |||||
message UpdateUserReq { | |||||
string nickname = 1; // 昵称 | |||||
int32 sex = 2; // 性别 | |||||
string avatar_url = 3; // 头像地址 | |||||
string extra = 4; // 附加字段 | |||||
} | |||||
message SearchUserReq{ | |||||
string key = 1; | |||||
} | |||||
message SearchUserResp{ | |||||
repeated User users = 1; | |||||
} | |||||
@@ -1,45 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
service BusinessInt { | |||||
// 权限校验 | |||||
rpc Auth (AuthReq) returns (Empty); | |||||
// 批量获取用户信息 | |||||
rpc GetUser (GetUserReq) returns (GetUserResp); | |||||
// 批量获取用户信息 | |||||
rpc GetUsers (GetUsersReq) returns (GetUsersResp); | |||||
} | |||||
message Empty{} | |||||
message User { | |||||
int64 user_id = 1; // 用户id | |||||
string nickname = 2; // 昵称 | |||||
int32 sex = 3; // 性别 | |||||
string avatar_url = 4; // 头像地址 | |||||
string extra = 5; // 附加字段 | |||||
int64 create_time = 6; // 创建时间 | |||||
int64 update_time = 7; // 更新时间 | |||||
} | |||||
message GetUserReq { | |||||
int64 user_id = 1; // 用户id | |||||
} | |||||
message GetUserResp { | |||||
User user = 1; // 用户信息 | |||||
} | |||||
message AuthReq { | |||||
int64 user_id = 1; | |||||
int64 device_id = 2; | |||||
string token = 3; | |||||
} | |||||
message GetUsersReq { | |||||
map<int64, int32> user_ids = 1; // 用户id | |||||
} | |||||
message GetUsersResp { | |||||
map<int64, User> users = 1; // 用户信息 | |||||
} |
@@ -1,5 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
message Empty{} |
@@ -1,174 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
enum PackageType { | |||||
PT_UNKNOWN = 0; // 未知 | |||||
PT_SIGN_IN = 1; // 设备登录请求 | |||||
PT_SYNC = 2; // 消息同步触发 | |||||
PT_HEARTBEAT = 3; // 心跳 | |||||
PT_MESSAGE = 4; // 消息投递 | |||||
PT_SUBSCRIBE_ROOM = 5; // 订阅房间 | |||||
} | |||||
/************************************消息体定义开始************************************/ | |||||
// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 | |||||
message Message { | |||||
Sender sender = 1; // 发送者 | |||||
ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group | |||||
int64 receiver_id = 3; // 用户id或者群组id | |||||
repeated int64 to_user_ids = 4; // 需要@的用户id列表 | |||||
MessageType message_type = 5; // 消息类型 | |||||
bytes message_content = 6; // 消息内容 | |||||
int64 seq = 7; // 用户消息发送序列号 | |||||
int64 send_time = 8; // 消息发送时间戳,精确到毫秒 | |||||
MessageStatus status = 9; // 消息状态 | |||||
} | |||||
message Sender { | |||||
SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 | |||||
int64 sender_id = 2; // 发送者id | |||||
int64 device_id = 3; // 发送者设备id | |||||
string avatar_url = 4; // 昵称 | |||||
string nickname = 5; // 头像 | |||||
string extra = 6; // 扩展字段 | |||||
} | |||||
// 消息类型 | |||||
enum MessageType { | |||||
MT_UNKNOWN = 0; // 未知 | |||||
MT_TEXT = 1; // 文本 | |||||
MT_FACE = 2; // 表情 | |||||
MT_VOICE = 3; // 语音消息 | |||||
MT_IMAGE = 4; // 图片 | |||||
MT_FILE = 5; // 文件 | |||||
MT_LOCATION = 6; // 地理位置 | |||||
MT_COMMAND = 7; // 指令推送 | |||||
MT_CUSTOM = 8; // 自定义 | |||||
} | |||||
// 文本消息 | |||||
message Text { | |||||
string text = 1; // 文本消息内容 | |||||
} | |||||
// 表情消息 | |||||
message Face { | |||||
int64 face_id = 1; | |||||
string face_url = 2; | |||||
} | |||||
// 语音消息 | |||||
message Voice { | |||||
string id = 1; // 语音包id | |||||
int32 size = 2; // 语音包大小 | |||||
int32 duration = 3; // 语音时长 | |||||
string url = 4; // 语音文件URL | |||||
} | |||||
// 图片消息 | |||||
message Image { | |||||
string id = 1; // 图片id | |||||
int32 width = 2; // 图片宽度 | |||||
int32 height = 3; // 图片长度 | |||||
string url = 4; // 图片URL | |||||
string thumbnail_url = 5; // 图片缩略图url | |||||
} | |||||
// 文件消息 | |||||
message File { | |||||
int64 id = 12; // 文件id | |||||
string name = 13; // 文件名 | |||||
int64 size = 14; // 文件大小 | |||||
string url = 15; // 文件url | |||||
} | |||||
// 地理位置消息 | |||||
message Location { | |||||
string desc = 1; // 描述 | |||||
double latitude = 2; // 经度 | |||||
double longitude = 3; // 纬度 | |||||
} | |||||
// Command 指令推送,1000以下,IM内部用,1000以上,留给业务用 | |||||
message Command { | |||||
int32 code = 1; // 指令码 | |||||
bytes data = 2; // 数据内容 | |||||
} | |||||
// 自定义消息 | |||||
message Custom { | |||||
string data = 1; // 自定义数据 | |||||
} | |||||
/************************************消息体定义结束************************************/ | |||||
// 上行数据 | |||||
message Input { | |||||
PackageType type = 1; // 包的类型 | |||||
int64 request_id = 2; // 请求id | |||||
bytes data = 3; // 数据 | |||||
} | |||||
// 下行数据 | |||||
message Output { | |||||
PackageType type = 1; // 包的类型 | |||||
int64 request_id = 2; // 请求id | |||||
int32 code = 3; // 错误码 | |||||
string message = 4; // 错误信息 | |||||
bytes data = 5; // 数据 | |||||
} | |||||
// 设备登录,package_type:1 | |||||
message SignInInput { | |||||
int64 device_id = 1; // 设备id | |||||
int64 user_id = 2; // 用户id | |||||
string token = 3; // 秘钥 | |||||
} | |||||
// 消息同步请求,package_type:2 | |||||
message SyncInput { | |||||
int64 seq = 1; // 客户端已经同步的序列号 | |||||
} | |||||
// 消息同步响应,package_type:2 | |||||
message SyncOutput { | |||||
repeated Message messages = 1; // 消息列表 | |||||
bool has_more = 2; // 是否有更多数据 | |||||
} | |||||
// 订阅房间请求 | |||||
message SubscribeRoomInput { | |||||
int64 room_id = 1; // 房间ID,如果为0,取消房间订阅 | |||||
int64 seq = 2; // 消息消息序列号, | |||||
} | |||||
enum ReceiverType { | |||||
RT_UNKNOWN = 0; // 未知 | |||||
RT_USER = 1; // 用户 | |||||
RT_GROUP = 2; // 群组 | |||||
RT_ROOM = 3; // 房间 | |||||
} | |||||
// 消息投递,package_type:4 | |||||
message MessageSend { | |||||
Message message = 1; // 消息 | |||||
} | |||||
enum SenderType { | |||||
ST_UNKNOWN = 0; // 未知的 | |||||
ST_SYSTEM = 1; // IM系统 | |||||
ST_USER = 2; // 用户 | |||||
ST_BUSINESS = 3; // 业务方 | |||||
} | |||||
enum MessageStatus { | |||||
MS_UNKNOWN = 0; // 未知的 | |||||
MS_NORMAL = 1; // 正常的 | |||||
MS_RECALL = 2; // 撤回 | |||||
} | |||||
// 投递消息回执,package_type:4 | |||||
message MessageACK { | |||||
int64 device_ack = 2; // 设备收到消息的确认号 | |||||
int64 receive_time = 3; // 消息接收时间戳,精确到毫秒 | |||||
} |
@@ -1,83 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
service ConnectInt { | |||||
// 消息投递 | |||||
rpc DeliverMessage (DeliverMessageReq) returns (Empty); | |||||
} | |||||
message Empty{} | |||||
enum SenderType { | |||||
ST_UNKNOWN = 0; // 未知的 | |||||
ST_SYSTEM = 1; // IM系统 | |||||
ST_USER = 2; // 用户 | |||||
ST_BUSINESS = 3; // 业务方 | |||||
} | |||||
message Sender { | |||||
SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 | |||||
int64 sender_id = 2; // 发送者id | |||||
int64 device_id = 3; // 发送者设备id | |||||
string avatar_url = 4; // 昵称 | |||||
string nickname = 5; // 头像 | |||||
string extra = 6; // 扩展字段 | |||||
} | |||||
enum ReceiverType { | |||||
RT_UNKNOWN = 0; // 未知 | |||||
RT_USER = 1; // 用户 | |||||
RT_GROUP = 2; // 群组 | |||||
RT_ROOM = 3; // 房间 | |||||
} | |||||
// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 | |||||
message Message { | |||||
Sender sender = 1; // 发送者 | |||||
ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group | |||||
int64 receiver_id = 3; // 用户id或者群组id | |||||
repeated int64 to_user_ids = 4; // 需要@的用户id列表 | |||||
MessageType message_type = 5; // 消息类型 | |||||
bytes message_content = 6; // 消息内容 | |||||
int64 seq = 7; // 用户消息发送序列号 | |||||
int64 send_time = 8; // 消息发送时间戳,精确到毫秒 | |||||
MessageStatus status = 9; // 消息状态 | |||||
} | |||||
enum MessageStatus { | |||||
MS_UNKNOWN = 0; // 未知的 | |||||
MS_NORMAL = 1; // 正常的 | |||||
MS_RECALL = 2; // 撤回 | |||||
} | |||||
// 消息类型 | |||||
enum MessageType { | |||||
MT_UNKNOWN = 0; // 未知 | |||||
MT_TEXT = 1; // 文本 | |||||
MT_FACE = 2; // 表情 | |||||
MT_VOICE = 3; // 语音消息 | |||||
MT_IMAGE = 4; // 图片 | |||||
MT_FILE = 5; // 文件 | |||||
MT_LOCATION = 6; // 地理位置 | |||||
MT_COMMAND = 7; // 指令推送 | |||||
MT_CUSTOM = 8; // 自定义 | |||||
} | |||||
// 消息投递,package_type:4 | |||||
message MessageSend { | |||||
Message message = 1; // 消息 | |||||
} | |||||
message DeliverMessageReq { | |||||
int64 device_id = 1; // 设备id | |||||
MessageSend message_send = 2; // 数据 | |||||
} | |||||
// 房间推送 | |||||
message PushRoomMsg{ | |||||
int64 room_id = 1; // 设备id | |||||
MessageSend message_send = 2; // 数据 | |||||
} | |||||
// 房间推送 | |||||
message PushAllMsg{ | |||||
MessageSend message_send = 2; // 数据 | |||||
} | |||||
@@ -1,212 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
message Empty{} | |||||
service LogicExt { | |||||
// 注册设备 | |||||
rpc RegisterDevice (RegisterDeviceReq) returns (RegisterDeviceResp); | |||||
// 发送消息 | |||||
rpc SendMessage (SendMessageReq) returns (SendMessageResp); | |||||
// 推送消息到房间 | |||||
rpc PushRoom(PushRoomReq)returns(Empty); | |||||
// 添加好友 | |||||
rpc AddFriend (AddFriendReq) returns (Empty); | |||||
// 同意添加好友 | |||||
rpc AgreeAddFriend (AgreeAddFriendReq) returns (Empty); | |||||
// 设置好友信息 | |||||
rpc SetFriend (SetFriendReq) returns (SetFriendResp); | |||||
// 获取好友列表 | |||||
rpc GetFriends (Empty) returns (GetFriendsResp); | |||||
// 创建群组 | |||||
rpc CreateGroup (CreateGroupReq) returns (CreateGroupResp); | |||||
// 更新群组 | |||||
rpc UpdateGroup (UpdateGroupReq) returns (Empty); | |||||
// 获取群组信息 | |||||
rpc GetGroup (GetGroupReq) returns (GetGroupResp); | |||||
// 获取用户加入的所有群组 | |||||
rpc GetGroups (Empty) returns (GetGroupsResp); | |||||
// 添加群组成员 | |||||
rpc AddGroupMembers (AddGroupMembersReq) returns (AddGroupMembersResp); | |||||
// 更新群组成员信息 | |||||
rpc UpdateGroupMember (UpdateGroupMemberReq) returns (Empty); | |||||
// 添加群组成员 | |||||
rpc DeleteGroupMember (DeleteGroupMemberReq) returns (Empty); | |||||
// 获取群组成员 | |||||
rpc GetGroupMembers (GetGroupMembersReq) returns (GetGroupMembersResp); | |||||
} | |||||
message RegisterDeviceReq { | |||||
int32 type = 2; // 设备类型 | |||||
string brand = 3; // 厂商 | |||||
string model = 4; // 机型 | |||||
string system_version = 5; // 系统版本 | |||||
string sdk_version = 6; // sdk版本号 | |||||
} | |||||
message RegisterDeviceResp { | |||||
int64 device_id = 1; // 设备id | |||||
} | |||||
enum ReceiverType { | |||||
RT_UNKNOWN = 0; // 未知 | |||||
RT_USER = 1; // 用户 | |||||
RT_GROUP = 2; // 群组 | |||||
RT_ROOM = 3; // 房间 | |||||
} | |||||
message SendMessageReq { | |||||
ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group | |||||
int64 receiver_id = 2; // 用户id或者群组id | |||||
repeated int64 to_user_ids = 3; // 需要@的用户id列表 | |||||
MessageType message_type = 4; // 消息类型 | |||||
bytes message_content = 5; // 消息内容 | |||||
int64 send_time = 6; // 消息发送时间戳,精确到毫秒 | |||||
bool is_persist = 7; // 是否将消息持久化到数据库 | |||||
} | |||||
message SendMessageResp { | |||||
int64 seq = 1; // 消息序列号 | |||||
} | |||||
// 消息类型 | |||||
enum MessageType { | |||||
MT_UNKNOWN = 0; // 未知 | |||||
MT_TEXT = 1; // 文本 | |||||
MT_FACE = 2; // 表情 | |||||
MT_VOICE = 3; // 语音消息 | |||||
MT_IMAGE = 4; // 图片 | |||||
MT_FILE = 5; // 文件 | |||||
MT_LOCATION = 6; // 地理位置 | |||||
MT_COMMAND = 7; // 指令推送 | |||||
MT_CUSTOM = 8; // 自定义 | |||||
} | |||||
message PushRoomReq{ | |||||
int64 room_id = 1; // 房间id | |||||
MessageType message_type = 2; // 消息类型 | |||||
bytes message_content = 3; // 消息内容 | |||||
int64 send_time = 4; // 消息发送时间戳,精确到毫秒 | |||||
bool is_persist = 5; // 是否将消息持久化 | |||||
bool is_priority = 6; // 是否优先推送 | |||||
} | |||||
message AddFriendReq { | |||||
int64 friend_id = 1; // 用户id | |||||
string remarks = 2; // 备注 | |||||
string description = 3; // 描述 | |||||
} | |||||
message AgreeAddFriendReq { | |||||
int64 user_id = 1; // 用户id | |||||
string remarks = 2; // 备注 | |||||
} | |||||
message SetFriendReq { | |||||
int64 friend_id = 1; // 好友id | |||||
string remarks = 2; // 备注 | |||||
string extra = 8; // 附加字段 | |||||
} | |||||
message SetFriendResp { | |||||
int64 friend_id = 1; // 好友id | |||||
string remarks = 2; // 备注 | |||||
string extra = 8; // 附加字段 | |||||
} | |||||
message Friend { | |||||
int64 user_id = 1; // 用户id | |||||
string phone_number = 2; // 电话号码 | |||||
string nickname = 3; // 昵称 | |||||
int32 sex = 4; // 性别 | |||||
string avatar_url = 5; // 头像地址 | |||||
string user_extra = 6; // 用户附加字段 | |||||
string remarks = 7; // 备注 | |||||
string extra = 8; // 附加字段 | |||||
} | |||||
message GetFriendsResp { | |||||
repeated Friend friends = 1; | |||||
} | |||||
message CreateGroupReq { | |||||
string name = 1; // 名称 | |||||
string avatar_url = 2; // 头像 | |||||
string introduction = 3; // 简介 | |||||
string extra = 4; // 附加字段 | |||||
repeated int64 member_ids = 5; // 群组成员ID列表 | |||||
} | |||||
message CreateGroupResp { | |||||
int64 group_id = 1; // 群组id | |||||
} | |||||
message UpdateGroupReq { | |||||
int64 group_id = 1; // 群组id | |||||
string avatar_url = 2; // 头像 | |||||
string name = 3; // 名称 | |||||
string introduction = 4; // 简介 | |||||
string extra = 5; // 附加字段 | |||||
} | |||||
message GetGroupReq { | |||||
int64 group_id = 1; | |||||
} | |||||
message GetGroupResp { | |||||
Group group = 1; | |||||
} | |||||
message Group { | |||||
int64 group_id = 1; // 群组id | |||||
string name = 2; // 名称 | |||||
string avatar_url = 3; // 头像 | |||||
string introduction = 4; // 简介 | |||||
int32 user_mum = 5; // 用户数 | |||||
string extra = 6; // 附加字段 | |||||
int64 create_time = 7; // 创建时间 | |||||
int64 update_time = 8; // 更新时间 | |||||
} | |||||
message GetGroupsResp { | |||||
repeated Group groups = 1; | |||||
} | |||||
message AddGroupMembersReq { | |||||
int64 group_id = 1; // 群组id | |||||
repeated int64 user_ids = 2; // 用户id列表 | |||||
} | |||||
message AddGroupMembersResp { | |||||
repeated int64 user_ids = 1; // 已经在群组的用户id列表 | |||||
} | |||||
enum MemberType { | |||||
GMT_UNKNOWN = 0; // 未知 | |||||
GMT_ADMIN = 1; // 管理员 | |||||
GMT_MEMBER = 2; // 成员 | |||||
} | |||||
message UpdateGroupMemberReq { | |||||
int64 group_id = 1; // 群组id | |||||
int64 user_id = 2; // 用户id | |||||
MemberType member_type = 3; // 成员类型 | |||||
string remarks = 4; // 备注 | |||||
string extra = 5; // 附加字段 | |||||
} | |||||
message DeleteGroupMemberReq { | |||||
int64 group_id = 1; // 群组id | |||||
int64 user_id = 2; // 用户id | |||||
} | |||||
message GetGroupMembersReq { | |||||
int64 group_id = 1; | |||||
} | |||||
message GetGroupMembersResp { | |||||
repeated GroupMember members = 1; | |||||
} | |||||
message GroupMember { | |||||
int64 user_id = 1; | |||||
string nickname = 2; // 昵称 | |||||
int32 sex = 3; // 性别 | |||||
string avatar_url = 4; // 头像地址 | |||||
string user_extra = 5; // 用户附加字段 | |||||
MemberType member_type = 6; // 成员类型 | |||||
string remarks = 7; // 备注 | |||||
string extra = 8; // 群组成员附加字段 | |||||
} |
@@ -1,177 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
message Empty{} | |||||
service LogicInt { | |||||
// 登录 | |||||
rpc ConnSignIn (ConnSignInReq) returns (Empty); | |||||
// 消息同步 | |||||
rpc Sync (SyncReq) returns (SyncResp); | |||||
// 设备收到消息回执 | |||||
rpc MessageACK (MessageACKReq) returns (Empty); | |||||
// 设备离线 | |||||
rpc Offline (OfflineReq) returns (Empty); | |||||
// 订阅房间 | |||||
rpc SubscribeRoom(SubscribeRoomReq)returns(Empty); | |||||
// 发送消息 | |||||
rpc SendMessage (SendMessageReq) returns (SendMessageResp); | |||||
// 推送消息到房间 | |||||
rpc PushRoom(PushRoomReq)returns(Empty); | |||||
// 全服推送 | |||||
rpc PushAll(PushAllReq)returns(Empty); | |||||
// 获取设备信息 | |||||
rpc GetDevice (GetDeviceReq) returns (GetDeviceResp); | |||||
// 服务停止 | |||||
rpc ServerStop (ServerStopReq) returns (Empty); | |||||
} | |||||
message PushRoomReq{ | |||||
int64 room_id = 1; // 房间id | |||||
MessageType message_type = 2; // 消息类型 | |||||
bytes message_content = 3; // 消息内容 | |||||
int64 send_time = 4; // 消息发送时间戳,精确到毫秒 | |||||
bool is_persist = 5; // 是否将消息持久化 | |||||
bool is_priority = 6; // 是否优先推送 | |||||
} | |||||
message SendMessageResp { | |||||
int64 seq = 1; // 消息序列号 | |||||
} | |||||
message SendMessageReq { | |||||
ReceiverType receiver_type = 1; // 接收者类型,1:user;2:group | |||||
int64 receiver_id = 2; // 用户id或者群组id | |||||
repeated int64 to_user_ids = 3; // 需要@的用户id列表 | |||||
MessageType message_type = 4; // 消息类型 | |||||
bytes message_content = 5; // 消息内容 | |||||
int64 send_time = 6; // 消息发送时间戳,精确到毫秒 | |||||
bool is_persist = 7; // 是否将消息持久化到数据库 | |||||
} | |||||
enum ReceiverType { | |||||
RT_UNKNOWN = 0; // 未知 | |||||
RT_USER = 1; // 用户 | |||||
RT_GROUP = 2; // 群组 | |||||
RT_ROOM = 3; // 房间 | |||||
} | |||||
// 消息类型 | |||||
enum MessageType { | |||||
MT_UNKNOWN = 0; // 未知 | |||||
MT_TEXT = 1; // 文本 | |||||
MT_FACE = 2; // 表情 | |||||
MT_VOICE = 3; // 语音消息 | |||||
MT_IMAGE = 4; // 图片 | |||||
MT_FILE = 5; // 文件 | |||||
MT_LOCATION = 6; // 地理位置 | |||||
MT_COMMAND = 7; // 指令推送 | |||||
MT_CUSTOM = 8; // 自定义 | |||||
} | |||||
enum SenderType { | |||||
ST_UNKNOWN = 0; // 未知的 | |||||
ST_SYSTEM = 1; // IM系统 | |||||
ST_USER = 2; // 用户 | |||||
ST_BUSINESS = 3; // 业务方 | |||||
} | |||||
message Sender { | |||||
SenderType sender_type = 1; // 发送者类型,1:系统,2:用户,3:第三方业务系统 | |||||
int64 sender_id = 2; // 发送者id | |||||
int64 device_id = 3; // 发送者设备id | |||||
string avatar_url = 4; // 昵称 | |||||
string nickname = 5; // 头像 | |||||
string extra = 6; // 扩展字段 | |||||
} | |||||
// 单条消息投递内容(估算大约100个字节),todo 通知栏提醒 | |||||
message Message { | |||||
Sender sender = 1; // 发送者 | |||||
ReceiverType receiver_type = 2; // 接收者类型,1:user;2:group | |||||
int64 receiver_id = 3; // 用户id或者群组id | |||||
repeated int64 to_user_ids = 4; // 需要@的用户id列表 | |||||
MessageType message_type = 5; // 消息类型 | |||||
bytes message_content = 6; // 消息内容 | |||||
int64 seq = 7; // 用户消息发送序列号 | |||||
int64 send_time = 8; // 消息发送时间戳,精确到毫秒 | |||||
MessageStatus status = 9; // 消息状态 | |||||
} | |||||
enum MessageStatus { | |||||
MS_UNKNOWN = 0; // 未知的 | |||||
MS_NORMAL = 1; // 正常的 | |||||
MS_RECALL = 2; // 撤回 | |||||
} | |||||
message ConnSignInReq { | |||||
int64 device_id = 1; // 设备id | |||||
int64 user_id = 2; // 用户id | |||||
string token = 3; // 秘钥 | |||||
string conn_addr = 4; // 服务器地址 | |||||
string client_addr = 5; // 客户端地址 | |||||
} | |||||
message SyncReq { | |||||
int64 user_id = 1; // 用户id | |||||
int64 device_id = 2; // 设备id | |||||
int64 seq = 3; // 客户端已经同步的序列号 | |||||
} | |||||
message SyncResp { | |||||
repeated Message messages = 1; // 消息列表 | |||||
bool has_more = 2; // 是否有更多数据 | |||||
} | |||||
message MessageACKReq { | |||||
int64 user_id = 1; // 用户id | |||||
int64 device_id = 2; // 设备id | |||||
int64 device_ack = 3; // 设备收到消息的确认号 | |||||
int64 receive_time = 4; // 消息接收时间戳,精确到毫秒 | |||||
} | |||||
message OfflineReq { | |||||
int64 user_id = 1; // 用户id | |||||
int64 device_id = 2; // 设备id | |||||
string client_addr = 3; // 客户端地址 | |||||
} | |||||
message SubscribeRoomReq{ | |||||
int64 user_id = 1; // 用户id | |||||
int64 device_id = 2; // 设备id | |||||
int64 room_id = 3; // 房间id | |||||
int64 seq = 4; // 消息序列号 | |||||
string conn_addr = 5; // 服务器地址 | |||||
} | |||||
message PushAllReq{ | |||||
MessageType message_type = 1; // 消息类型 | |||||
bytes message_content = 2; // 消息内容 | |||||
int64 send_time = 3; // 消息发送时间戳,精确到毫秒 | |||||
} | |||||
message GetDeviceReq { | |||||
int64 device_id = 1; | |||||
} | |||||
message GetDeviceResp { | |||||
Device device = 1; | |||||
} | |||||
message Device { | |||||
int64 device_id = 1; // 设备id | |||||
int64 user_id = 2; // 用户id | |||||
int32 type = 3; // 设备类型,1:Android;2:IOS;3:Windows; 4:MacOS;5:Web | |||||
string brand = 4; // 手机厂商 | |||||
string model = 5; // 机型 | |||||
string system_version = 6; // 系统版本 | |||||
string sdk_version = 7; // SDK版本 | |||||
int32 status = 8; // 在线状态,0:不在线;1:在线 | |||||
string conn_addr = 9; // 服务端连接地址 | |||||
string client_addr = 10; // 客户端地址 | |||||
int64 create_time = 11; // 创建时间 | |||||
int64 update_time = 12; // 更新时间 | |||||
} | |||||
message ServerStopReq { | |||||
string conn_addr = 1; | |||||
} |
@@ -1,71 +0,0 @@ | |||||
syntax = "proto3"; | |||||
package pb; | |||||
option go_package = "gim/pkg/pb/"; | |||||
enum PushCode { | |||||
PC_ADD_DEFAULT = 0; | |||||
PC_ADD_FRIEND = 100; // 添加好友请求 | |||||
PC_AGREE_ADD_FRIEND = 101; // 同意添加好友 | |||||
PC_UPDATE_GROUP = 110; // 更新群组 | |||||
PC_ADD_GROUP_MEMBERS = 120; // 添加群组成员 | |||||
PC_REMOVE_GROUP_MEMBER = 121; // 移除群组成员 | |||||
} | |||||
// 推送码 PC_ADD_FRIEND = 100 | |||||
message AddFriendPush { | |||||
int64 friend_id = 1; // 好友id | |||||
string nickname = 2; // 昵称 | |||||
string avatar_url = 3; // 头像 | |||||
string description = 4; // 描述 | |||||
} | |||||
// 推送码 PC_AGREE_ADD_FRIEND = 101 | |||||
message AgreeAddFriendPush { | |||||
int64 friend_id = 1; // 好友id | |||||
string nickname = 2; // 昵称 | |||||
string avatar_url = 3; // 头像 | |||||
} | |||||
// 更新群组 PC_UPDATE_GROUP = 110 | |||||
message UpdateGroupPush { | |||||
int64 opt_id = 1; // 操作人用户id | |||||
string opt_name = 2; // 操作人昵称 | |||||
string name = 3; // 群组名称 | |||||
string avatar_url = 4; // 群组头像 | |||||
string introduction = 5; // 群组简介 | |||||
string extra = 6; // 附加字段 | |||||
} | |||||
// 添加群组成员 PC_AGREE_ADD_GROUPS = 120 | |||||
message AddGroupMembersPush { | |||||
int64 opt_id = 1; // 操作人用户id | |||||
string opt_name = 2; // 操作人昵称 | |||||
repeated GroupMember members = 3; // 群组成员 | |||||
} | |||||
// 删除群组成员 PC_REMOVE_GROUP_MEMBER = 121 | |||||
message RemoveGroupMemberPush { | |||||
int64 opt_id = 1; // 操作人用户id | |||||
string opt_name = 2; // 操作人昵称 | |||||
int64 deleted_user_id = 3; // 被删除的成员id | |||||
} | |||||
enum MemberType { | |||||
GMT_UNKNOWN = 0; // 未知 | |||||
GMT_ADMIN = 1; // 管理员 | |||||
GMT_MEMBER = 2; // 成员 | |||||
} | |||||
message GroupMember { | |||||
int64 user_id = 1; | |||||
string nickname = 2; // 昵称 | |||||
int32 sex = 3; // 性别 | |||||
string avatar_url = 4; // 头像地址 | |||||
string user_extra = 5; // 用户附加字段 | |||||
MemberType member_type = 6; // 成员类型 | |||||
string remarks = 7; // 备注 | |||||
string extra = 8; // 群组成员附加字段 | |||||
} |
@@ -87,7 +87,7 @@ func (c *TcpClient) SignIn() { | |||||
signIn := pb.SignInInput{ | signIn := pb.SignInInput{ | ||||
UserId: c.UserId, | UserId: c.UserId, | ||||
DeviceId: c.DeviceId, | DeviceId: c.DeviceId, | ||||
Token: "LGTMCTLHAUBHNPBHSYWRIUDPGMXHUEFNAKLYZMTD", | |||||
Token: "RRTTGFUKCAQGAIDXMITFIBPMZOVSYDQQUQRZNMYG", | |||||
} | } | ||||
c.Output(pb.PackageType_PT_SIGN_IN, time.Now().UnixNano(), &signIn) | c.Output(pb.PackageType_PT_SIGN_IN, time.Now().UnixNano(), &signIn) | ||||
} | } | ||||