syntax = "proto3";

package serverrpc;

option go_package = "./improto";

// 服务器rpc，服务器用
service serverrpc {
  // 消息推送通知
  rpc MsgPushNotice (MsgPushNoticeReq) returns (SerRPCResponse);
  // 发送群通话数据
  rpc SendGroupVoiceData (SendGroupVoiceDataReq) returns (SerRPCResponse);
  // 通知清理指定群推送缓存
  rpc NoticeCleanGroupCache (NoticeCleanGroupCacheReq) returns (SerRPCResponse);
  // 消息推送通知
  rpc UserOnlinePush (UserOnlinePushReq) returns (SerRPCResponse);
  // 用户下线通知
  rpc UserOffline (UserOfflineReq) returns (SerRPCResponse);
  // 用户上线通知
  rpc UserOnline (UserOnlineReq) returns (SerRPCResponse);
  // 设置区域限制
  rpc SetLimitArea (SetLimitAreaReq) returns (SerRPCResponse);
  // 获取区域限制
  rpc GetLimitArea (GetLimitAreaReq) returns (SerRPCResponse);
  // 删除区域限制
  rpc DelLimitArea (DelLimitAreaReq) returns (SerRPCResponse);
}

// 通用返回结构
message SerRPCResponse {
  int32 Code          = 1;
  string Message      = 2;
  bytes Body         = 3;
  int64 Timestamp     = 4;
}
// 消息推送通知消息信息
message NoticeMsgInfo {
  int32 msg_type = 1; // 消息类型
  string msg_key = 2; // 数据key值,如果是群聊，这个Key是群ID
}

enum PushRoleType{
  Null = 0;
  PushUser = 1; //用户
  PushGroup = 2; //群
}
// 消息推送通知消息数据
message NoticeData {
  string Addr = 1; // 用户地址 ，
  string Gid = 2; // 是群ID
  repeated NoticeMsgInfo Msgs = 3;
  PushRoleType  RoleType = 4;  //角色类型
}
// 消息推送通知消息请求
message MsgPushNoticeReq {
  repeated NoticeData notices = 1; // 推送提醒列表
}

message SendGroupVoiceDataReq {
  string gid = 1;           //群ID
  bytes Body         = 2;   //发送数据
}

message NoticeCleanGroupCacheReq {
  string gid = 1;           //群ID
  string addr         = 2;   //指定用户
  repeated string mid         = 3;   //matchicheID
}

// 消息推送通知消息请求
message UserOnlinePushReq {
  string Addr = 1; // 用户地址
  string Mid = 2; // 设备ID
}

// 用户下线请求
message UserOfflineReq {
  string Addr = 1; // 用户地址
  string Mid = 2; // 设备ID
  int64 ConnVer = 3; //连接版本号
}

// 用户上线请求
message UserOnlineReq {
  string Addr = 1; // 用户地址
  string Mid = 2; // 设备ID
  int64 ConnVer = 3; //连接版本号
  string Proxy = 4; //代理
  string Ip = 5; //用户ip
}

// 设置限制区域请求
message SetLimitAreaReq {
  repeated string Area = 1; // 限制区域
}

// 设置限制区域请求
message GetLimitAreaReq {
  int64 ver = 1; // 版本号
}

// 设置限制区域请求
message GetLimitAreaRes {
  repeated string Area = 1; // 限制区域
}

// 删除限制区域请求
message DelLimitAreaReq {
  repeated string Area = 1; // 限制区域
}