This commit is contained in:
zhaocy 2022-06-16 15:13:08 +08:00
commit db0df37526
60 changed files with 1336 additions and 789 deletions

View File

@ -152,7 +152,7 @@ func (r *Robot) AccountRegister(account string) {
//打印响应
func printReply(msg *pb.UserMessage, rsp interface{}) {
log.Printf("rsp [%s.%s] [%d] [%v]", msg.MainType, msg.SubType, msg.Code, rsp)
log.Printf("rsp [%s.%s] [%v]", msg.MainType, msg.SubType, rsp)
}
//方法参数跟踪

View File

@ -73,6 +73,12 @@ const (
LogHandleType_Delete LogHandleType = "delete"
)
//Api Check 错误返回结构
type ErrorCode struct {
Code pb.ErrorCode
Data interface{}
}
//用户会话
type IUserSession interface {
GetSessionId() string
@ -82,7 +88,7 @@ type IUserSession interface {
IsLogin() bool
Bind(uid string, wokerId string) (err error)
UnBind() (err error)
SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error)
SendMsg(mainType, subType string, msg proto.Message) (err error)
Close() (err error)
ToString() string
}

View File

@ -86,15 +86,14 @@ func (this *UserSession) UnBind() (err error) {
}
//向用户发送消息
func (this *UserSession) SendMsg(mainType, subType string, code pb.ErrorCode, msg proto.Message) (err error) {
func (this *UserSession) SendMsg(mainType, subType string, msg proto.Message) (err error) {
reply := &pb.RPCMessageReply{}
data, _ := ptypes.MarshalAny(msg)
log.Debugf("SendMsg to SessionId:[%s] UserId:[%s] Code:%d Data: %v", this.UserId, code, msg)
log.Debugf("SendMsg to SessionId:[%s] UserId:[%s] Data: %v", this.UserId, msg)
if err := this.service.RpcCall(context.Background(), fmt.Sprintf("%s/%s", Service_Gateway, this.GatewayServiceId), string(Rpc_GatewayAgentSendMsg), &pb.AgentSendMessageReq{
UserSessionId: this.SessionId,
MainType: mainType,
SubType: subType,
Code: code,
Data: data,
}, reply); err != nil {
log.Errorf("SendMsg:%s UserSession:%s UserId:%s err:%v", mainType, this.SessionId, this.UserId, err)

View File

@ -13,7 +13,7 @@ import (
"strings"
"time"
"go_dreamfactory/lego/utils/convert"
"go_dreamfactory/lego/utils/codec"
)
var (
@ -236,9 +236,9 @@ func setWithProperType(val string, value reflect.Value, field reflect.StructFiel
case time.Time:
return setTimeField(val, field, value)
}
return json.Unmarshal(convert.StringToBytes(val), value.Addr().Interface())
return json.Unmarshal(codec.StringToBytes(val), value.Addr().Interface())
case reflect.Map:
return json.Unmarshal(convert.StringToBytes(val), value.Addr().Interface())
return json.Unmarshal(codec.StringToBytes(val), value.Addr().Interface())
default:
return errUnknownType
}

View File

@ -9,7 +9,7 @@ import (
"sync"
"go_dreamfactory/lego/sys/gin/render"
"go_dreamfactory/lego/utils/convert"
"go_dreamfactory/lego/utils/codec"
"golang.org/x/net/http2"
"golang.org/x/net/http2/h2c"
@ -418,7 +418,7 @@ func (this *Engine) redirectFixedPath(c *Context, root *node, trailingSlash bool
rPath := req.URL.Path
if fixedPath, ok := root.findCaseInsensitivePath(cleanPath(rPath), trailingSlash); ok {
req.URL.Path = convert.BytesToString(fixedPath)
req.URL.Path = codec.BytesToString(fixedPath)
this.redirectRequest(c)
return true
}

View File

@ -7,7 +7,7 @@ import (
"unicode"
"unicode/utf8"
"go_dreamfactory/lego/utils/convert"
"go_dreamfactory/lego/utils/codec"
)
var (
@ -107,7 +107,7 @@ walk:
n.children = []*node{&child}
// []byte for proper unicode char conversion, see #65
n.indices = convert.BytesToString([]byte{n.path[i]})
n.indices = codec.BytesToString([]byte{n.path[i]})
n.path = path[:i]
n.handlers = nil
n.wildChild = false
@ -140,7 +140,7 @@ walk:
// Otherwise insert it
if c != ':' && c != '*' && n.nType != catchAll {
// []byte for proper unicode char conversion, see #65
n.indices += convert.BytesToString([]byte{c})
n.indices += codec.BytesToString([]byte{c})
child := &node{
fullPath: fullPath,
}
@ -820,14 +820,14 @@ func findWildcard(path string) (wildcard string, i int, valid bool) {
func countParams(path string) uint16 {
var n uint16
s := convert.StringToBytes(path)
s := codec.StringToBytes(path)
n += uint16(bytes.Count(s, strColon))
n += uint16(bytes.Count(s, strStar))
return n
}
func countSections(path string) uint16 {
s := convert.StringToBytes(path)
s := codec.StringToBytes(path)
return uint16(bytes.Count(s, strSlash))
}
func min(a, b int) int {

View File

@ -7,7 +7,7 @@ import (
"html/template"
"net/http"
"go_dreamfactory/lego/utils/convert"
"go_dreamfactory/lego/utils/codec"
)
// JSON contains the given interface object.
@ -96,9 +96,9 @@ func (r SecureJSON) Render(w http.ResponseWriter) error {
return err
}
// if the jsonBytes is array values
if bytes.HasPrefix(jsonBytes, convert.StringToBytes("[")) && bytes.HasSuffix(jsonBytes,
convert.StringToBytes("]")) {
if _, err = w.Write(convert.StringToBytes(r.Prefix)); err != nil {
if bytes.HasPrefix(jsonBytes, codec.StringToBytes("[")) && bytes.HasSuffix(jsonBytes,
codec.StringToBytes("]")) {
if _, err = w.Write(codec.StringToBytes(r.Prefix)); err != nil {
return err
}
}
@ -125,11 +125,11 @@ func (r JsonpJSON) Render(w http.ResponseWriter) (err error) {
}
callback := template.JSEscapeString(r.Callback)
if _, err = w.Write(convert.StringToBytes(callback)); err != nil {
if _, err = w.Write(codec.StringToBytes(callback)); err != nil {
return err
}
if _, err = w.Write(convert.StringToBytes("(")); err != nil {
if _, err = w.Write(codec.StringToBytes("(")); err != nil {
return err
}
@ -137,7 +137,7 @@ func (r JsonpJSON) Render(w http.ResponseWriter) (err error) {
return err
}
if _, err = w.Write(convert.StringToBytes(");")); err != nil {
if _, err = w.Write(codec.StringToBytes(");")); err != nil {
return err
}
@ -158,7 +158,7 @@ func (r AsciiJSON) Render(w http.ResponseWriter) (err error) {
}
var buffer bytes.Buffer
for _, r := range convert.BytesToString(ret) {
for _, r := range codec.BytesToString(ret) {
cvt := string(r)
if r >= 128 {
cvt = fmt.Sprintf("\\u%04x", int64(r))

View File

@ -4,7 +4,7 @@ import (
"fmt"
"net/http"
"go_dreamfactory/lego/utils/convert"
"go_dreamfactory/lego/utils/codec"
)
// String contains the given interface object slice and its format.
@ -32,6 +32,6 @@ func WriteString(w http.ResponseWriter, format string, data []interface{}) (err
_, err = fmt.Fprintf(w, format, data...)
return
}
_, err = w.Write(convert.StringToBytes(format))
_, err = w.Write(codec.StringToBytes(format))
return
}

View File

@ -2,14 +2,15 @@ package cluster
import (
"context"
"go_dreamfactory/lego/utils/codec"
"time"
"github.com/go-redis/redis/v8"
)
func NewSys(RedisUrl []string, RedisPassword string, timeOut time.Duration,
encode func(value interface{}) (result []byte, err error),
decode func(value []byte, result interface{}) (err error),
encode codec.IEncoder,
decode codec.IDecoder,
) (sys *Redis, err error) {
var (
client *redis.ClusterClient
@ -21,8 +22,8 @@ func NewSys(RedisUrl []string, RedisPassword string, timeOut time.Duration,
sys = &Redis{
client: client,
timeOut: timeOut,
Encode: encode,
Decode: decode,
encode: encode,
decode: decode,
}
_, err = sys.Ping()
return
@ -31,8 +32,8 @@ func NewSys(RedisUrl []string, RedisPassword string, timeOut time.Duration,
type Redis struct {
client *redis.ClusterClient
timeOut time.Duration
Encode func(value interface{}) (result []byte, err error)
Decode func(value []byte, result interface{}) (err error)
encode codec.IEncoder
decode codec.IDecoder
}
func (this *Redis) getContext() (ctx context.Context) {

View File

@ -28,13 +28,34 @@ func (this *Redis) HExists(key string, field string) (result bool, err error) {
return
}
/*
Redis Hmset 命令用于同时将多个 field-value (字段-)对设置到哈希表中
此命令会覆盖哈希表中已存在的字段
如果哈希表不存在会创建一个空哈希表并执行 HMSET 操作
*/
func (this *Redis) HMSet(key string, v interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "HMSET")
agrs = append(agrs, key)
var data map[string][]byte
if data, err = this.encode.EncoderToMap(v); err != nil {
return
}
for k, v := range data {
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
return
}
/*
Redis Hget 命令用于返回哈希表中指定字段的值
*/
func (this *Redis) HGet(key string, field string, value interface{}) (err error) {
var resultvalue string
if resultvalue = this.client.Do(this.getContext(), "HSET", key, field).String(); resultvalue != string(redis.Nil) {
err = this.Decode([]byte(resultvalue), value)
err = this.decode.Decoder([]byte(resultvalue), value)
}
return
}
@ -43,18 +64,12 @@ func (this *Redis) HGet(key string, field string, value interface{}) (err error)
Redis Hgetall 命令用于返回哈希表中所有的字段和值
在返回值里紧跟每个字段名(field name)之后是字段的值(value)所以返回值的长度是哈希表大小的两倍
*/
func (this *Redis) HGetAll(key string, valuetype reflect.Type) (result []interface{}, err error) {
cmd := redis.NewStringSliceCmd(this.getContext(), "HGETALL", key)
func (this *Redis) HGetAll(key string, v interface{}) (err error) {
cmd := redis.NewStringStringMapCmd(this.getContext(), "HGETALL", key)
this.client.Process(this.getContext(), cmd)
var _result []string
var _result map[string]string
if _result, err = cmd.Result(); err == nil {
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
result[i] = temp
}
}
err = this.decode.DecoderMap(_result, v)
}
return
}
@ -117,7 +132,7 @@ func (this *Redis) HMGet(key string, valuetype reflect.Type, fields ...string) (
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -125,23 +140,6 @@ func (this *Redis) HMGet(key string, valuetype reflect.Type, fields ...string) (
return
}
/*
Redis Hmset 命令用于同时将多个 field-value (字段-)对设置到哈希表中
此命令会覆盖哈希表中已存在的字段
如果哈希表不存在会创建一个空哈希表并执行 HMSET 操作
*/
func (this *Redis) HMSet(key string, value map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "HMSET")
agrs = append(agrs, key)
for k, v := range value {
result, _ := this.Encode(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
return
}
/*
Redis Hset 命令用于为哈希表中的字段赋值
如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作
@ -149,7 +147,7 @@ Redis Hset 命令用于为哈希表中的字段赋值
*/
func (this *Redis) HSet(key string, field string, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "HSET", key, field, resultvalue).Err()
}
return
@ -163,7 +161,7 @@ Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值
*/
func (this *Redis) HSetNX(key string, field string, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "HSETNX", key, field, resultvalue).Err()
}
return

View File

@ -13,7 +13,7 @@ Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使
func (this *Redis) Lindex(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "LINDEX", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -30,8 +30,8 @@ func (this *Redis) Linsert(key string, isbefore bool, tager interface{}, value i
tagervalue []byte
resultvalue []byte
)
if tagervalue, err = this.Encode(tager); err == nil {
if resultvalue, err = this.Encode(value); err == nil {
if tagervalue, err = this.encode.Encoder(tager); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
if isbefore {
err = this.client.Do(this.getContext(), "LINSERT", key, "BEFORE", tagervalue, resultvalue).Err()
} else {
@ -56,7 +56,7 @@ Redis Lpop 命令用于移除并返回列表的第一个元素
func (this *Redis) LPop(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "LPOP", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -70,7 +70,7 @@ func (this *Redis) LPush(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "LPUSH")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -84,7 +84,7 @@ func (this *Redis) LPushX(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "LPUSHX")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -103,7 +103,7 @@ func (this *Redis) LRange(key string, start, end int, valuetype reflect.Type) (r
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -120,7 +120,7 @@ count = 0 : 移除表中所有与 VALUE 相等的值
*/
func (this *Redis) LRem(key string, count int, target interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(target); err == nil {
if resultvalue, err = this.encode.Encoder(target); err == nil {
err = this.client.Do(this.getContext(), "LREM", key, count, resultvalue).Err()
}
return
@ -132,7 +132,7 @@ Redis Lset 通过索引来设置元素的值。
*/
func (this *Redis) LSet(key string, index int, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "LSET", key, index, resultvalue).Err()
}
return
@ -154,7 +154,7 @@ Redis Rpop 命令用于移除列表的最后一个元素,返回值为移除的
func (this *Redis) Rpop(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "RPOP", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -167,7 +167,7 @@ Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素
func (this *Redis) RPopLPush(oldkey string, newkey string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "RPOPLPUSH", oldkey, newkey).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -183,7 +183,7 @@ func (this *Redis) RPush(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "RPUSH")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -197,7 +197,7 @@ func (this *Redis) RPushX(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "RPUSHX")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()

View File

@ -12,7 +12,7 @@ func (this *Redis) SAdd(key string, values ...interface{}) (err error) {
agrs = append(agrs, "SADD")
agrs = append(agrs, key)
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -39,7 +39,7 @@ func (this *Redis) SDiff(valuetype reflect.Type, keys ...string) (result []inter
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -65,7 +65,7 @@ func (this *Redis) SInter(valuetype reflect.Type, keys ...string) (result []inte
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -99,7 +99,7 @@ func (this *Redis) SMembers(valuetype reflect.Type, key string) (result []interf
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -160,7 +160,7 @@ func (this *Redis) SUnion(valuetype reflect.Type, keys ...string) (result []inte
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}

View File

@ -13,7 +13,7 @@ import (
*/
func (this *Redis) Set(key string, value interface{}, expiration time.Duration) (err error) {
var result []byte
if result, err = this.Encode(value); err == nil {
if result, err = this.encode.Encoder(value); err == nil {
err = this.client.Set(this.getContext(), string(key), result, expiration).Err()
}
return
@ -40,7 +40,7 @@ func (this *Redis) MSet(keyvalues map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "MSET")
for k, v := range keyvalues {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -54,7 +54,7 @@ func (this *Redis) MSetNX(keyvalues map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "MSETNX")
for k, v := range keyvalues {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -121,7 +121,7 @@ Redis Append 命令用于为指定的 key 追加值。
*/
func (this *Redis) Append(key string, value interface{}) (err error) {
var result []byte
if result, err = this.Encode(value); err == nil {
if result, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "APPEND", key, result).Err()
}
return
@ -133,7 +133,7 @@ func (this *Redis) Append(key string, value interface{}) (err error) {
func (this *Redis) Get(key string, value interface{}) (err error) {
var result []byte
if result, err = this.client.Get(this.getContext(), key).Bytes(); err == nil {
err = this.Decode(result, value)
err = this.decode.Decoder(result, value)
}
return
}
@ -146,9 +146,9 @@ func (this *Redis) GetSet(key string, value interface{}, result interface{}) (er
data string
_value []byte
)
if _value, err = this.Encode(value); err == nil {
if _value, err = this.encode.Encoder(value); err == nil {
if data = this.client.Do(this.getContext(), "GETSET", key, _value).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), result)
err = this.decode.Decoder([]byte(data), result)
} else {
err = fmt.Errorf(string(redis.Nil))
}

View File

@ -64,7 +64,7 @@ func (this *Redis) ZRange(valuetype reflect.Type, key string, start int64, stop
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -82,7 +82,7 @@ func (this *Redis) ZRangeByLex(valuetype reflect.Type, key string, opt *redis.ZR
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -100,7 +100,7 @@ func (this *Redis) ZRangeByScore(valuetype reflect.Type, key string, opt *redis.
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -158,7 +158,7 @@ func (this *Redis) ZRevRange(valuetype reflect.Type, key string, start int64, st
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -176,7 +176,7 @@ func (this *Redis) ZRevRangeByScore(valuetype reflect.Type, key string, opt *red
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}

View File

@ -65,13 +65,13 @@ type (
HDel(key string, fields ...string) (err error)
HExists(key string, field string) (result bool, err error)
HGet(key string, field string, value interface{}) (err error)
HGetAll(key string, valuetype reflect.Type) (result []interface{}, err error)
HGetAll(key string, v interface{}) (err error)
HIncrBy(key string, field string, value int) (err error)
HIncrByFloat(key string, field string, value float32) (err error)
Hkeys(key string) (result []string, err error)
Hlen(key string) (result int, err error)
HMGet(key string, valuetype reflect.Type, fields ...string) (result []interface{}, err error)
HMSet(key string, value map[string]interface{}) (err error)
HMSet(key string, v interface{}) (err error)
HSet(key string, field string, value interface{}) (err error)
HSetNX(key string, field string, value interface{}) (err error)
/*Set*/
@ -115,8 +115,6 @@ type (
ISys interface {
IRedis
Encode(value interface{}) (result []byte, err error)
Decode(value []byte, result interface{}) (err error)
/*Lock*/
NewRedisMutex(key string, opt ...RMutexOption) (result *RedisMutex, err error)
}
@ -155,19 +153,11 @@ func TxPipelined(ctx context.Context, fn func(pipe redis.Pipeliner) error) (err
func Watch(ctx context.Context, fn func(*redis.Tx) error, keys ...string) (err error) {
return defsys.Watch(ctx, fn)
}
func Encode(value interface{}) (result []byte, err error) {
return defsys.Encode(value)
}
func Decode(value []byte, result interface{}) (err error) {
return defsys.Decode(value, result)
}
func Delete(key string) (err error) {
return defsys.Delete(key)
}
func ExistsKey(key string) (iskeep bool, err error) {
return defsys.ExistsKey(key)
}
func ExpireKey(key string, expire int) (err error) {
return defsys.ExpireKey(key, expire)
@ -315,8 +305,8 @@ func HExists(key string, field string) (result bool, err error) {
func HGet(key string, field string, value interface{}) (err error) {
return defsys.HGet(key, field, value)
}
func HGetAll(key string, valuetype reflect.Type) (result []interface{}, err error) {
return defsys.HGetAll(key, valuetype)
func HGetAll(key string, v interface{}) (err error) {
return defsys.HGetAll(key, v)
}
func HIncrBy(key string, field string, value int) (err error) {
return defsys.HIncrBy(key, field, value)
@ -333,8 +323,8 @@ func Hlen(key string) (result int, err error) {
func HMGet(key string, valuetype reflect.Type, fields ...string) (result []interface{}, err error) {
return defsys.HMGet(key, valuetype, fields...)
}
func HMSet(key string, value map[string]interface{}) (err error) {
return defsys.HMSet(key, value)
func HMSet(key string, v interface{}) (err error) {
return defsys.HMSet(key, v)
}
func HSet(key string, field string, value interface{}) (err error) {
return defsys.HSet(key, field, value)

View File

@ -10,6 +10,7 @@ import (
"go_dreamfactory/lego/sys/redis/cluster"
"go_dreamfactory/lego/sys/redis/single"
"go_dreamfactory/lego/utils/codec"
"github.com/go-redis/redis/v8"
"google.golang.org/protobuf/proto"
@ -17,6 +18,13 @@ import (
func newSys(options Options) (sys *Redis, err error) {
sys = &Redis{options: options}
if options.RedisStorageType == JsonData {
sys.decoder = &codec.Decoder{DefDecoder: jsoniter.Unmarshal}
sys.encoder = &codec.Encoder{DefEncoder: jsoniter.Marshal}
} else {
sys.decoder = &codec.Decoder{DefDecoder: func(buf []byte, v interface{}) error { return proto.Unmarshal(buf, v.(proto.Message)) }}
sys.encoder = &codec.Encoder{DefEncoder: func(v interface{}) (data []byte, err error) { return proto.Marshal(v.(proto.Message)) }}
}
err = sys.init()
return
}
@ -24,6 +32,8 @@ func newSys(options Options) (sys *Redis, err error) {
type Redis struct {
options Options
client IRedis
decoder codec.IDecoder
encoder codec.IEncoder
}
func (this *Redis) init() (err error) {
@ -34,16 +44,16 @@ func (this *Redis) init() (err error) {
this.options.Redis_Single_DB,
this.options.Redis_Single_PoolSize,
this.options.TimeOut,
this.Encode,
this.Decode,
this.encoder,
this.decoder,
)
} else if this.options.RedisType == Redis_Cluster {
this.client, err = cluster.NewSys(
this.options.Redis_Cluster_Addr,
this.options.Redis_Cluster_Password,
this.options.TimeOut,
this.Encode,
this.Decode,
this.encoder,
this.decoder,
)
} else {
err = fmt.Errorf("init Redis err:RedisType - %d", this.options.RedisType)
@ -73,33 +83,6 @@ func (this *Redis) UnLock(key string) (err error) {
return this.client.UnLock(key)
}
///数据编码
func (this *Redis) Encode(value interface{}) (result []byte, err error) {
if this.options.RedisStorageType == JsonData {
result, err = jsoniter.Marshal(value)
} else {
if _, ok := value.(proto.Message); ok {
result, err = proto.Marshal(value.(proto.Message))
} else {
result, err = jsoniter.Marshal(value)
}
}
return
}
func (this *Redis) Decode(value []byte, result interface{}) (err error) {
if this.options.RedisStorageType == JsonData {
err = jsoniter.Unmarshal(value, result)
} else {
if _, ok := result.(proto.Message); ok {
err = proto.Unmarshal(value, result.(proto.Message))
} else {
err = jsoniter.Unmarshal(value, result)
}
}
return
}
func (this *Redis) Delete(key string) (err error) {
return this.client.Delete(key)
}
@ -242,8 +225,8 @@ func (this *Redis) HExists(key string, field string) (result bool, err error) {
func (this *Redis) HGet(key string, field string, value interface{}) (err error) {
return this.client.HGet(key, field, value)
}
func (this *Redis) HGetAll(key string, valuetype reflect.Type) (result []interface{}, err error) {
return this.client.HGetAll(key, valuetype)
func (this *Redis) HGetAll(key string, v interface{}) (err error) {
return this.client.HGetAll(key, v)
}
func (this *Redis) HIncrBy(key string, field string, value int) (err error) {
return this.client.HIncrBy(key, field, value)
@ -260,8 +243,8 @@ func (this *Redis) Hlen(key string) (result int, err error) {
func (this *Redis) HMGet(key string, valuetype reflect.Type, fields ...string) (result []interface{}, err error) {
return this.client.HMGet(key, valuetype, fields...)
}
func (this *Redis) HMSet(key string, value map[string]interface{}) (err error) {
return this.client.HMSet(key, value)
func (this *Redis) HMSet(key string, v interface{}) (err error) {
return this.client.HMSet(key, v)
}
func (this *Redis) HSet(key string, field string, value interface{}) (err error) {
return this.client.HSet(key, field, value)

View File

@ -2,14 +2,15 @@ package single
import (
"context"
"go_dreamfactory/lego/utils/codec"
"time"
"github.com/go-redis/redis/v8"
)
func NewSys(RedisUrl, RedisPassword string, RedisDB, PoolSize int, timeOut time.Duration,
encode func(value interface{}) (result []byte, err error),
decode func(value []byte, result interface{}) (err error),
encode codec.IEncoder,
decode codec.IDecoder,
) (sys *Redis, err error) {
var (
client *redis.Client
@ -23,8 +24,8 @@ func NewSys(RedisUrl, RedisPassword string, RedisDB, PoolSize int, timeOut time.
sys = &Redis{
client: client,
timeOut: timeOut,
Encode: encode,
Decode: decode,
encode: encode,
decode: decode,
}
_, err = sys.Ping()
return
@ -33,8 +34,8 @@ func NewSys(RedisUrl, RedisPassword string, RedisDB, PoolSize int, timeOut time.
type Redis struct {
client *redis.Client
timeOut time.Duration
Encode func(value interface{}) (result []byte, err error)
Decode func(value []byte, result interface{}) (err error)
encode codec.IEncoder
decode codec.IDecoder
}
func (this *Redis) getContext() (ctx context.Context) {

View File

@ -29,13 +29,23 @@ func (this *Redis) HExists(key string, field string) (result bool, err error) {
}
/*
Redis Hget 命令用于返回哈希表中指定字段的值
Redis Hmset 命令用于同时将多个 field-value (字段-)对设置到哈希表中
此命令会覆盖哈希表中已存在的字段
如果哈希表不存在会创建一个空哈希表并执行 HMSET 操作
*/
func (this *Redis) HGet(key string, field string, value interface{}) (err error) {
var resultvalue string
if resultvalue = this.client.Do(this.getContext(), "HSET", key, field).String(); resultvalue != string(redis.Nil) {
err = this.Decode([]byte(resultvalue), value)
func (this *Redis) HMSet(key string, v interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "HMSET")
agrs = append(agrs, key)
var data map[string][]byte
if data, err = this.encode.EncoderToMap(v); err != nil {
return
}
for k, v := range data {
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
return
}
@ -43,18 +53,36 @@ func (this *Redis) HGet(key string, field string, value interface{}) (err error)
Redis Hgetall 命令用于返回哈希表中所有的字段和值
在返回值里紧跟每个字段名(field name)之后是字段的值(value)所以返回值的长度是哈希表大小的两倍
*/
func (this *Redis) HGetAll(key string, valuetype reflect.Type) (result []interface{}, err error) {
cmd := redis.NewStringSliceCmd(this.getContext(), "HGETALL", key)
func (this *Redis) HGetAll(key string, v interface{}) (err error) {
cmd := redis.NewStringStringMapCmd(this.getContext(), "HGETALL", key)
this.client.Process(this.getContext(), cmd)
var _result []string
var _result map[string]string
if _result, err = cmd.Result(); err == nil {
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
result[i] = temp
}
}
err = this.decode.DecoderMap(_result, v)
}
return
}
/*
Redis Hset 命令用于为哈希表中的字段赋值
如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作
如果字段已经存在于哈希表中旧值将被覆盖
*/
func (this *Redis) HSet(key string, field string, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "HSET", key, field, resultvalue).Err()
}
return
}
/*
Redis Hget 命令用于返回哈希表中指定字段的值
*/
func (this *Redis) HGet(key string, field string, value interface{}) (err error) {
var resultvalue string
if resultvalue = this.client.Do(this.getContext(), "HSET", key, field).String(); resultvalue != string(redis.Nil) {
err = this.decode.Decoder([]byte(resultvalue), value)
}
return
}
@ -117,7 +145,7 @@ func (this *Redis) HMGet(key string, valuetype reflect.Type, fields ...string) (
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -125,36 +153,6 @@ func (this *Redis) HMGet(key string, valuetype reflect.Type, fields ...string) (
return
}
/*
Redis Hmset 命令用于同时将多个 field-value (字段-)对设置到哈希表中
此命令会覆盖哈希表中已存在的字段
如果哈希表不存在会创建一个空哈希表并执行 HMSET 操作
*/
func (this *Redis) HMSet(key string, value map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "HMSET")
agrs = append(agrs, key)
for k, v := range value {
result, _ := this.Encode(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
return
}
/*
Redis Hset 命令用于为哈希表中的字段赋值
如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作
如果字段已经存在于哈希表中旧值将被覆盖
*/
func (this *Redis) HSet(key string, field string, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
err = this.client.Do(this.getContext(), "HSET", key, field, resultvalue).Err()
}
return
}
/*
Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值
如果哈希表不存在一个新的哈希表被创建并进行 HSET 操作
@ -163,7 +161,7 @@ Redis Hsetnx 命令用于为哈希表中不存在的的字段赋值
*/
func (this *Redis) HSetNX(key string, field string, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "HSETNX", key, field, resultvalue).Err()
}
return

View File

@ -13,7 +13,7 @@ Redis Lindex 命令用于通过索引获取列表中的元素。你也可以使
func (this *Redis) Lindex(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "LINDEX", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -30,8 +30,8 @@ func (this *Redis) Linsert(key string, isbefore bool, tager interface{}, value i
tagervalue []byte
resultvalue []byte
)
if tagervalue, err = this.Encode(tager); err == nil {
if resultvalue, err = this.Encode(value); err == nil {
if tagervalue, err = this.encode.Encoder(tager); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
if isbefore {
err = this.client.Do(this.getContext(), "LINSERT", key, "BEFORE", tagervalue, resultvalue).Err()
} else {
@ -56,7 +56,7 @@ Redis Lpop 命令用于移除并返回列表的第一个元素
func (this *Redis) LPop(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "LPOP", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -70,7 +70,7 @@ func (this *Redis) LPush(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "LPUSH")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -84,7 +84,7 @@ func (this *Redis) LPushX(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "LPUSHX")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -103,7 +103,7 @@ func (this *Redis) LRange(key string, start, end int, valuetype reflect.Type) (r
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -120,7 +120,7 @@ count = 0 : 移除表中所有与 VALUE 相等的值
*/
func (this *Redis) LRem(key string, count int, target interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(target); err == nil {
if resultvalue, err = this.encode.Encoder(target); err == nil {
err = this.client.Do(this.getContext(), "LREM", key, count, resultvalue).Err()
}
return
@ -132,7 +132,7 @@ Redis Lset 通过索引来设置元素的值。
*/
func (this *Redis) LSet(key string, index int, value interface{}) (err error) {
var resultvalue []byte
if resultvalue, err = this.Encode(value); err == nil {
if resultvalue, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "LSET", key, index, resultvalue).Err()
}
return
@ -154,7 +154,7 @@ Redis Rpop 命令用于移除列表的最后一个元素,返回值为移除的
func (this *Redis) Rpop(key string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "RPOP", key).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -167,7 +167,7 @@ Redis Rpoplpush 命令用于移除列表的最后一个元素,并将该元素
func (this *Redis) RPopLPush(oldkey string, newkey string, value interface{}) (err error) {
var data string
if data = this.client.Do(this.getContext(), "RPOPLPUSH", oldkey, newkey).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), value)
err = this.decode.Decoder([]byte(data), value)
} else {
err = fmt.Errorf(string(redis.Nil))
}
@ -183,7 +183,7 @@ func (this *Redis) RPush(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "RPUSH")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -197,7 +197,7 @@ func (this *Redis) RPushX(key string, values ...interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "RPUSHX")
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()

View File

@ -12,7 +12,7 @@ func (this *Redis) SAdd(key string, values ...interface{}) (err error) {
agrs = append(agrs, "SADD")
agrs = append(agrs, key)
for _, v := range values {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -39,7 +39,7 @@ func (this *Redis) SDiff(valuetype reflect.Type, keys ...string) (result []inter
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -65,7 +65,7 @@ func (this *Redis) SInter(valuetype reflect.Type, keys ...string) (result []inte
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -99,7 +99,7 @@ func (this *Redis) SMembers(valuetype reflect.Type, key string) (result []interf
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -160,7 +160,7 @@ func (this *Redis) SUnion(valuetype reflect.Type, keys ...string) (result []inte
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}

View File

@ -13,7 +13,7 @@ import (
*/
func (this *Redis) Set(key string, value interface{}, expiration time.Duration) (err error) {
var result []byte
if result, err = this.Encode(value); err == nil {
if result, err = this.encode.Encoder(value); err == nil {
err = this.client.Set(this.getContext(), string(key), result, expiration).Err()
}
return
@ -40,7 +40,7 @@ func (this *Redis) MSet(keyvalues map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "MSET")
for k, v := range keyvalues {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -54,7 +54,7 @@ func (this *Redis) MSetNX(keyvalues map[string]interface{}) (err error) {
agrs := make([]interface{}, 0)
agrs = append(agrs, "MSETNX")
for k, v := range keyvalues {
result, _ := this.Encode(v)
result, _ := this.encode.Encoder(v)
agrs = append(agrs, k, result)
}
err = this.client.Do(this.getContext(), agrs...).Err()
@ -121,7 +121,7 @@ Redis Append 命令用于为指定的 key 追加值。
*/
func (this *Redis) Append(key string, value interface{}) (err error) {
var result []byte
if result, err = this.Encode(value); err == nil {
if result, err = this.encode.Encoder(value); err == nil {
err = this.client.Do(this.getContext(), "APPEND", key, result).Err()
}
return
@ -133,7 +133,7 @@ func (this *Redis) Append(key string, value interface{}) (err error) {
func (this *Redis) Get(key string, value interface{}) (err error) {
var result []byte
if result, err = this.client.Get(this.getContext(), key).Bytes(); err == nil {
err = this.Decode(result, value)
err = this.decode.Decoder(result, value)
}
return
}
@ -146,9 +146,9 @@ func (this *Redis) GetSet(key string, value interface{}, result interface{}) (er
data string
_value []byte
)
if _value, err = this.Encode(value); err == nil {
if _value, err = this.encode.Encoder(value); err == nil {
if data = this.client.Do(this.getContext(), "GETSET", key, _value).String(); data != string(redis.Nil) {
err = this.Decode([]byte(data), result)
err = this.decode.Decoder([]byte(data), result)
} else {
err = fmt.Errorf(string(redis.Nil))
}

View File

@ -64,7 +64,7 @@ func (this *Redis) ZRange(valuetype reflect.Type, key string, start int64, stop
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -82,7 +82,7 @@ func (this *Redis) ZRangeByLex(valuetype reflect.Type, key string, opt *redis.ZR
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -100,7 +100,7 @@ func (this *Redis) ZRangeByScore(valuetype reflect.Type, key string, opt *redis.
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -158,7 +158,7 @@ func (this *Redis) ZRevRange(valuetype reflect.Type, key string, start int64, st
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}
@ -176,7 +176,7 @@ func (this *Redis) ZRevRangeByScore(valuetype reflect.Type, key string, opt *red
result = make([]interface{}, len(_result))
for i, v := range _result {
temp := reflect.New(valuetype.Elem()).Interface()
if err = this.Decode([]byte(v), &temp); err == nil {
if err = this.decode.Decoder([]byte(v), &temp); err == nil {
result[i] = temp
}
}

View File

@ -3,6 +3,7 @@ package redis_test
import (
"encoding/json"
"fmt"
"os"
"sync"
"testing"
"time"
@ -10,6 +11,23 @@ import (
"go_dreamfactory/lego/sys/redis"
)
func TestMain(m *testing.M) {
if err := redis.OnInit(nil,
redis.SetRedisType(redis.Redis_Cluster),
redis.SetRedis_Cluster_Addr([]string{"10.0.0.9:9001", "10.0.0.9:9002", "10.0.0.9:9003", "10.0.1.45:9004", "10.0.1.45:9005", "10.0.1.45:9006"}),
redis.SetRedis_Cluster_Password(""),
redis.SetRedisStorageType(redis.JsonData),
); err != nil {
fmt.Println("err:", err)
return
}
defer os.Exit(m.Run())
// if err := cache.OnInit(nil, cache.Set_Redis_Addr([]string{"10.0.0.9:9001", "10.0.0.9:9002", "10.0.0.9:9003", "10.0.1.45:9004", "10.0.1.45:9005", "10.0.1.45:9006"}), cache.Set_Redis_Password("")); err != nil {
// fmt.Printf("err:%v\n", err)
// return
// }
}
func Test_SysIPV6(t *testing.T) {
err := redis.OnInit(map[string]interface{}{
"Redis_Single_Addr": "172.27.100.143:6382",
@ -139,5 +157,36 @@ func Test_Redis_Type(t *testing.T) {
} else {
fmt.Printf("Test_Redis_Type:%s \n", ty)
}
}
type TestData struct {
Name string
Agr int
}
func Test_Redis_Encoder_Struct(t *testing.T) {
err := redis.Set("test:1001", &TestData{Name: "liwei1dao", Agr: 12}, -1)
fmt.Printf("err:%v\n", err)
}
func Test_Redis_Encoder_int(t *testing.T) {
err := redis.Set("test:1002", 856, -1)
fmt.Printf("err:%v \n", err)
data := 0
err = redis.Get("test:1002", &data)
fmt.Printf("data:%d err:%v\n", data, err)
}
func Test_Redis_Encoder_Hash(t *testing.T) {
// err := redis.HMSet("test:1003", &TestData{Name: "liwei1dao", Agr: 12})
// fmt.Printf("err:%v\n", err)
// data := &TestData{}
// err = redis.HGetAll("test:1003", data)
// fmt.Printf("data:%v err:%v\n", data, err)
data1 := map[string]*TestData{"li_1": {Name: "liwei2dao", Agr: 56}, "li_2": {Name: "liwei3dao", Agr: 78}}
err := redis.HMSet("test:1004", data1)
fmt.Printf("err:%v\n", err)
data2 := make(map[string]*TestData)
err = redis.HGetAll("test:1004", data2)
fmt.Printf("data2:%v err:%v\n", data2, err)
}

View File

@ -0,0 +1,29 @@
package codec
import (
"fmt"
"testing"
)
type TestData struct {
Fild_1 string
Fild_3 int
Fild_4 float32
}
func Test_Encoder(t *testing.T) {
encoder := &Encoder{}
// data, err := encoder.EncoderToMap(map[string]interface{}{"liwei": 106, "sasd": "2564"})
// fmt.Printf("EncoderToMap data1:%v err:%v", data, err)
data, err := encoder.EncoderToMap([]interface{}{"liwei", 106, "sasd", "2564"})
fmt.Printf("EncoderToMap data1:%v err:%v", data, err)
// data, err := encoder.EncoderToMap(&TestData{Fild_1: "liwei1dao", Fild_3: 25, Fild_4: 3.54})
// fmt.Printf("EncoderToMap data2:%v err:%v", data, err)
}
func Test_Decoder(t *testing.T) {
decoder := &Decoder{}
data := &TestData{}
err := decoder.DecoderMap(map[string]string{"Fild_1": "liwei1dao"}, data)
fmt.Printf("DecoderMap data1:%v err:%v", data, err)
}

View File

@ -1,4 +1,4 @@
package convert
package codec
import (
"encoding/binary"
@ -6,68 +6,22 @@ import (
"unsafe"
)
func ByteToBytes(v byte) []byte {
return []byte{v}
}
const host32bit = ^uint(0)>>32 == 0
func BoolToBytes(v bool) []byte {
var buf = make([]byte, 1)
if v {
buf[0] = 1
} else {
buf[0] = 0
type (
IDecoder interface {
Decoder(buf []byte, v interface{}) error
DecoderMap(data map[string]string, v interface{}) error
}
return buf
}
func Int8ToBytes(v int8) []byte {
return []byte{(byte(v))}
}
func Int16ToBytes(v int16) []byte {
var buf = make([]byte, 2)
binary.BigEndian.PutUint16(buf, uint16(v))
return buf
}
func UInt16ToBytes(v uint16) []byte {
var buf = make([]byte, 2)
binary.BigEndian.PutUint16(buf, v)
return buf
}
func IntToBytes(v int) []byte {
var buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, uint32(v))
return buf
}
func Int32ToBytes(v int32) []byte {
var buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, uint32(v))
return buf
}
func UInt32ToBytes(v uint32) []byte {
var buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, v)
return buf
}
func Int64ToBytes(v int64) []byte {
var buf = make([]byte, 8)
binary.BigEndian.PutUint64(buf, uint64(v))
return buf
}
func UInt64ToBytes(v uint64) []byte {
var buf = make([]byte, 8)
binary.BigEndian.PutUint64(buf, v)
return buf
}
func Float32ToBytes(v float32) []byte {
bits := math.Float32bits(v)
bytes := make([]byte, 4)
binary.LittleEndian.PutUint32(bytes, bits)
return bytes
}
func Float64ToBytes(v float64) []byte {
bits := math.Float64bits(v)
bytes := make([]byte, 8)
binary.LittleEndian.PutUint64(bytes, bits)
return bytes
IEncoder interface {
Encoder(v interface{}) (data []byte, err error)
EncoderToMap(v interface{}) (data map[string][]byte, err error)
}
)
// string
func BytesToString(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
}
func StringToBytes(s string) []byte {
return *(*[]byte)(unsafe.Pointer(
@ -78,48 +32,150 @@ func StringToBytes(s string) []byte {
))
}
func BytesTobyte(buf []byte) byte {
var data byte = buf[0]
return data
// int
func IntToBytes(v int) []byte {
if host32bit {
return Int32ToBytes(int32(v))
} else {
return Int64ToBytes(int64(v))
}
}
func BytesToBool(buf []byte) bool {
var data bool = buf[0] != 0
return data
func BytesToInt(buf []byte) int {
if host32bit {
return int(BytesToInt32(buf))
} else {
return int(BytesToInt64(buf))
}
}
//int8
func Int8ToBytes(v int8) []byte {
return []byte{(byte(v))}
}
func BytesToInt8(buf []byte) int8 {
var data int8 = int8(buf[0])
return data
return int8(buf[0])
}
//int16
func Int16ToBytes(v int16) []byte {
var buf = make([]byte, 2)
binary.BigEndian.PutUint16(buf, uint16(v))
return buf
}
func BytesToInt16(buf []byte) int16 {
return int16(binary.BigEndian.Uint16(buf))
}
func BytesToUInt16(buf []byte) uint16 {
return binary.BigEndian.Uint16(buf)
}
func BytesToInt(buf []byte) int {
return int(binary.BigEndian.Uint32(buf))
//int32
func Int32ToBytes(v int32) []byte {
var buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, uint32(v))
return buf
}
func BytesToInt32(buf []byte) int32 {
return int32(binary.BigEndian.Uint32(buf))
}
func BytesToUInt32(buf []byte) uint32 {
return binary.BigEndian.Uint32(buf)
//int64
func Int64ToBytes(v int64) []byte {
var buf = make([]byte, 8)
binary.BigEndian.PutUint64(buf, uint64(v))
return buf
}
func BytesToInt64(buf []byte) int64 {
return int64(binary.BigEndian.Uint64(buf))
}
//uint
func UIntToBytes(v uint) []byte {
if host32bit {
return Int32ToBytes(int32(v))
} else {
return Int64ToBytes(int64(v))
}
}
func BytesToUInt(buf []byte) uint {
if host32bit {
return uint(BytesToUInt32(buf))
} else {
return uint(BytesToUInt64(buf))
}
}
//uint8
func UInt8ToBytes(v uint8) []byte {
return []byte{v}
}
func BytesToUInt8(buf []byte) uint8 {
var data uint8 = uint8(buf[0])
return data
}
//uint16
func UInt16ToBytes(v uint16) []byte {
var buf = make([]byte, 2)
binary.BigEndian.PutUint16(buf, v)
return buf
}
func BytesToUInt16(buf []byte) uint16 {
return binary.BigEndian.Uint16(buf)
}
//uint32
func UInt32ToBytes(v uint32) []byte {
var buf = make([]byte, 4)
binary.BigEndian.PutUint32(buf, v)
return buf
}
func BytesToUInt32(buf []byte) uint32 {
return binary.BigEndian.Uint32(buf)
}
//uint64
func BytesToUInt64(buf []byte) uint64 {
return binary.BigEndian.Uint64(buf)
}
func UInt64ToBytes(v uint64) []byte {
var buf = make([]byte, 8)
binary.BigEndian.PutUint64(buf, v)
return buf
}
//float32
func Float32ToBytes(v float32) []byte {
bits := math.Float32bits(v)
bytes := make([]byte, 4)
binary.LittleEndian.PutUint32(bytes, bits)
return bytes
}
func BytesToFloat32(buf []byte) float32 {
bits := binary.LittleEndian.Uint32(buf)
return math.Float32frombits(bits)
}
//float64
func Float64ToBytes(v float64) []byte {
bits := math.Float64bits(v)
bytes := make([]byte, 8)
binary.LittleEndian.PutUint64(bytes, bits)
return bytes
}
func BytesToFloat64(buf []byte) float64 {
bits := binary.LittleEndian.Uint64(buf)
return math.Float64frombits(bits)
}
func BytesToString(b []byte) string {
return *(*string)(unsafe.Pointer(&b))
//bool
func BoolToBytes(v bool) []byte {
var buf = make([]byte, 1)
if v {
buf[0] = 1
} else {
buf[0] = 0
}
return buf
}
func BytesToBool(buf []byte) bool {
var data bool = buf[0] != 0
return data
}

141
lego/utils/codec/decoder.go Normal file
View File

@ -0,0 +1,141 @@
package codec
import (
"fmt"
"reflect"
"time"
)
//解码器
type Decoder struct {
DefDecoder func(buf []byte, v interface{}) error //默认编码 扩展自定义编码方式
}
func (this *Decoder) Decoder(buf []byte, v interface{}) error {
switch v := v.(type) {
case nil:
return fmt.Errorf("decoder: Decoder(nil)")
case *string:
*v = BytesToString(buf)
return nil
case *[]byte:
*v = buf
return nil
case *int:
*v = BytesToInt(buf)
return nil
case *int8:
*v = BytesToInt8(buf)
return nil
case *int16:
*v = BytesToInt16(buf)
return nil
case *int32:
*v = BytesToInt32(buf)
return nil
case *int64:
*v = BytesToInt64(buf)
return nil
case *uint:
*v = BytesToUInt(buf)
return nil
case *uint8:
*v = BytesToUInt8(buf)
return nil
case *uint16:
*v = BytesToUInt16(buf)
return nil
case *uint32:
*v = BytesToUInt32(buf)
return nil
case *uint64:
*v = BytesToUInt64(buf)
return nil
case *float32:
*v = BytesToFloat32(buf)
return nil
case *float64:
*v = BytesToFloat64(buf)
return nil
case *bool:
*v = BytesToBool(buf)
return nil
case *time.Time:
var err error
*v, err = time.Parse(time.RFC3339Nano, BytesToString(buf))
return err
case *time.Duration:
*v = time.Duration(BytesToInt64(buf))
return nil
default:
if this.DefDecoder != nil {
return this.DefDecoder(buf, v)
} else {
return fmt.Errorf(
"decoder: can't marshal %T (implement decoder.DefDecoder)", v)
}
}
}
func (this *Decoder) DecoderMap(data map[string]string, v interface{}) error {
vof := reflect.ValueOf(v)
if !vof.IsValid() {
return fmt.Errorf("Decoder: DecoderMap(nil)")
}
if vof.Kind() != reflect.Ptr && vof.Kind() != reflect.Map && vof.Kind() != reflect.Slice {
return fmt.Errorf("Decoder: DecoderMap(non-pointer %T)", v)
}
if vof.Kind() == reflect.Map {
kt, vt := vof.Type().Key(), vof.Type().Elem()
for k, v := range data {
key := reflect.New(kt).Elem()
if key.Kind() != reflect.Ptr {
if err := this.Decoder(StringToBytes(k), key.Addr().Interface()); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", key, err)
}
} else {
if err := this.Decoder(StringToBytes(k), key.Addr()); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", key, err)
}
}
value := reflect.New(vt).Elem()
if value.Kind() != reflect.Ptr {
if err := this.Decoder(StringToBytes(v), value.Addr().Interface()); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", value, err)
}
} else {
value.Interface()
if err := this.Decoder(StringToBytes(v), value.Addr().Interface()); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", value, err)
}
}
vof.SetMapIndex(key, value)
}
} else if vof.Kind() == reflect.Ptr {
elem := vof.Elem()
relType := elem.Type()
for i := 0; i < relType.NumField(); i++ {
fieldInfo := relType.Field(i)
tag := fieldInfo.Tag
name := tag.Get("json")
if len(name) == 0 {
name = fieldInfo.Name
}
if value, ok := data[name]; ok {
v := reflect.New(fieldInfo.Type).Elem()
if fieldInfo.Type.Kind() != reflect.Ptr {
if err := this.Decoder(StringToBytes(value), v.Addr().Interface()); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", value, err)
}
elem.FieldByName(fieldInfo.Name).Set(v)
} else {
if err := this.Decoder(StringToBytes(value), v); err != nil {
return fmt.Errorf("Decoder: Decoder(non-pointer %T) err:%v", value, err)
}
elem.FieldByName(fieldInfo.Name).Set(v)
}
}
}
}
return nil
}

112
lego/utils/codec/encoder.go Normal file
View File

@ -0,0 +1,112 @@
package codec
import (
"fmt"
"reflect"
"time"
)
//编码器
type Encoder struct {
DefEncoder func(v interface{}) (data []byte, err error) //默认编码 扩展自定义编码方式
}
func (this *Encoder) Encoder(v interface{}) (data []byte, err error) {
switch v := v.(type) {
case nil:
return StringToBytes(""), nil
case string:
return StringToBytes(v), nil
case []byte:
return v, nil
case int:
return IntToBytes(v), nil
case int8:
return Int8ToBytes(v), nil
case int16:
return Int16ToBytes(v), nil
case int32:
return Int32ToBytes(v), nil
case int64:
return Int64ToBytes(v), nil
case uint:
return UIntToBytes(v), nil
case uint8:
return UInt8ToBytes(v), nil
case uint16:
return UInt16ToBytes(v), nil
case uint32:
return UInt32ToBytes(v), nil
case uint64:
return UInt64ToBytes(v), nil
case float32:
return Float32ToBytes(v), nil
case float64:
return Float64ToBytes(v), nil
case bool:
return BoolToBytes(v), nil
case time.Time:
return v.AppendFormat([]byte{}, time.RFC3339Nano), nil
case time.Duration:
return Int64ToBytes(v.Nanoseconds()), nil
default:
if this.DefEncoder != nil {
return this.DefEncoder(v)
} else {
return nil, fmt.Errorf(
"encoder: can't marshal %T (implement encoder.DefEncoder)", v)
}
}
}
func (this *Encoder) EncoderToMap(v interface{}) (data map[string][]byte, err error) {
vof := reflect.ValueOf(v)
if !vof.IsValid() {
return nil, fmt.Errorf("Encoder: EncoderToMap(nil)")
}
if vof.Kind() != reflect.Ptr && vof.Kind() != reflect.Map && vof.Kind() != reflect.Slice {
return nil, fmt.Errorf("Encoder: EncoderToMap(non-pointer %T)", v)
}
// vof = vof.Elem()
data = make(map[string][]byte)
if vof.Kind() == reflect.Map {
keys := vof.MapKeys()
for _, k := range keys {
value := vof.MapIndex(k)
var keydata []byte
var valuedata []byte
if keydata, err = this.Encoder(k.Interface()); err != nil {
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", value.Interface(), err)
}
if valuedata, err = this.Encoder(value.Interface()); err != nil {
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", value.Interface(), err)
}
data[BytesToString(keydata)] = valuedata
}
return
} else if vof.Kind() == reflect.Slice {
for i := 0; i < vof.Len(); i++ {
value := vof.Index(i).Interface()
var valuedata []byte
if valuedata, err = this.Encoder(value); err != nil {
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", value, err)
}
data[BytesToString(IntToBytes(i))] = valuedata
}
return
} else if vof.Kind() == reflect.Ptr {
elem := vof.Elem()
relType := elem.Type()
for i := 0; i < relType.NumField(); i++ {
field := elem.Field(i).Interface()
var valuedata []byte
if valuedata, err = this.Encoder(field); err != nil {
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T) err:%v", field, err)
}
data[relType.Field(i).Name] = valuedata
}
return
} else {
return nil, fmt.Errorf("Encoder: EncoderToMap(invalid type %T)", v)
}
}

View File

@ -5,6 +5,7 @@ import (
"go_dreamfactory/pb"
"github.com/golang/protobuf/proto"
"go.mongodb.org/mongo-driver/bson"
)
type (
@ -26,7 +27,7 @@ type (
// 向db 写日志信息
InsertModelLogs(table string, uID string, target interface{}) (err error)
DeleteModelLogs(table string, uID string, where interface{}) (err error)
UpdateModelLogs(table string, uID string, where interface{}, target interface{}) (err error)
UpdateModelLogs(table string, uID string, where bson.M, target interface{}) (err error)
}
IDB_Comp interface {
}

View File

@ -2,8 +2,6 @@ package dbservice
import (
"go_dreamfactory/lego/core"
"go.mongodb.org/mongo-driver/bson"
)
const (
@ -16,11 +14,6 @@ var (
ErrorLogCount = make(map[string]uint32, 0)
)
type QueryStruct struct {
Selector bson.M
Query bson.M
}
const (
DB_ModelTable core.SqlTable = "model_log"
)

View File

@ -89,7 +89,7 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
log.Errorf("insert db err max num %s db err:%v", data.ID, err)
_, err = this.DB.DeleteOne(DB_ModelTable, bson.M{"_id": data.ID})
if err != nil {
log.Errorf("insert %s db err:%v", data.ID, err)
log.Errorf("insert %s db err:%+v", data.ID, err)
}
}
continue
@ -116,7 +116,7 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
log.Errorf("del db err max num %s db err:%v", data.ID, err)
_, err = this.DB.DeleteOne(DB_ModelTable, bson.M{"_id": data.ID})
if err != nil {
log.Errorf("insert %s db err:%v", data.ID, err)
log.Errorf("insert %s db err:%+v", data.ID, err)
}
}
continue
@ -126,20 +126,19 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
log.Errorf("parameter len _id : %s,uid : %s d.len:%v", data.ID, data.UID, len(data.D))
continue
}
_key := data.D[0].(string)
where := data.D[1].(bson.D)
_obj := &QueryStruct{
Selector: make(map[string]interface{}),
Query: make(map[string]interface{}),
Where := make(bson.M, 0)
Query := make(bson.M, 0)
Query1 := make(bson.M, 0)
Query1["$set"] = Query
for _, v := range data.D[1].(bson.D) {
Where[v.Key] = v
}
for _, v := range where {
_obj.Selector[v.Key] = v
for _, v := range data.D[2].(bson.D) {
Query[v.Key] = v
}
query := data.D[2].(bson.D)
for _, v := range query {
_obj.Query[v.Key] = v
}
_, err := this.DB.UpdateMany(core.SqlTable(_key), _obj.Selector, _obj.Query)
_, err := this.DB.UpdateMany(core.SqlTable(_key), Where, Query1)
if err != nil {
log.Errorf("Update %s db err:%v", core.SqlTable(_key), err)
ErrorLogCount[data.ID]++
@ -147,7 +146,7 @@ func (this *DB_Comp) Model_UpdateDBByLog(uid string) (err error) {
log.Errorf("update db err max num %s db err:%v", data.ID, err)
_, err = this.DB.DeleteOne(DB_ModelTable, bson.M{"_id": data.ID})
if err != nil {
log.Errorf("insert %s db err:%v", data.ID, err)
log.Errorf("insert %s db err:%+v", data.ID, err)
}
}
continue

View File

@ -1,47 +0,0 @@
package dbservice
import (
"go_dreamfactory/pb"
"os"
"testing"
"time"
"go.mongodb.org/mongo-driver/bson/primitive"
)
var module = new(DBService)
func TestMain(m *testing.M) {
for i := 0; i < 50000; i++ {
//go func() {
_mail := &pb.DB_MailData{
ObjId: primitive.NewObjectID().Hex(),
UserId: "uid123",
Title: "系统邮件",
Contex: "恭喜获得专属礼包一份",
CreateTime: uint64(time.Now().Unix()),
DueTime: uint64(time.Now().Unix()) + 30*24*3600,
Check: false,
Reward: false,
}
module.db_comp.InsertModelLogs("mail", "uid123", _mail)
//db.InsertModelLogs("mail", "uid123", _mail)
//InsertModelLogs("mail", "uid123", _mail)
// data := &comm.Autogenerated{
// ID: primitive.NewObjectID().Hex(),
// UID: "uid123",
// Act: string(comm.LogHandleType_Insert),
// }
// data.D = append(data.D, "mail") // D[0]
// data.D = append(data.D, _mail) // D[1]
// _, err1 := module.db_comp.DB.InsertOne("model_log", data)
// if err1 != nil {
// log.Errorf("insert model db err %v", err1)
// }
//}()
}
time.Sleep(time.Second * 10)
defer os.Exit(m.Run())
}

View File

@ -21,6 +21,7 @@ import (
// var typeOfContext = reflect.TypeOf((*context.Context)(nil)).Elem()
var typeOfSession = reflect.TypeOf((*comm.IUserSession)(nil)).Elem()
var typeOfMapStringIntface = reflect.TypeOf((map[string]interface{})(nil)).Elem()
var typeOfCode = reflect.TypeOf((*comm.ErrorCode)(nil)).Elem()
var typeOfErrorCode = reflect.TypeOf((*pb.ErrorCode)(nil)).Elem()
var typeOfError = reflect.TypeOf((*error)(nil)).Elem()
@ -96,7 +97,8 @@ func (this *MComp_GateComp) reflectionRouteHandle(method reflect.Method) {
if mtype.NumOut() != 1 {
return
}
if returnType := mtype.Out(0); returnType != typeOfError {
returnCodeType := mtype.Out(0)
if returnCodeType != typeOfErrorCode {
return
}
this.scomp.RegisterRoute(fmt.Sprintf("%s.%s", this.module.GetType(), strings.ToLower(mname)), reflect.ValueOf(this.comp), replyType, method)
@ -134,7 +136,7 @@ func (this *MComp_GateComp) reflectionRouteCheck(method reflect.Method) {
return
}
returnCodeType := mtype.Out(1)
if returnCodeType != typeOfErrorCode {
if returnCodeType != typeOfCode {
return
}
this.scomp.RegisterRouteCheck(fmt.Sprintf("%s.%s", this.module.GetType(), strings.ToLower(mname[0])), reflect.ValueOf(this.comp), replyType, method)

View File

@ -11,6 +11,7 @@ import (
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/utils/container/id"
"github.com/golang/protobuf/ptypes"
"github.com/gorilla/websocket"
"google.golang.org/protobuf/proto"
)
@ -154,7 +155,14 @@ func (this *Agent) messageDistribution(msg *pb.UserMessage) {
Message: msg.Data,
}, reply); err != nil {
log.Errorf("agent:%s uId:%s MessageDistribution err:%v", this.sessionId, this.uId, err)
} else {
log.Debugf("agent:%s uId:%s MessageDistribution reply:%v", this.sessionId, this.uId, reply)
return
}
if reply.Code != pb.ErrorCode_Success {
data, _ := ptypes.MarshalAny(&pb.ErrorNotify{ReqMainType: msg.MainType, ReqSubType: msg.SubType, Code: reply.Code})
this.WriteMsg(&pb.UserMessage{
MainType: "notify",
SubType: "errornotify",
Data: data,
})
}
}

View File

@ -39,7 +39,7 @@ func (this *AgentMgr_Comp) Bind(ctx context.Context, args *pb.AgentBuildReq, rep
a.(IAgent).Bind(args.UserId, args.WorkerId)
} else {
reply.Code = pb.ErrorCode_UserSessionNobeing
reply.Msg = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
reply.Message = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
}
return nil
}
@ -50,7 +50,7 @@ func (this *AgentMgr_Comp) UnBind(ctx context.Context, args *pb.AgentUnBuildReq,
a.(IAgent).UnBind()
} else {
reply.Code = pb.ErrorCode_UserSessionNobeing
reply.Msg = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
reply.Message = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
}
return nil
}
@ -61,12 +61,11 @@ func (this *AgentMgr_Comp) SendMsgToAgent(ctx context.Context, args *pb.AgentSen
a.(IAgent).WriteMsg(&pb.UserMessage{
MainType: args.MainType,
SubType: args.SubType,
Code: args.Code,
Data: args.Data,
})
} else {
reply.Code = pb.ErrorCode_UserSessionNobeing
reply.Msg = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
reply.Message = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
}
return nil
}
@ -106,7 +105,7 @@ func (this *AgentMgr_Comp) CloseAgent(ctx context.Context, args *pb.AgentCloseeR
a.(IAgent).Close()
} else {
reply.Code = pb.ErrorCode_UserSessionNobeing
reply.Msg = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
reply.Message = pb.GetErrorCodeMsg(pb.ErrorCode_UserSessionNobeing)
}
return nil
}

View File

@ -12,12 +12,11 @@ func (this *Api_Comp) DelUserMailReq_Check(session comm.IUserSession, req *pb.De
}
// 删除邮件
func (this *Api_Comp) DelUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.DelUserMailReq) (err error) {
code := pb.ErrorCode_Success
func (this *Api_Comp) DelUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.DelUserMailReq) (code pb.ErrorCode) {
var err error
mailinfo := make([]*pb.DB_MailData, 0)
defer func() {
session.SendMsg(string(this.module.GetType()), DelUserMailResp, code, &pb.DelUserMailResp{Mail: mailinfo})
session.SendMsg(string(this.module.GetType()), DelUserMailResp, &pb.DelUserMailResp{Mail: mailinfo})
}()
if session.GetUserId() == "" {
code = pb.ErrorCode_NoLogin

View File

@ -5,19 +5,18 @@ import (
"go_dreamfactory/pb"
)
func (this *Api_Comp) GetUserMailAttachmentReq_Check(session comm.IUserSession, req *pb.GetUserMailAttachmentReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) GetUserMailAttachmentReq_Check(session comm.IUserSession, req *pb.GetUserMailAttachmentReq) (result map[string]interface{}, code comm.ErrorCode) {
return
}
// 领取附件
func (this *Api_Comp) GetUserMailAttachmentReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.GetUserMailAttachmentReq) (err error) {
func (this *Api_Comp) GetUserMailAttachmentReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.GetUserMailAttachmentReq) (code pb.ErrorCode) {
var (
code pb.ErrorCode
mail *pb.DB_MailData
)
defer func() {
session.SendMsg(string(this.module.GetType()), GetUserMailAttachmentResp, code, &pb.GetUserMailAttachmentResp{Mail: mail})
session.SendMsg(string(this.module.GetType()), GetUserMailAttachmentResp, &pb.GetUserMailAttachmentResp{Mail: mail})
}()
if session.GetUserId() == "" {
code = pb.ErrorCode_NoLogin

View File

@ -6,17 +6,17 @@ import (
"go_dreamfactory/pb"
)
func (this *Api_Comp) QueryUserMailReq_Check(session comm.IUserSession, req *pb.QueryUserMailReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) QueryUserMailReq_Check(session comm.IUserSession, req *pb.QueryUserMailReq) (result map[string]interface{}, code comm.ErrorCode) {
return
}
// 查看所有邮件信息
func (this *Api_Comp) QueryUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.QueryUserMailReq) (err error) {
func (this *Api_Comp) QueryUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.QueryUserMailReq) (code pb.ErrorCode) {
code := pb.ErrorCode_Success
var err error
mailinfo := make([]*pb.DB_MailData, 0)
defer func() {
session.SendMsg(string(this.module.GetType()), QueryUserMailResp, code, &pb.QueryUserMailResp{Mails: mailinfo})
session.SendMsg(string(this.module.GetType()), QueryUserMailResp, &pb.QueryUserMailResp{Mails: mailinfo})
}()
if session.GetUserId() == "" {
code = pb.ErrorCode_NoLogin

View File

@ -5,18 +5,18 @@ import (
"go_dreamfactory/pb"
)
func (this *Api_Comp) ReadUserMailReq_Check(session comm.IUserSession, req *pb.ReadUserMailReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) ReadUserMailReq_Check(session comm.IUserSession, req *pb.ReadUserMailReq) (result map[string]interface{}, code comm.ErrorCode) {
return
}
// 查看某一封邮件
func (this *Api_Comp) ReadUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.ReadUserMailReq) (err error) {
func (this *Api_Comp) ReadUserMailReq(session comm.IUserSession, agrs map[string]interface{}, req *pb.ReadUserMailReq) (code pb.ErrorCode) {
var (
code pb.ErrorCode
err error
mail *pb.DB_MailData
)
defer func() {
session.SendMsg(string(this.module.GetType()), ReadUserMailResp, code, &pb.ReadUserMailResp{Mail: mail})
session.SendMsg(string(this.module.GetType()), ReadUserMailResp, &pb.ReadUserMailResp{Mail: mail})
}()
if session.GetUserId() == "" {
code = pb.ErrorCode_NoLogin

View File

@ -79,7 +79,7 @@ func (this *Model_Comp) DeleteModelLogs(table string, uID string, where interfac
return err
}
func (this *Model_Comp) UpdateModelLogs(table string, uID string, where interface{}, target interface{}) (err error) {
func (this *Model_Comp) UpdateModelLogs(table string, uID string, where bson.M, target interface{}) (err error) {
data := &comm.Autogenerated{
ID: primitive.NewObjectID().Hex(),

View File

@ -8,15 +8,15 @@ import (
)
//参数校验
func (this *Api_Comp) Getlist_Check(session comm.IUserSession, req *pb.GetlistReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) Getlist_Check(session comm.IUserSession, req *pb.GetlistReq) (result map[string]interface{}, code comm.ErrorCode) {
result = map[string]interface{}{"ce": 123}
return
}
///获取用户道具
func (this *Api_Comp) Getlist(session comm.IUserSession, agrs map[string]interface{}, req *pb.GetlistReq) (err error) {
func (this *Api_Comp) Getlist(session comm.IUserSession, agrs map[string]interface{}, req *pb.GetlistReq) (code pb.ErrorCode) {
var (
code pb.ErrorCode
err error
items []*pb.DB_UserItemData
nt int64
tempgrids []*pb.DB_UserItemData
@ -25,7 +25,7 @@ func (this *Api_Comp) Getlist(session comm.IUserSession, agrs map[string]interfa
dels []string
)
defer func() {
session.SendMsg(string(this.module.GetType()), GetlistResp, code, &pb.GetlistResp{Grids: grids})
session.SendMsg(string(this.module.GetType()), GetlistResp, &pb.GetlistResp{Grids: grids})
if code == pb.ErrorCode_Success {
go func() { //异步处理修改数据
this.module.cache_comp.Pack_UpdateUserPack(session.GetUserId(), modifys...)

View File

@ -6,18 +6,15 @@ import (
)
//参数校验
func (this *Api_Comp) SellItem_Check(session comm.IUserSession, req *pb.SellItemReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) SellItem_Check(session comm.IUserSession, req *pb.SellItemReq) (result map[string]interface{}, code comm.ErrorCode) {
return
}
//出售道具
func (this *Api_Comp) SellItem(session comm.IUserSession, agrs map[string]interface{}, req *pb.SellItemReq) (err error) {
var (
code pb.ErrorCode
)
func (this *Api_Comp) SellItem(session comm.IUserSession, agrs map[string]interface{}, req *pb.SellItemReq) (code pb.ErrorCode) {
defer func() {
session.SendMsg(string(this.module.GetType()), SellItemResp, code, &pb.SellItemResp{})
session.SendMsg(string(this.module.GetType()), SellItemResp, &pb.SellItemResp{})
}()
return
}

View File

@ -6,18 +6,15 @@ import (
)
//参数校验
func (this *Api_Comp) Useitem_Check(session comm.IUserSession, req *pb.UseItemReq) (result map[string]interface{}, code pb.ErrorCode) {
func (this *Api_Comp) Useitem_Check(session comm.IUserSession, req *pb.UseItemReq) (result map[string]interface{}, code comm.ErrorCode) {
return
}
//使用道具
func (this *Api_Comp) Useitem(session comm.IUserSession, agrs map[string]interface{}, req *pb.UseItemReq) (err error) {
var (
code pb.ErrorCode
)
func (this *Api_Comp) Useitem(session comm.IUserSession, agrs map[string]interface{}, req *pb.UseItemReq) (code pb.ErrorCode) {
defer func() {
session.SendMsg(string(this.module.GetType()), UseItemResp, code, &pb.UseItemResp{})
session.SendMsg(string(this.module.GetType()), UseItemResp, &pb.UseItemResp{})
}()
return

View File

@ -7,7 +7,6 @@ import (
"go_dreamfactory/lego/sys/redis"
"go_dreamfactory/modules"
"go_dreamfactory/pb"
"reflect"
"go.mongodb.org/mongo-driver/bson/primitive"
)
@ -27,27 +26,27 @@ func (this *Cache_Comp) Init(service core.IService, module core.IModule, comp co
///查询用户背包数据
func (this *Cache_Comp) Pack_QueryUserPack(uId string) (itmes []*pb.DB_UserItemData, err error) {
var (
lists []interface{}
temp map[string]interface{}
)
if lists, err = this.Redis.HGetAll(fmt.Sprintf(Redis_PackCache, uId), reflect.TypeOf(pb.DB_UserItemData{})); err == nil {
itmes = make([]*pb.DB_UserItemData, 0, len(lists))
for i, v := range lists {
itmes[i] = v.(*pb.DB_UserItemData)
}
return
} else if err == redis.RedisNil {
if itmes, err = this.module.db_comp.Pack_QueryUserPack(uId); err == nil {
temp = make(map[string]interface{})
for _, v := range itmes {
temp[v.GridId] = v
}
this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp)
} else if err == mgo.MongodbNil {
err = nil
}
}
// var (
// lists []interface{}
// temp map[string]interface{}
// )
// if lists, err = this.Redis.HGetAll(fmt.Sprintf(Redis_PackCache, uId), reflect.TypeOf(pb.DB_UserItemData{})); err == nil {
// itmes = make([]*pb.DB_UserItemData, 0, len(lists))
// for i, v := range lists {
// itmes[i] = v.(*pb.DB_UserItemData)
// }
// return
// } else if err == redis.RedisNil {
// if itmes, err = this.module.db_comp.Pack_QueryUserPack(uId); err == nil {
// temp = make(map[string]interface{})
// for _, v := range itmes {
// temp[v.GridId] = v
// }
// this.Redis.HMSet(fmt.Sprintf(Redis_PackCache, uId), temp)
// } else if err == mgo.MongodbNil {
// err = nil
// }
// }
return
}

1
pb.bat
View File

@ -8,6 +8,7 @@ set SRC=%PROJECT_ROOT%\pb\proto
set TAR=%PROJECT_ROOT%\pb
protoc --proto_path=%SRC% --go_out=%TAR% --go_opt=paths=import %SRC%\*.proto
protoc --proto_path=%SRC% --go_out=%TAR% --go_opt=paths=import %SRC%\notify\*.proto
protoc --proto_path=%SRC% --go_out=%TAR% --go_opt=paths=import %SRC%\user\*.proto
protoc --proto_path=%SRC% --go_out=%TAR% --go_opt=paths=import %SRC%\friend\*.proto
protoc --proto_path=%SRC% --go_out=%TAR% --go_opt=paths=import %SRC%\pack\*.proto

View File

@ -27,10 +27,9 @@ type UserMessage struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
MainType string `protobuf:"bytes,1,opt,name=MainType,proto3" json:"MainType"`
SubType string `protobuf:"bytes,2,opt,name=SubType,proto3" json:"SubType"`
Code ErrorCode `protobuf:"varint,3,opt,name=Code,proto3,enum=ErrorCode" json:"Code"`
Data *anypb.Any `protobuf:"bytes,4,opt,name=data,proto3" json:"data"`
MainType string `protobuf:"bytes,1,opt,name=MainType,proto3" json:"MainType,omitempty"` //用户消息处理 模块名 例如:user 对应项目中 user的模块
SubType string `protobuf:"bytes,2,opt,name=SubType,proto3" json:"SubType,omitempty"` //用户消息处理函数名 例如:login 对应项目中 user的模块中 api_login 的处理函数
Data *anypb.Any `protobuf:"bytes,3,opt,name=data,proto3" json:"data,omitempty"`
}
func (x *UserMessage) Reset() {
@ -79,13 +78,6 @@ func (x *UserMessage) GetSubType() string {
return ""
}
func (x *UserMessage) GetCode() ErrorCode {
if x != nil {
return x.Code
}
return ErrorCode_Success
}
func (x *UserMessage) GetData() *anypb.Any {
if x != nil {
return x.Data
@ -99,12 +91,12 @@ type AgentMessage struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Ip string `protobuf:"bytes,1,opt,name=Ip,proto3" json:"Ip"`
UserSessionId string `protobuf:"bytes,2,opt,name=UserSessionId,proto3" json:"UserSessionId"`
UserId string `protobuf:"bytes,3,opt,name=UserId,proto3" json:"UserId"`
GatewayServiceId string `protobuf:"bytes,4,opt,name=GatewayServiceId,proto3" json:"GatewayServiceId"`
Method string `protobuf:"bytes,5,opt,name=Method,proto3" json:"Method"`
Message *anypb.Any `protobuf:"bytes,6,opt,name=Message,proto3" json:"Message"`
Ip string `protobuf:"bytes,1,opt,name=Ip,proto3" json:"Ip,omitempty"`
UserSessionId string `protobuf:"bytes,2,opt,name=UserSessionId,proto3" json:"UserSessionId,omitempty"`
UserId string `protobuf:"bytes,3,opt,name=UserId,proto3" json:"UserId,omitempty"`
GatewayServiceId string `protobuf:"bytes,4,opt,name=GatewayServiceId,proto3" json:"GatewayServiceId,omitempty"`
Method string `protobuf:"bytes,5,opt,name=Method,proto3" json:"Method,omitempty"`
Message *anypb.Any `protobuf:"bytes,6,opt,name=Message,proto3" json:"Message,omitempty"`
}
func (x *AgentMessage) Reset() {
@ -187,8 +179,9 @@ type RPCMessageReply struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Code ErrorCode `protobuf:"varint,1,opt,name=Code,proto3,enum=ErrorCode" json:"Code"`
Msg string `protobuf:"bytes,2,opt,name=Msg,proto3" json:"Msg"`
Code ErrorCode `protobuf:"varint,1,opt,name=Code,proto3,enum=ErrorCode" json:"Code,omitempty"`
Message string `protobuf:"bytes,2,opt,name=Message,proto3" json:"Message,omitempty"`
Data string `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`
}
func (x *RPCMessageReply) Reset() {
@ -230,9 +223,16 @@ func (x *RPCMessageReply) GetCode() ErrorCode {
return ErrorCode_Success
}
func (x *RPCMessageReply) GetMsg() string {
func (x *RPCMessageReply) GetMessage() string {
if x != nil {
return x.Msg
return x.Message
}
return ""
}
func (x *RPCMessageReply) GetData() string {
if x != nil {
return x.Data
}
return ""
}
@ -243,9 +243,9 @@ type AgentBuildReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId"`
UserId string `protobuf:"bytes,2,opt,name=UserId,proto3" json:"UserId"`
WorkerId string `protobuf:"bytes,3,opt,name=WorkerId,proto3" json:"WorkerId"`
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId,omitempty"`
UserId string `protobuf:"bytes,2,opt,name=UserId,proto3" json:"UserId,omitempty"`
WorkerId string `protobuf:"bytes,3,opt,name=WorkerId,proto3" json:"WorkerId,omitempty"`
}
func (x *AgentBuildReq) Reset() {
@ -307,7 +307,7 @@ type AgentUnBuildReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId"`
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId,omitempty"`
}
func (x *AgentUnBuildReq) Reset() {
@ -355,11 +355,10 @@ type AgentSendMessageReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId"`
MainType string `protobuf:"bytes,2,opt,name=MainType,proto3" json:"MainType"`
SubType string `protobuf:"bytes,3,opt,name=SubType,proto3" json:"SubType"`
Code ErrorCode `protobuf:"varint,4,opt,name=Code,proto3,enum=ErrorCode" json:"Code"`
Data *anypb.Any `protobuf:"bytes,5,opt,name=Data,proto3" json:"Data"`
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId,omitempty"`
MainType string `protobuf:"bytes,2,opt,name=MainType,proto3" json:"MainType,omitempty"`
SubType string `protobuf:"bytes,3,opt,name=SubType,proto3" json:"SubType,omitempty"`
Data *anypb.Any `protobuf:"bytes,4,opt,name=Data,proto3" json:"Data,omitempty"`
}
func (x *AgentSendMessageReq) Reset() {
@ -415,13 +414,6 @@ func (x *AgentSendMessageReq) GetSubType() string {
return ""
}
func (x *AgentSendMessageReq) GetCode() ErrorCode {
if x != nil {
return x.Code
}
return ErrorCode_Success
}
func (x *AgentSendMessageReq) GetData() *anypb.Any {
if x != nil {
return x.Data
@ -435,10 +427,10 @@ type BatchMessageReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserSessionIds []string `protobuf:"bytes,1,rep,name=UserSessionIds,proto3" json:"UserSessionIds"`
MainType string `protobuf:"bytes,2,opt,name=MainType,proto3" json:"MainType"`
SubType string `protobuf:"bytes,3,opt,name=SubType,proto3" json:"SubType"`
Data *anypb.Any `protobuf:"bytes,4,opt,name=Data,proto3" json:"Data"`
UserSessionIds []string `protobuf:"bytes,1,rep,name=UserSessionIds,proto3" json:"UserSessionIds,omitempty"`
MainType string `protobuf:"bytes,2,opt,name=MainType,proto3" json:"MainType,omitempty"`
SubType string `protobuf:"bytes,3,opt,name=SubType,proto3" json:"SubType,omitempty"`
Data *anypb.Any `protobuf:"bytes,4,opt,name=Data,proto3" json:"Data,omitempty"`
}
func (x *BatchMessageReq) Reset() {
@ -507,9 +499,9 @@ type BroadCastMessageReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
MainType string `protobuf:"bytes,1,opt,name=MainType,proto3" json:"MainType"` //服务名
SubType string `protobuf:"bytes,2,opt,name=SubType,proto3" json:"SubType"`
Data *anypb.Any `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data"`
MainType string `protobuf:"bytes,1,opt,name=MainType,proto3" json:"MainType,omitempty"` //服务名
SubType string `protobuf:"bytes,2,opt,name=SubType,proto3" json:"SubType,omitempty"`
Data *anypb.Any `protobuf:"bytes,3,opt,name=Data,proto3" json:"Data,omitempty"`
}
func (x *BroadCastMessageReq) Reset() {
@ -571,7 +563,7 @@ type AgentCloseeReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId"`
UserSessionId string `protobuf:"bytes,1,opt,name=UserSessionId,proto3" json:"UserSessionId,omitempty"`
}
func (x *AgentCloseeReq) Reset() {
@ -619,77 +611,75 @@ var file_comm_proto_rawDesc = []byte{
0x0a, 0x0a, 0x63, 0x6f, 0x6d, 0x6d, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x65, 0x72,
0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x19, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2f, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2f, 0x61,
0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x8d, 0x01, 0x0a, 0x0b, 0x55, 0x73, 0x65,
0x72, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e,
0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e,
0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18,
0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e,
0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x45,
0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28,
0x0a, 0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41,
0x6e, 0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x41, 0x67, 0x65,
0x6e, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65,
0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12,
0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77,
0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28,
0x09, 0x52, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63,
0x65, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x05, 0x20,
0x01, 0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x2e, 0x0a, 0x07, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67,
0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41,
0x6e, 0x79, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x43, 0x0a, 0x0f, 0x52,
0x50, 0x43, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e,
0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x45,
0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x10,
0x0a, 0x03, 0x4d, 0x73, 0x67, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x03, 0x4d, 0x73, 0x67,
0x22, 0x69, 0x0a, 0x0d, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65,
0x71, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49,
0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12,
0x1a, 0x0a, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28,
0x09, 0x52, 0x08, 0x57, 0x6f, 0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0f, 0x41,
0x67, 0x65, 0x6e, 0x74, 0x55, 0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x12, 0x24,
0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18,
0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x49, 0x64, 0x22, 0xbb, 0x01, 0x0a, 0x13, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65,
0x6e, 0x64, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d,
0x6e, 0x79, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x6d, 0x0a, 0x0b, 0x55, 0x73, 0x65, 0x72,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54,
0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54,
0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a,
0x04, 0x64, 0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e,
0x79, 0x52, 0x04, 0x64, 0x61, 0x74, 0x61, 0x22, 0xd0, 0x01, 0x0a, 0x0c, 0x41, 0x67, 0x65, 0x6e,
0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x0e, 0x0a, 0x02, 0x49, 0x70, 0x18, 0x01,
0x20, 0x01, 0x28, 0x09, 0x52, 0x02, 0x49, 0x70, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72,
0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x16,
0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x06,
0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x2a, 0x0a, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61,
0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x49, 0x64, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09,
0x52, 0x10, 0x47, 0x61, 0x74, 0x65, 0x77, 0x61, 0x79, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x18, 0x05, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x4d, 0x65, 0x74, 0x68, 0x6f, 0x64, 0x12, 0x2e, 0x0a, 0x07, 0x4d, 0x65,
0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x06, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f,
0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e,
0x79, 0x52, 0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x22, 0x5f, 0x0a, 0x0f, 0x52, 0x50,
0x43, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x70, 0x6c, 0x79, 0x12, 0x1e, 0x0a,
0x04, 0x43, 0x6f, 0x64, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x45, 0x72,
0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a,
0x07, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18,
0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x69, 0x0a, 0x0d, 0x41,
0x67, 0x65, 0x6e, 0x74, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d,
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20,
0x01, 0x28, 0x09, 0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02,
0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18,
0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52,
0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x04, 0x43, 0x6f, 0x64, 0x65,
0x18, 0x04, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f,
0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61,
0x18, 0x05, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e,
0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x44, 0x61,
0x74, 0x61, 0x22, 0x99, 0x01, 0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73,
0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e,
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x1a,
0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75,
0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62,
0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01,
0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x75,
0x0a, 0x13, 0x42, 0x72, 0x6f, 0x61, 0x64, 0x43, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61,
0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70,
0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70,
0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x44,
0x61, 0x74, 0x61, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67,
0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52,
0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x36, 0x0a, 0x0e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6c,
0x6f, 0x73, 0x65, 0x65, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53,
0x49, 0x64, 0x12, 0x16, 0x0a, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x18, 0x02, 0x20, 0x01,
0x28, 0x09, 0x52, 0x06, 0x55, 0x73, 0x65, 0x72, 0x49, 0x64, 0x12, 0x1a, 0x0a, 0x08, 0x57, 0x6f,
0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x57, 0x6f,
0x72, 0x6b, 0x65, 0x72, 0x49, 0x64, 0x22, 0x37, 0x0a, 0x0f, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x55,
0x6e, 0x42, 0x75, 0x69, 0x6c, 0x64, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65,
0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x22,
0x9b, 0x01, 0x0a, 0x13, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x53, 0x65, 0x6e, 0x64, 0x4d, 0x65, 0x73,
0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d,
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0x06, 0x5a,
0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x12, 0x1a, 0x0a,
0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52,
0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62,
0x54, 0x79, 0x70, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54,
0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28,
0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x99, 0x01,
0x0a, 0x0f, 0x42, 0x61, 0x74, 0x63, 0x68, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65,
0x71, 0x12, 0x26, 0x0a, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e,
0x49, 0x64, 0x73, 0x18, 0x01, 0x20, 0x03, 0x28, 0x09, 0x52, 0x0e, 0x55, 0x73, 0x65, 0x72, 0x53,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x73, 0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69,
0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69,
0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65,
0x18, 0x03, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12,
0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x04, 0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e,
0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e,
0x41, 0x6e, 0x79, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x22, 0x75, 0x0a, 0x13, 0x42, 0x72, 0x6f,
0x61, 0x64, 0x43, 0x61, 0x73, 0x74, 0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x52, 0x65, 0x71,
0x12, 0x1a, 0x0a, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01,
0x28, 0x09, 0x52, 0x08, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x53,
0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x28, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x03,
0x20, 0x01, 0x28, 0x0b, 0x32, 0x14, 0x2e, 0x67, 0x6f, 0x6f, 0x67, 0x6c, 0x65, 0x2e, 0x70, 0x72,
0x6f, 0x74, 0x6f, 0x62, 0x75, 0x66, 0x2e, 0x41, 0x6e, 0x79, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61,
0x22, 0x36, 0x0a, 0x0e, 0x41, 0x67, 0x65, 0x6e, 0x74, 0x43, 0x6c, 0x6f, 0x73, 0x65, 0x65, 0x52,
0x65, 0x71, 0x12, 0x24, 0x0a, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x49, 0x64, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52, 0x0d, 0x55, 0x73, 0x65, 0x72, 0x53,
0x65, 0x73, 0x73, 0x69, 0x6f, 0x6e, 0x49, 0x64, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62,
0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
@ -715,23 +705,21 @@ var file_comm_proto_goTypes = []interface{}{
(*BatchMessageReq)(nil), // 6: BatchMessageReq
(*BroadCastMessageReq)(nil), // 7: BroadCastMessageReq
(*AgentCloseeReq)(nil), // 8: AgentCloseeReq
(ErrorCode)(0), // 9: ErrorCode
(*anypb.Any)(nil), // 10: google.protobuf.Any
(*anypb.Any)(nil), // 9: google.protobuf.Any
(ErrorCode)(0), // 10: ErrorCode
}
var file_comm_proto_depIdxs = []int32{
9, // 0: UserMessage.Code:type_name -> ErrorCode
10, // 1: UserMessage.data:type_name -> google.protobuf.Any
10, // 2: AgentMessage.Message:type_name -> google.protobuf.Any
9, // 3: RPCMessageReply.Code:type_name -> ErrorCode
9, // 4: AgentSendMessageReq.Code:type_name -> ErrorCode
10, // 5: AgentSendMessageReq.Data:type_name -> google.protobuf.Any
10, // 6: BatchMessageReq.Data:type_name -> google.protobuf.Any
10, // 7: BroadCastMessageReq.Data:type_name -> google.protobuf.Any
8, // [8:8] is the sub-list for method output_type
8, // [8:8] is the sub-list for method input_type
8, // [8:8] is the sub-list for extension type_name
8, // [8:8] is the sub-list for extension extendee
0, // [0:8] is the sub-list for field type_name
9, // 0: UserMessage.data:type_name -> google.protobuf.Any
9, // 1: AgentMessage.Message:type_name -> google.protobuf.Any
10, // 2: RPCMessageReply.Code:type_name -> ErrorCode
9, // 3: AgentSendMessageReq.Data:type_name -> google.protobuf.Any
9, // 4: BatchMessageReq.Data:type_name -> google.protobuf.Any
9, // 5: BroadCastMessageReq.Data:type_name -> google.protobuf.Any
6, // [6:6] is the sub-list for method output_type
6, // [6:6] is the sub-list for method input_type
6, // [6:6] is the sub-list for extension type_name
6, // [6:6] is the sub-list for extension extendee
0, // [0:6] is the sub-list for field type_name
}
func init() { file_comm_proto_init() }

View File

@ -25,17 +25,18 @@ type ErrorCode int32
const (
ErrorCode_Success ErrorCode = 0 //成功
ErrorCode_NoFindService ErrorCode = 10 //没有找到远程服务器
ErrorCode_RpcFuncExecutionError ErrorCode = 11 //Rpc方法执行错误
ErrorCode_CacheReadError ErrorCode = 12 //缓存读取失败
ErrorCode_SqlExecutionError ErrorCode = 13 //数据库执行错误
ErrorCode_ReqParameterError ErrorCode = 14 //请求参数错误
ErrorCode_SignError ErrorCode = 15 //签名错误
ErrorCode_InsufficientPermissions ErrorCode = 16 //权限不足
ErrorCode_NoLogin ErrorCode = 17 //未登录
ErrorCode_UserSessionNobeing ErrorCode = 18 //用户不存在
ErrorCode_StateInvalid ErrorCode = 21 //无效状态
ErrorCode_DBError ErrorCode = 22 // 数据库操作失败
ErrorCode_SystemError ErrorCode = 23 // 通用错误
ErrorCode_NoFindServiceHandleFunc ErrorCode = 11 //远程服务器未找到执行方法
ErrorCode_RpcFuncExecutionError ErrorCode = 12 //Rpc方法执行错误
ErrorCode_CacheReadError ErrorCode = 13 //缓存读取失败
ErrorCode_SqlExecutionError ErrorCode = 14 //数据库执行错误
ErrorCode_ReqParameterError ErrorCode = 15 //请求参数错误
ErrorCode_SignError ErrorCode = 16 //签名错误
ErrorCode_InsufficientPermissions ErrorCode = 17 //权限不足
ErrorCode_NoLogin ErrorCode = 18 //未登录
ErrorCode_UserSessionNobeing ErrorCode = 19 //用户不存在
ErrorCode_StateInvalid ErrorCode = 20 //无效状态
ErrorCode_DBError ErrorCode = 21 // 数据库操作失败
ErrorCode_SystemError ErrorCode = 22 // 通用错误
//user
ErrorCode_SecKeyInvalid ErrorCode = 1000 //秘钥无效
ErrorCode_SecKey ErrorCode = 1001 //秘钥格式错误
@ -58,17 +59,18 @@ var (
ErrorCode_name = map[int32]string{
0: "Success",
10: "NoFindService",
11: "RpcFuncExecutionError",
12: "CacheReadError",
13: "SqlExecutionError",
14: "ReqParameterError",
15: "SignError",
16: "InsufficientPermissions",
17: "NoLogin",
18: "UserSessionNobeing",
21: "StateInvalid",
22: "DBError",
23: "SystemError",
11: "NoFindServiceHandleFunc",
12: "RpcFuncExecutionError",
13: "CacheReadError",
14: "SqlExecutionError",
15: "ReqParameterError",
16: "SignError",
17: "InsufficientPermissions",
18: "NoLogin",
19: "UserSessionNobeing",
20: "StateInvalid",
21: "DBError",
22: "SystemError",
1000: "SecKeyInvalid",
1001: "SecKey",
1100: "FriendNotSelf",
@ -86,17 +88,18 @@ var (
ErrorCode_value = map[string]int32{
"Success": 0,
"NoFindService": 10,
"RpcFuncExecutionError": 11,
"CacheReadError": 12,
"SqlExecutionError": 13,
"ReqParameterError": 14,
"SignError": 15,
"InsufficientPermissions": 16,
"NoLogin": 17,
"UserSessionNobeing": 18,
"StateInvalid": 21,
"DBError": 22,
"SystemError": 23,
"NoFindServiceHandleFunc": 11,
"RpcFuncExecutionError": 12,
"CacheReadError": 13,
"SqlExecutionError": 14,
"ReqParameterError": 15,
"SignError": 16,
"InsufficientPermissions": 17,
"NoLogin": 18,
"UserSessionNobeing": 19,
"StateInvalid": 20,
"DBError": 21,
"SystemError": 22,
"SecKeyInvalid": 1000,
"SecKey": 1001,
"FriendNotSelf": 1100,
@ -144,42 +147,43 @@ var File_errorcode_proto protoreflect.FileDescriptor
var file_errorcode_proto_rawDesc = []byte{
0x0a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72, 0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74,
0x6f, 0x2a, 0x9d, 0x04, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x6f, 0x2a, 0xba, 0x04, 0x0a, 0x09, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x12,
0x0b, 0x0a, 0x07, 0x53, 0x75, 0x63, 0x63, 0x65, 0x73, 0x73, 0x10, 0x00, 0x12, 0x11, 0x0a, 0x0d,
0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65, 0x10, 0x0a, 0x12,
0x19, 0x0a, 0x15, 0x52, 0x70, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74,
0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0b, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61,
0x63, 0x68, 0x65, 0x52, 0x65, 0x61, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0c, 0x12, 0x15,
0x0a, 0x11, 0x53, 0x71, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72,
0x72, 0x6f, 0x72, 0x10, 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x50, 0x61, 0x72, 0x61,
0x6d, 0x65, 0x74, 0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0e, 0x12, 0x0d, 0x0a, 0x09,
0x53, 0x69, 0x67, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0f, 0x12, 0x1b, 0x0a, 0x17, 0x49,
0x6e, 0x73, 0x75, 0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69,
0x73, 0x73, 0x69, 0x6f, 0x6e, 0x73, 0x10, 0x10, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x6f, 0x4c, 0x6f,
0x67, 0x69, 0x6e, 0x10, 0x11, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73,
0x73, 0x69, 0x6f, 0x6e, 0x4e, 0x6f, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x10, 0x12, 0x12, 0x10, 0x0a,
0x0c, 0x53, 0x74, 0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x15, 0x12,
0x0b, 0x0a, 0x07, 0x44, 0x42, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x16, 0x12, 0x0f, 0x0a, 0x0b,
0x53, 0x79, 0x73, 0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x17, 0x12, 0x12, 0x0a,
0x0d, 0x53, 0x65, 0x63, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0xe8,
0x07, 0x12, 0x0b, 0x0a, 0x06, 0x53, 0x65, 0x63, 0x4b, 0x65, 0x79, 0x10, 0xe9, 0x07, 0x12, 0x12,
0x0a, 0x0d, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x10,
0xcc, 0x08, 0x12, 0x12, 0x0a, 0x0d, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66,
0x4d, 0x61, 0x78, 0x10, 0xcd, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64,
0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x10, 0xce, 0x08, 0x12, 0x15, 0x0a, 0x10,
0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61,
0x10, 0xcf, 0x08, 0x12, 0x17, 0x0a, 0x12, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72,
0x67, 0x65, 0x74, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x10, 0xd0, 0x08, 0x12, 0x0e, 0x0a, 0x09,
0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x59, 0x65, 0x74, 0x10, 0xd1, 0x08, 0x12, 0x13, 0x0a, 0x0e,
0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x59, 0x65, 0x74, 0x10, 0xd2,
0x08, 0x12, 0x17, 0x0a, 0x12, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x42,
0x6c, 0x61, 0x63, 0x6b, 0x59, 0x65, 0x74, 0x10, 0xd3, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x46, 0x72,
0x69, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x59,
0x65, 0x74, 0x10, 0xd4, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x41,
0x70, 0x70, 0x6c, 0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xd5, 0x08, 0x12, 0x13, 0x0a, 0x0e,
0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x10, 0xd6,
0x08, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f,
0x33,
0x1b, 0x0a, 0x17, 0x4e, 0x6f, 0x46, 0x69, 0x6e, 0x64, 0x53, 0x65, 0x72, 0x76, 0x69, 0x63, 0x65,
0x48, 0x61, 0x6e, 0x64, 0x6c, 0x65, 0x46, 0x75, 0x6e, 0x63, 0x10, 0x0b, 0x12, 0x19, 0x0a, 0x15,
0x52, 0x70, 0x63, 0x46, 0x75, 0x6e, 0x63, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e,
0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0c, 0x12, 0x12, 0x0a, 0x0e, 0x43, 0x61, 0x63, 0x68, 0x65,
0x52, 0x65, 0x61, 0x64, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0d, 0x12, 0x15, 0x0a, 0x11, 0x53,
0x71, 0x6c, 0x45, 0x78, 0x65, 0x63, 0x75, 0x74, 0x69, 0x6f, 0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72,
0x10, 0x0e, 0x12, 0x15, 0x0a, 0x11, 0x52, 0x65, 0x71, 0x50, 0x61, 0x72, 0x61, 0x6d, 0x65, 0x74,
0x65, 0x72, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x0f, 0x12, 0x0d, 0x0a, 0x09, 0x53, 0x69, 0x67,
0x6e, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x10, 0x12, 0x1b, 0x0a, 0x17, 0x49, 0x6e, 0x73, 0x75,
0x66, 0x66, 0x69, 0x63, 0x69, 0x65, 0x6e, 0x74, 0x50, 0x65, 0x72, 0x6d, 0x69, 0x73, 0x73, 0x69,
0x6f, 0x6e, 0x73, 0x10, 0x11, 0x12, 0x0b, 0x0a, 0x07, 0x4e, 0x6f, 0x4c, 0x6f, 0x67, 0x69, 0x6e,
0x10, 0x12, 0x12, 0x16, 0x0a, 0x12, 0x55, 0x73, 0x65, 0x72, 0x53, 0x65, 0x73, 0x73, 0x69, 0x6f,
0x6e, 0x4e, 0x6f, 0x62, 0x65, 0x69, 0x6e, 0x67, 0x10, 0x13, 0x12, 0x10, 0x0a, 0x0c, 0x53, 0x74,
0x61, 0x74, 0x65, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0x14, 0x12, 0x0b, 0x0a, 0x07,
0x44, 0x42, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x15, 0x12, 0x0f, 0x0a, 0x0b, 0x53, 0x79, 0x73,
0x74, 0x65, 0x6d, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0x16, 0x12, 0x12, 0x0a, 0x0d, 0x53, 0x65,
0x63, 0x4b, 0x65, 0x79, 0x49, 0x6e, 0x76, 0x61, 0x6c, 0x69, 0x64, 0x10, 0xe8, 0x07, 0x12, 0x0b,
0x0a, 0x06, 0x53, 0x65, 0x63, 0x4b, 0x65, 0x79, 0x10, 0xe9, 0x07, 0x12, 0x12, 0x0a, 0x0d, 0x46,
0x72, 0x69, 0x65, 0x6e, 0x64, 0x4e, 0x6f, 0x74, 0x53, 0x65, 0x6c, 0x66, 0x10, 0xcc, 0x08, 0x12,
0x12, 0x0a, 0x0d, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x4d, 0x61, 0x78,
0x10, 0xcd, 0x08, 0x12, 0x14, 0x0a, 0x0f, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72,
0x67, 0x65, 0x74, 0x4d, 0x61, 0x78, 0x10, 0xce, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x46, 0x72, 0x69,
0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x10, 0xcf, 0x08,
0x12, 0x17, 0x0a, 0x12, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74,
0x4e, 0x6f, 0x44, 0x61, 0x74, 0x61, 0x10, 0xd0, 0x08, 0x12, 0x0e, 0x0a, 0x09, 0x46, 0x72, 0x69,
0x65, 0x6e, 0x64, 0x59, 0x65, 0x74, 0x10, 0xd1, 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x46, 0x72, 0x69,
0x65, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x6c, 0x79, 0x59, 0x65, 0x74, 0x10, 0xd2, 0x08, 0x12, 0x17,
0x0a, 0x12, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x53, 0x65, 0x6c, 0x66, 0x42, 0x6c, 0x61, 0x63,
0x6b, 0x59, 0x65, 0x74, 0x10, 0xd3, 0x08, 0x12, 0x19, 0x0a, 0x14, 0x46, 0x72, 0x69, 0x65, 0x6e,
0x64, 0x54, 0x61, 0x72, 0x67, 0x65, 0x74, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x59, 0x65, 0x74, 0x10,
0xd4, 0x08, 0x12, 0x15, 0x0a, 0x10, 0x46, 0x72, 0x69, 0x65, 0x6e, 0x64, 0x41, 0x70, 0x70, 0x6c,
0x79, 0x45, 0x72, 0x72, 0x6f, 0x72, 0x10, 0xd5, 0x08, 0x12, 0x13, 0x0a, 0x0e, 0x46, 0x72, 0x69,
0x65, 0x6e, 0x64, 0x42, 0x6c, 0x61, 0x63, 0x6b, 0x4d, 0x61, 0x78, 0x10, 0xd6, 0x08, 0x42, 0x06,
0x5a, 0x04, 0x2e, 0x3b, 0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (

View File

@ -25,10 +25,10 @@ type DB_FriendData struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId" bson:"_id"` // ID
FriendIds []string `protobuf:"bytes,2,rep,name=friendIds,proto3" json:"friendIds"` //好友ID
ApplyIds []string `protobuf:"bytes,3,rep,name=applyIds,proto3" json:"applyIds"` //申请用户ID
BlackIds []string `protobuf:"bytes,4,rep,name=blackIds,proto3" json:"blackIds"` //黑名单ID
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty" bson:"_id"` // ID
FriendIds []string `protobuf:"bytes,2,rep,name=friendIds,proto3" json:"friendIds,omitempty"` //好友ID
ApplyIds []string `protobuf:"bytes,3,rep,name=applyIds,proto3" json:"applyIds,omitempty"` //申请用户ID
BlackIds []string `protobuf:"bytes,4,rep,name=blackIds,proto3" json:"blackIds,omitempty"` //黑名单ID
}
func (x *DB_FriendData) Reset() {

View File

@ -25,13 +25,13 @@ type FriendBase struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId"` //ID
NickName string `protobuf:"bytes,2,opt,name=NickName,proto3" json:"NickName"` //昵称
Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level"` //等级
Avatar int32 `protobuf:"varint,4,opt,name=avatar,proto3" json:"avatar"` //头像
Strength int64 `protobuf:"varint,5,opt,name=strength,proto3" json:"strength"` //战力
ServerId int32 `protobuf:"varint,6,opt,name=serverId,proto3" json:"serverId"` //服务编号
OfflineTime int64 `protobuf:"varint,7,opt,name=offlineTime,proto3" json:"offlineTime"` //最近一次下线时间 0在线
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` //ID
NickName string `protobuf:"bytes,2,opt,name=NickName,proto3" json:"NickName,omitempty"` //昵称
Level int32 `protobuf:"varint,3,opt,name=level,proto3" json:"level,omitempty"` //等级
Avatar int32 `protobuf:"varint,4,opt,name=avatar,proto3" json:"avatar,omitempty"` //头像
Strength int64 `protobuf:"varint,5,opt,name=strength,proto3" json:"strength,omitempty"` //战力
ServerId int32 `protobuf:"varint,6,opt,name=serverId,proto3" json:"serverId,omitempty"` //服务编号
OfflineTime int64 `protobuf:"varint,7,opt,name=offlineTime,proto3" json:"offlineTime,omitempty"` //最近一次下线时间 0在线
}
func (x *FriendBase) Reset() {
@ -159,7 +159,7 @@ type FriendListRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
List []*FriendBase `protobuf:"bytes,1,rep,name=list,proto3" json:"list"`
List []*FriendBase `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
}
func (x *FriendListRsp) Reset() {
@ -207,7 +207,7 @@ type FriendApplyReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"` //好友ID
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"` //好友ID
}
func (x *FriendApplyReq) Reset() {
@ -254,8 +254,8 @@ type FriendApplyRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId"` //用户ID
FriendId string `protobuf:"bytes,2,opt,name=friendId,proto3" json:"friendId"` //好友ID
UserId string `protobuf:"bytes,1,opt,name=userId,proto3" json:"userId,omitempty"` //用户ID
FriendId string `protobuf:"bytes,2,opt,name=friendId,proto3" json:"friendId,omitempty"` //好友ID
}
func (x *FriendApplyRsp) Reset() {
@ -310,7 +310,7 @@ type FriendDelReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"` //好友ID
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"` //好友ID
}
func (x *FriendDelReq) Reset() {
@ -357,8 +357,8 @@ type FriendDelRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"` //好友ID
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId"` //用户ID
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"` //好友ID
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"` //用户ID
}
func (x *FriendDelRsp) Reset() {
@ -413,7 +413,7 @@ type FriendAgreeReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendIds []string `protobuf:"bytes,1,rep,name=friendIds,proto3" json:"friendIds"` //被同意的用户
FriendIds []string `protobuf:"bytes,1,rep,name=friendIds,proto3" json:"friendIds,omitempty"` //被同意的用户
}
func (x *FriendAgreeReq) Reset() {
@ -460,7 +460,7 @@ type FriendAgreeRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num"` //操作的数量
Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num,omitempty"` //操作的数量
}
func (x *FriendAgreeRsp) Reset() {
@ -508,7 +508,7 @@ type FriendRefuseReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendIds []string `protobuf:"bytes,1,rep,name=friendIds,proto3" json:"friendIds"` //被拒绝的用户
FriendIds []string `protobuf:"bytes,1,rep,name=friendIds,proto3" json:"friendIds,omitempty"` //被拒绝的用户
}
func (x *FriendRefuseReq) Reset() {
@ -555,7 +555,7 @@ type FriendRefuseRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num"` //操作的数量
Num int32 `protobuf:"varint,1,opt,name=Num,proto3" json:"Num,omitempty"` //操作的数量
}
func (x *FriendRefuseRsp) Reset() {
@ -641,7 +641,7 @@ type FriendApplyListRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
List []*FriendBase `protobuf:"bytes,1,rep,name=list,proto3" json:"list"`
List []*FriendBase `protobuf:"bytes,1,rep,name=list,proto3" json:"list,omitempty"`
}
func (x *FriendApplyListRsp) Reset() {
@ -689,7 +689,7 @@ type FriendSearchReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
NickName string `protobuf:"bytes,1,opt,name=nickName,proto3" json:"nickName"` //好友昵称
NickName string `protobuf:"bytes,1,opt,name=nickName,proto3" json:"nickName,omitempty"` //好友昵称
}
func (x *FriendSearchReq) Reset() {
@ -736,7 +736,7 @@ type FriendSearchRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Friend *FriendBase `protobuf:"bytes,1,opt,name=friend,proto3" json:"friend"`
Friend *FriendBase `protobuf:"bytes,1,opt,name=friend,proto3" json:"friend,omitempty"`
}
func (x *FriendSearchRsp) Reset() {
@ -822,7 +822,7 @@ type FriendBlackListRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Friends []*FriendBase `protobuf:"bytes,1,rep,name=friends,proto3" json:"friends"`
Friends []*FriendBase `protobuf:"bytes,1,rep,name=friends,proto3" json:"friends,omitempty"`
}
func (x *FriendBlackListRsp) Reset() {
@ -870,7 +870,7 @@ type FriendBlackAddReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
}
func (x *FriendBlackAddReq) Reset() {
@ -917,8 +917,8 @@ type FriendBlackAddRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
}
func (x *FriendBlackAddRsp) Reset() {
@ -973,7 +973,7 @@ type FriendDelBlackReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
}
func (x *FriendDelBlackReq) Reset() {
@ -1020,8 +1020,8 @@ type FriendDelBlackRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
}
func (x *FriendDelBlackRsp) Reset() {
@ -1076,7 +1076,7 @@ type FriendReceiveReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
}
func (x *FriendReceiveReq) Reset() {
@ -1123,8 +1123,8 @@ type FriendReceiveRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
}
func (x *FriendReceiveRsp) Reset() {
@ -1179,7 +1179,7 @@ type FriendGiveReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
}
func (x *FriendGiveReq) Reset() {
@ -1226,8 +1226,8 @@ type FriendGiveRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
UserId string `protobuf:"bytes,2,opt,name=userId,proto3" json:"userId,omitempty"`
}
func (x *FriendGiveRsp) Reset() {
@ -1282,7 +1282,7 @@ type FriendTotalReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
}
func (x *FriendTotalReq) Reset() {
@ -1329,8 +1329,8 @@ type FriendTotalRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId"`
Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total"` //好友数量
FriendId string `protobuf:"bytes,1,opt,name=friendId,proto3" json:"friendId,omitempty"`
Total int32 `protobuf:"varint,2,opt,name=total,proto3" json:"total,omitempty"` //好友数量
}
func (x *FriendTotalRsp) Reset() {

View File

@ -25,8 +25,8 @@ type MailAttachment struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ItemId uint32 `protobuf:"varint,1,opt,name=ItemId,proto3" json:"ItemId"` // 道具iD
ItemCount uint32 `protobuf:"varint,2,opt,name=ItemCount,proto3" json:"ItemCount"` // 数量
ItemId uint32 `protobuf:"varint,1,opt,name=ItemId,proto3" json:"ItemId,omitempty"` // 道具iD
ItemCount uint32 `protobuf:"varint,2,opt,name=ItemCount,proto3" json:"ItemCount,omitempty"` // 数量
}
func (x *MailAttachment) Reset() {
@ -80,15 +80,15 @@ type DB_MailData struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ObjId string `protobuf:"bytes,1,opt,name=ObjId,proto3" json:"ObjId" bson:"_id"` // ID
UserId string `protobuf:"bytes,2,opt,name=UserId,proto3" json:"UserId"`
Title string `protobuf:"bytes,3,opt,name=Title,proto3" json:"Title"` // 邮件标题
Contex string `protobuf:"bytes,4,opt,name=Contex,proto3" json:"Contex"` // 邮件内容
CreateTime uint64 `protobuf:"varint,5,opt,name=CreateTime,proto3" json:"CreateTime"` // 发送时间
DueTime uint64 `protobuf:"varint,6,opt,name=DueTime,proto3" json:"DueTime"` // 过期时间
Check bool `protobuf:"varint,7,opt,name=Check,proto3" json:"Check"` // 是否查看
Reward bool `protobuf:"varint,8,opt,name=Reward,proto3" json:"Reward"` // 附件领取状态
Items []*MailAttachment `protobuf:"bytes,9,rep,name=Items,proto3" json:"Items"` // 附件
ObjId string `protobuf:"bytes,1,opt,name=ObjId,proto3" json:"ObjId,omitempty" bson:"_id"` // ID
UserId string `protobuf:"bytes,2,opt,name=UserId,proto3" json:"UserId,omitempty"`
Title string `protobuf:"bytes,3,opt,name=Title,proto3" json:"Title,omitempty"` // 邮件标题
Contex string `protobuf:"bytes,4,opt,name=Contex,proto3" json:"Contex,omitempty"` // 邮件内容
CreateTime uint64 `protobuf:"varint,5,opt,name=CreateTime,proto3" json:"CreateTime,omitempty"` // 发送时间
DueTime uint64 `protobuf:"varint,6,opt,name=DueTime,proto3" json:"DueTime,omitempty"` // 过期时间
Check bool `protobuf:"varint,7,opt,name=Check,proto3" json:"Check,omitempty"` // 是否查看
Reward bool `protobuf:"varint,8,opt,name=Reward,proto3" json:"Reward,omitempty"` // 附件领取状态
Items []*MailAttachment `protobuf:"bytes,9,rep,name=Items,proto3" json:"Items,omitempty"` // 附件
}
func (x *DB_MailData) Reset() {

View File

@ -64,7 +64,7 @@ type QueryUserMailResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Mails []*DB_MailData `protobuf:"bytes,1,rep,name=Mails,proto3" json:"Mails"`
Mails []*DB_MailData `protobuf:"bytes,1,rep,name=Mails,proto3" json:"Mails,omitempty"`
}
func (x *QueryUserMailResp) Reset() {
@ -112,7 +112,7 @@ type ReadUserMailReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID"`
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID,omitempty"`
}
func (x *ReadUserMailReq) Reset() {
@ -159,7 +159,7 @@ type ReadUserMailResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Mail *DB_MailData `protobuf:"bytes,1,opt,name=Mail,proto3" json:"Mail"`
Mail *DB_MailData `protobuf:"bytes,1,opt,name=Mail,proto3" json:"Mail,omitempty"`
}
func (x *ReadUserMailResp) Reset() {
@ -207,7 +207,7 @@ type GetUserMailAttachmentReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID"`
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID,omitempty"`
}
func (x *GetUserMailAttachmentReq) Reset() {
@ -254,7 +254,7 @@ type GetUserMailAttachmentResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Mail *DB_MailData `protobuf:"bytes,1,opt,name=Mail,proto3" json:"Mail"`
Mail *DB_MailData `protobuf:"bytes,1,opt,name=Mail,proto3" json:"Mail,omitempty"`
}
func (x *GetUserMailAttachmentResp) Reset() {
@ -302,7 +302,7 @@ type DelUserMailReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID"`
ObjID string `protobuf:"bytes,1,opt,name=ObjID,proto3" json:"ObjID,omitempty"`
}
func (x *DelUserMailReq) Reset() {
@ -349,7 +349,7 @@ type DelUserMailResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Mail []*DB_MailData `protobuf:"bytes,1,rep,name=Mail,proto3" json:"Mail"`
Mail []*DB_MailData `protobuf:"bytes,1,rep,name=Mail,proto3" json:"Mail,omitempty"`
}
func (x *DelUserMailResp) Reset() {

186
pb/notify_msg.pb.go Normal file
View File

@ -0,0 +1,186 @@
// Code generated by protoc-gen-go. DO NOT EDIT.
// versions:
// protoc-gen-go v1.28.0
// protoc v3.20.0
// source: notify/notify_msg.proto
package pb
import (
protoreflect "google.golang.org/protobuf/reflect/protoreflect"
protoimpl "google.golang.org/protobuf/runtime/protoimpl"
reflect "reflect"
sync "sync"
)
const (
// Verify that this generated code is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(20 - protoimpl.MinVersion)
// Verify that runtime/protoimpl is sufficiently up-to-date.
_ = protoimpl.EnforceVersion(protoimpl.MaxVersion - 20)
)
//统一错误码返回
type ErrorNotify struct {
state protoimpl.MessageState
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
ReqMainType string `protobuf:"bytes,1,opt,name=ReqMainType,proto3" json:"ReqMainType,omitempty"` // 请求协议模块 模块名 例如:user 对应项目中 user的模块
ReqSubType string `protobuf:"bytes,2,opt,name=ReqSubType,proto3" json:"ReqSubType,omitempty"` // 请求协议函数 例如:login 对应项目中 user的模块中 api_login 的处理函数
Code ErrorCode `protobuf:"varint,3,opt,name=Code,proto3,enum=ErrorCode" json:"Code,omitempty"` // 执行返回错误码 对应 errorcode.proto 枚举
Message string `protobuf:"bytes,4,opt,name=Message,proto3" json:"Message,omitempty"` // 错误消息
Data string `protobuf:"bytes,6,opt,name=Data,proto3" json:"Data,omitempty"` // 错误数据
}
func (x *ErrorNotify) Reset() {
*x = ErrorNotify{}
if protoimpl.UnsafeEnabled {
mi := &file_notify_notify_msg_proto_msgTypes[0]
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
ms.StoreMessageInfo(mi)
}
}
func (x *ErrorNotify) String() string {
return protoimpl.X.MessageStringOf(x)
}
func (*ErrorNotify) ProtoMessage() {}
func (x *ErrorNotify) ProtoReflect() protoreflect.Message {
mi := &file_notify_notify_msg_proto_msgTypes[0]
if protoimpl.UnsafeEnabled && x != nil {
ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x))
if ms.LoadMessageInfo() == nil {
ms.StoreMessageInfo(mi)
}
return ms
}
return mi.MessageOf(x)
}
// Deprecated: Use ErrorNotify.ProtoReflect.Descriptor instead.
func (*ErrorNotify) Descriptor() ([]byte, []int) {
return file_notify_notify_msg_proto_rawDescGZIP(), []int{0}
}
func (x *ErrorNotify) GetReqMainType() string {
if x != nil {
return x.ReqMainType
}
return ""
}
func (x *ErrorNotify) GetReqSubType() string {
if x != nil {
return x.ReqSubType
}
return ""
}
func (x *ErrorNotify) GetCode() ErrorCode {
if x != nil {
return x.Code
}
return ErrorCode_Success
}
func (x *ErrorNotify) GetMessage() string {
if x != nil {
return x.Message
}
return ""
}
func (x *ErrorNotify) GetData() string {
if x != nil {
return x.Data
}
return ""
}
var File_notify_notify_msg_proto protoreflect.FileDescriptor
var file_notify_notify_msg_proto_rawDesc = []byte{
0x0a, 0x17, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x2f, 0x6e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x5f,
0x6d, 0x73, 0x67, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x1a, 0x0f, 0x65, 0x72, 0x72, 0x6f, 0x72,
0x63, 0x6f, 0x64, 0x65, 0x2e, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x22, 0x9d, 0x01, 0x0a, 0x0b, 0x45,
0x72, 0x72, 0x6f, 0x72, 0x4e, 0x6f, 0x74, 0x69, 0x66, 0x79, 0x12, 0x20, 0x0a, 0x0b, 0x52, 0x65,
0x71, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x18, 0x01, 0x20, 0x01, 0x28, 0x09, 0x52,
0x0b, 0x52, 0x65, 0x71, 0x4d, 0x61, 0x69, 0x6e, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x0a,
0x52, 0x65, 0x71, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x18, 0x02, 0x20, 0x01, 0x28, 0x09,
0x52, 0x0a, 0x52, 0x65, 0x71, 0x53, 0x75, 0x62, 0x54, 0x79, 0x70, 0x65, 0x12, 0x1e, 0x0a, 0x04,
0x43, 0x6f, 0x64, 0x65, 0x18, 0x03, 0x20, 0x01, 0x28, 0x0e, 0x32, 0x0a, 0x2e, 0x45, 0x72, 0x72,
0x6f, 0x72, 0x43, 0x6f, 0x64, 0x65, 0x52, 0x04, 0x43, 0x6f, 0x64, 0x65, 0x12, 0x18, 0x0a, 0x07,
0x4d, 0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x18, 0x04, 0x20, 0x01, 0x28, 0x09, 0x52, 0x07, 0x4d,
0x65, 0x73, 0x73, 0x61, 0x67, 0x65, 0x12, 0x12, 0x0a, 0x04, 0x44, 0x61, 0x74, 0x61, 0x18, 0x06,
0x20, 0x01, 0x28, 0x09, 0x52, 0x04, 0x44, 0x61, 0x74, 0x61, 0x42, 0x06, 0x5a, 0x04, 0x2e, 0x3b,
0x70, 0x62, 0x62, 0x06, 0x70, 0x72, 0x6f, 0x74, 0x6f, 0x33,
}
var (
file_notify_notify_msg_proto_rawDescOnce sync.Once
file_notify_notify_msg_proto_rawDescData = file_notify_notify_msg_proto_rawDesc
)
func file_notify_notify_msg_proto_rawDescGZIP() []byte {
file_notify_notify_msg_proto_rawDescOnce.Do(func() {
file_notify_notify_msg_proto_rawDescData = protoimpl.X.CompressGZIP(file_notify_notify_msg_proto_rawDescData)
})
return file_notify_notify_msg_proto_rawDescData
}
var file_notify_notify_msg_proto_msgTypes = make([]protoimpl.MessageInfo, 1)
var file_notify_notify_msg_proto_goTypes = []interface{}{
(*ErrorNotify)(nil), // 0: ErrorNotify
(ErrorCode)(0), // 1: ErrorCode
}
var file_notify_notify_msg_proto_depIdxs = []int32{
1, // 0: ErrorNotify.Code:type_name -> ErrorCode
1, // [1:1] is the sub-list for method output_type
1, // [1:1] is the sub-list for method input_type
1, // [1:1] is the sub-list for extension type_name
1, // [1:1] is the sub-list for extension extendee
0, // [0:1] is the sub-list for field type_name
}
func init() { file_notify_notify_msg_proto_init() }
func file_notify_notify_msg_proto_init() {
if File_notify_notify_msg_proto != nil {
return
}
file_errorcode_proto_init()
if !protoimpl.UnsafeEnabled {
file_notify_notify_msg_proto_msgTypes[0].Exporter = func(v interface{}, i int) interface{} {
switch v := v.(*ErrorNotify); i {
case 0:
return &v.state
case 1:
return &v.sizeCache
case 2:
return &v.unknownFields
default:
return nil
}
}
}
type x struct{}
out := protoimpl.TypeBuilder{
File: protoimpl.DescBuilder{
GoPackagePath: reflect.TypeOf(x{}).PkgPath(),
RawDescriptor: file_notify_notify_msg_proto_rawDesc,
NumEnums: 0,
NumMessages: 1,
NumExtensions: 0,
NumServices: 0,
},
GoTypes: file_notify_notify_msg_proto_goTypes,
DependencyIndexes: file_notify_notify_msg_proto_depIdxs,
MessageInfos: file_notify_notify_msg_proto_msgTypes,
}.Build()
File_notify_notify_msg_proto = out.File
file_notify_notify_msg_proto_rawDesc = nil
file_notify_notify_msg_proto_goTypes = nil
file_notify_notify_msg_proto_depIdxs = nil
}

View File

@ -26,14 +26,14 @@ type DB_UserItemData struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GridId string `protobuf:"bytes,1,opt,name=GridId,proto3" json:"GridId"` //背包格子Id
UId string `protobuf:"bytes,2,opt,name=UId,proto3" json:"UId"` //用户id
IsEmpty bool `protobuf:"varint,3,opt,name=IsEmpty,proto3" json:"IsEmpty"` //是否是空格子
ItemId int32 `protobuf:"varint,4,opt,name=ItemId,proto3" json:"ItemId"` //存放物品的Id
Amount uint32 `protobuf:"varint,5,opt,name=Amount,proto3" json:"Amount"` //存放物品的数量
CTime int64 `protobuf:"varint,6,opt,name=CTime,proto3" json:"CTime"` //物品获取时间
ETime int64 `protobuf:"varint,7,opt,name=ETime,proto3" json:"ETime"` //物品过期时间
IsNewItem bool `protobuf:"varint,8,opt,name=IsNewItem,proto3" json:"IsNewItem"` //是否是新的
GridId string `protobuf:"bytes,1,opt,name=GridId,proto3" json:"GridId,omitempty"` //背包格子Id
UId string `protobuf:"bytes,2,opt,name=UId,proto3" json:"UId,omitempty"` //用户id
IsEmpty bool `protobuf:"varint,3,opt,name=IsEmpty,proto3" json:"IsEmpty,omitempty"` //是否是空格子
ItemId int32 `protobuf:"varint,4,opt,name=ItemId,proto3" json:"ItemId,omitempty"` //存放物品的Id
Amount uint32 `protobuf:"varint,5,opt,name=Amount,proto3" json:"Amount,omitempty"` //存放物品的数量
CTime int64 `protobuf:"varint,6,opt,name=CTime,proto3" json:"CTime,omitempty"` //物品获取时间
ETime int64 `protobuf:"varint,7,opt,name=ETime,proto3" json:"ETime,omitempty"` //物品过期时间
IsNewItem bool `protobuf:"varint,8,opt,name=IsNewItem,proto3" json:"IsNewItem,omitempty"` //是否是新的
}
func (x *DB_UserItemData) Reset() {

View File

@ -26,7 +26,7 @@ type GetlistReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
IType int32 `protobuf:"varint,1,opt,name=IType,proto3" json:"IType"` //道具类型
IType int32 `protobuf:"varint,1,opt,name=IType,proto3" json:"IType,omitempty"` //道具类型
}
func (x *GetlistReq) Reset() {
@ -74,7 +74,7 @@ type GetlistResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Grids []*DB_UserItemData `protobuf:"bytes,1,rep,name=Grids,proto3" json:"Grids"` //用户背包列表
Grids []*DB_UserItemData `protobuf:"bytes,1,rep,name=Grids,proto3" json:"Grids,omitempty"` //用户背包列表
}
func (x *GetlistResp) Reset() {
@ -122,9 +122,9 @@ type UseItemReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GridId int32 `protobuf:"varint,1,opt,name=GridId,proto3" json:"GridId"` //格子Id
ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId"` //物品Id
Amount uint32 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount"` //使用数量
GridId int32 `protobuf:"varint,1,opt,name=GridId,proto3" json:"GridId,omitempty"` //格子Id
ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId,omitempty"` //物品Id
Amount uint32 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"` //使用数量
}
func (x *UseItemReq) Reset() {
@ -225,9 +225,9 @@ type SellItemReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
GridId int32 `protobuf:"varint,1,opt,name=GridId,proto3" json:"GridId"` //格子Id
ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId"` //物品Id
Amount uint32 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount"` //使用数量
GridId int32 `protobuf:"varint,1,opt,name=GridId,proto3" json:"GridId,omitempty"` //格子Id
ItemId int32 `protobuf:"varint,2,opt,name=ItemId,proto3" json:"ItemId,omitempty"` //物品Id
Amount uint32 `protobuf:"varint,3,opt,name=Amount,proto3" json:"Amount,omitempty"` //使用数量
}
func (x *SellItemReq) Reset() {

View File

@ -5,10 +5,9 @@ import "google/protobuf/any.proto";
//
message UserMessage {
string MainType =1;
string SubType = 2;
ErrorCode Code = 3;
google.protobuf.Any data = 4;
string MainType =1; // :user user的模块
string SubType = 2; // :login user的模块中 api_login
google.protobuf.Any data = 3;
}
//
@ -24,7 +23,8 @@ message AgentMessage {
//RPC
message RPCMessageReply {
ErrorCode Code = 1;
string Msg = 2;
string Message = 2;
string Data = 3;
}
//Uid请求
@ -43,8 +43,7 @@ message AgentSendMessageReq {
string UserSessionId = 1;
string MainType = 2;
string SubType = 3;
ErrorCode Code = 4;
google.protobuf.Any Data = 5;
google.protobuf.Any Data = 4;
}
//

View File

@ -5,17 +5,18 @@ option go_package = ".;pb";
enum ErrorCode {
Success = 0; //
NoFindService = 10; //
RpcFuncExecutionError = 11; //Rpc方法执行错误
CacheReadError = 12; //
SqlExecutionError = 13; //
ReqParameterError = 14; //
SignError = 15; //
InsufficientPermissions = 16; //
NoLogin = 17; //
UserSessionNobeing = 18; //
StateInvalid = 21; //
DBError = 22; //
SystemError = 23; //
NoFindServiceHandleFunc = 11; //
RpcFuncExecutionError = 12; //Rpc方法执行错误
CacheReadError = 13; //
SqlExecutionError = 14; //
ReqParameterError = 15; //
SignError = 16; //
InsufficientPermissions = 17; //
NoLogin = 18; //
UserSessionNobeing = 19; //
StateInvalid = 20; //
DBError = 21; //
SystemError = 22; //
//user
SecKeyInvalid = 1000; //

View File

@ -0,0 +1,12 @@
syntax = "proto3";
option go_package = ".;pb";
import "errorcode.proto";
//
message ErrorNotify {
string ReqMainType =1; // :user user的模块
string ReqSubType = 2; // :login user的模块中 api_login
ErrorCode Code = 3; // errorcode.proto
string Message = 4; //
string Data = 6; //
}

View File

@ -25,9 +25,9 @@ type Cache_UserData struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid"`
SessionId string `protobuf:"bytes,2,opt,name=SessionId,proto3" json:"SessionId"`
GatewayServiceId string `protobuf:"bytes,3,opt,name=GatewayServiceId,proto3" json:"GatewayServiceId"` // DB_UserData UserData = 4;
Uid string `protobuf:"bytes,1,opt,name=uid,proto3" json:"uid,omitempty"`
SessionId string `protobuf:"bytes,2,opt,name=SessionId,proto3" json:"SessionId,omitempty"`
GatewayServiceId string `protobuf:"bytes,3,opt,name=GatewayServiceId,proto3" json:"GatewayServiceId,omitempty"` // DB_UserData UserData = 4;
}
func (x *Cache_UserData) Reset() {
@ -88,18 +88,18 @@ type DB_UserData struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" bson:"_id"` // ID
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid"`
Uuid string `protobuf:"bytes,3,opt,name=uuid,proto3" json:"uuid"` //玩家唯一uuid
Binduid string `protobuf:"bytes,4,opt,name=binduid,proto3" json:"binduid"` //玩家账号
Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name"` //玩家名
Sid int32 `protobuf:"varint,6,opt,name=sid,proto3" json:"sid"` //区服id
Createip string `protobuf:"bytes,7,opt,name=createip,proto3" json:"createip"` //创建账号时的ip
Lastloginip string `protobuf:"bytes,8,opt,name=lastloginip,proto3" json:"lastloginip"` //最后一次登录时的ip
Ctime int64 `protobuf:"varint,9,opt,name=ctime,proto3" json:"ctime"` //玩家创号时间戳
Logintime int64 `protobuf:"varint,10,opt,name=logintime,proto3" json:"logintime"` //最后一次登录时间
FriendPoint int32 `protobuf:"varint,11,opt,name=FriendPoint,proto3" json:"FriendPoint"` //友情点
Avatar int32 `protobuf:"varint,12,opt,name=avatar,proto3" json:"avatar"` //头像
Id string `protobuf:"bytes,1,opt,name=id,proto3" json:"id,omitempty" bson:"_id"` // ID
Uid string `protobuf:"bytes,2,opt,name=uid,proto3" json:"uid,omitempty"`
Uuid string `protobuf:"bytes,3,opt,name=uuid,proto3" json:"uuid,omitempty"` //玩家唯一uuid
Binduid string `protobuf:"bytes,4,opt,name=binduid,proto3" json:"binduid,omitempty"` //玩家账号
Name string `protobuf:"bytes,5,opt,name=name,proto3" json:"name,omitempty"` //玩家名
Sid int32 `protobuf:"varint,6,opt,name=sid,proto3" json:"sid,omitempty"` //区服id
Createip string `protobuf:"bytes,7,opt,name=createip,proto3" json:"createip,omitempty"` //创建账号时的ip
Lastloginip string `protobuf:"bytes,8,opt,name=lastloginip,proto3" json:"lastloginip,omitempty"` //最后一次登录时的ip
Ctime int64 `protobuf:"varint,9,opt,name=ctime,proto3" json:"ctime,omitempty"` //玩家创号时间戳
Logintime int64 `protobuf:"varint,10,opt,name=logintime,proto3" json:"logintime,omitempty"` //最后一次登录时间
FriendPoint int32 `protobuf:"varint,11,opt,name=FriendPoint,proto3" json:"FriendPoint,omitempty"` //友情点
Avatar int32 `protobuf:"varint,12,opt,name=avatar,proto3" json:"avatar,omitempty"` //头像
}
func (x *DB_UserData) Reset() {

View File

@ -26,7 +26,7 @@ type UserLoginReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Sec string `protobuf:"bytes,1,opt,name=sec,proto3" json:"sec"` //密文
Sec string `protobuf:"bytes,1,opt,name=sec,proto3" json:"sec,omitempty"` //密文
}
func (x *UserLoginReq) Reset() {
@ -73,7 +73,7 @@ type UserLoginResp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Data *Cache_UserData `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
Data *Cache_UserData `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (x *UserLoginResp) Reset() {
@ -120,7 +120,7 @@ type UserRegisterReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account"`
Account string `protobuf:"bytes,1,opt,name=account,proto3" json:"account,omitempty"`
}
func (x *UserRegisterReq) Reset() {
@ -167,8 +167,8 @@ type UserRegisterRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Code ErrorCode `protobuf:"varint,1,opt,name=Code,proto3,enum=ErrorCode" json:"Code"`
Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account"`
Code ErrorCode `protobuf:"varint,1,opt,name=Code,proto3,enum=ErrorCode" json:"Code,omitempty"`
Account string `protobuf:"bytes,2,opt,name=account,proto3" json:"account,omitempty"`
}
func (x *UserRegisterRsp) Reset() {
@ -222,7 +222,7 @@ type UserLoadRsp struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
Data *Cache_UserData `protobuf:"bytes,1,opt,name=data,proto3" json:"data"`
Data *Cache_UserData `protobuf:"bytes,1,opt,name=data,proto3" json:"data,omitempty"`
}
func (x *UserLoadRsp) Reset() {
@ -270,7 +270,7 @@ type UserCreateReq struct {
sizeCache protoimpl.SizeCache
unknownFields protoimpl.UnknownFields
NickName string `protobuf:"bytes,1,opt,name=NickName,proto3" json:"NickName"` //昵称
NickName string `protobuf:"bytes,1,opt,name=NickName,proto3" json:"NickName,omitempty"` //昵称
}
func (x *UserCreateReq) Reset() {

View File

@ -7,11 +7,14 @@ import (
"reflect"
"sync"
jsoniter "github.com/json-iterator/go"
"go_dreamfactory/lego/base"
"go_dreamfactory/lego/core"
"go_dreamfactory/lego/core/cbase"
"go_dreamfactory/lego/sys/event"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/lego/utils/codec"
"github.com/golang/protobuf/proto"
"github.com/golang/protobuf/ptypes"
@ -128,16 +131,32 @@ func (this *SComp_GateRouteComp) ReceiveMsg(ctx context.Context, args *pb.AgentM
}
returnValues := msgcheck.fn.Func.Call([]reflect.Value{msgcheck.rcvr, reflect.ValueOf(session), reflect.ValueOf(msg)})
// The return value for the method is an error.
code := returnValues[1].Int()
if pb.ErrorCode(code) != pb.ErrorCode_Success {
code := returnValues[1].Interface().(comm.ErrorCode)
if code.Code != pb.ErrorCode_Success {
log.Errorf("HandleUserMsg:%s msg:%v code:%d", args.Method, msg, code)
reply.Code = code.Code
reply.Message = pb.GetErrorCodeMsg(code.Code)
if code.Data != nil {
if d, err := jsoniter.Marshal(code.Data); err != nil {
log.Errorf("HandleUserMsg:%s msg:%v code:%d err:%v", args.Method, msg, code, err)
return nil
} else {
reply.Data = codec.BytesToString(d)
}
}
return nil
}
result := returnValues[0].Interface().(map[string]interface{})
msghandle.fn.Func.Call([]reflect.Value{msghandle.rcvr, reflect.ValueOf(session), reflect.ValueOf(result), reflect.ValueOf(msg)})
returnValues = msghandle.fn.Func.Call([]reflect.Value{msghandle.rcvr, reflect.ValueOf(session), reflect.ValueOf(result), reflect.ValueOf(msg)})
errcode := pb.ErrorCode(returnValues[1].Int())
if errcode != pb.ErrorCode_Success {
log.Errorf("HandleUserMsg:%s msg:%v code:%d", args.Method, msg, code)
reply.Code = errcode
reply.Message = pb.GetErrorCodeMsg(errcode)
return nil
}
} else {
reply.Code = pb.ErrorCode_ReqParameterError
// reply.Msg = pb.GetErrorCodeMsg(pb.ErrorCode_ReqParameterError)
}
return nil
}

102
sys/cache/init_test.go vendored
View File

@ -2,16 +2,19 @@ package cache_test
import (
"fmt"
"go_dreamfactory/comm"
"go_dreamfactory/lego/sys/log"
"go_dreamfactory/pb"
"go_dreamfactory/sys/cache"
"go_dreamfactory/sys/db"
"os"
"reflect"
"testing"
"time"
"go_dreamfactory/utils"
"github.com/stretchr/testify/require"
"go.mongodb.org/mongo-driver/bson"
"go.mongodb.org/mongo-driver/bson/primitive"
)
//测试环境下初始化db和cache 系统
@ -24,36 +27,68 @@ func TestMain(m *testing.M) {
fmt.Printf("err:%v\n", err)
return
}
// for i := 0; i < 50000; i++ {
// //go func() {
// _mail := &pb.DB_MailData{
// ObjId: primitive.NewObjectID().Hex(),
// UserId: "uid123",
// Title: "系统邮件",
for i := 0; i < 50000; i++ {
//go func() {
_mail := &pb.DB_MailData{
ObjId: primitive.NewObjectID().Hex(),
UserId: "uid123",
Title: "系统邮件",
// Contex: "恭喜获得专属礼包一份",
// CreateTime: uint64(time.Now().Unix()),
// DueTime: uint64(time.Now().Unix()) + 30*24*3600,
// Check: false,
// Reward: false,
// }
// //db.InsertModelLogs("mail", "uid123", _mail)
// //InsertModelLogs("mail", "uid123", _mail)
// data := &comm.Autogenerated{
// ID: primitive.NewObjectID().Hex(),
// UID: "uid123",
// Act: string(comm.LogHandleType_Insert),
// }
// data.D = append(data.D, "mail") // D[0]
// data.D = append(data.D, _mail) // D[1]
Contex: "恭喜获得专属礼包一份",
CreateTime: uint64(time.Now().Unix()),
DueTime: uint64(time.Now().Unix()) + 30*24*3600,
Check: false,
Reward: false,
}
//db.InsertModelLogs("mail", "uid123", _mail)
db.Defsys.Mgo().InsertOne("mail", _mail)
data := &comm.Autogenerated{
ID: primitive.NewObjectID().Hex(),
UID: "uid123",
Act: string(comm.LogHandleType_Insert),
}
data.D = append(data.D, "mail") // D[0]
data.D = append(data.D, _mail) // D[1]
// _, err1 := db.Defsys.Mgo().InsertOne("model_log", data)
// if err1 != nil {
// log.Errorf("insert model db err %v", err1)
// }
// //}()
// }
// time.Sleep(time.Second * 10)
_, err1 := db.Defsys.Mgo().InsertOne("model_log", data)
if err1 != nil {
log.Errorf("insert model db err %v", err1)
}
//}()
///////////////////////////////////////
filter := bson.M{
"userid": "uid123",
"title": "系统邮件",
}
var nd *pb.DB_MailData
err := db.Defsys.Mgo().FindOne("mail", filter).Decode(&nd)
if err == nil {
nd.Check = true
nd.Reward = true
data1 := &comm.Autogenerated{
ID: primitive.NewObjectID().Hex(),
UID: "uid123",
Act: string(comm.LogHandleType_Update),
}
filter1 := bson.M{
"userid": "uid123",
"title": "系统邮件",
}
data1.D = make([]interface{}, 0)
data1.D = append(data1.D, "mail") // D[0]
data1.D = append(data1.D, &filter1) // D[1]
data1.D = append(data1.D, nd) // D[2]
_, err = db.Defsys.Mgo().InsertOne("model_log", data1)
if err != nil {
log.Errorf("insert model db err %v", err)
}
}
}
time.Sleep(time.Second * 10)
defer os.Exit(m.Run())
@ -76,10 +111,3 @@ func TestSet(t *testing.T) {
cache.Redis().HMSet("friend:222", data)
}
func TestGet(t *testing.T) {
result, err := cache.Redis().HGetAll("111", reflect.TypeOf(map[string]interface{}{}))
require.Nil(t, err)
fmt.Println(result...)
}