Documentation
¶
Overview ¶
Copyright 2014 loolgame Author. All Rights Reserved.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
Package mqrpc rpc接口定义
Index ¶
- Variables
- func ArgToData(arg any) (string, []byte, error)
- func Bool(reply any, err error) (bool, error)
- func Bytes(reply any, err error) ([]byte, error)
- func ContextWithValue(ctx context.Context, key string, val any) context.Context
- func DataToArg(argType string, argData []byte) (any, error)
- func Float64(reply any, err error) (float64, error)
- func Int(reply any, err error) (int, error)
- func Int64(reply any, err error) (int64, error)
- func JsMap(reply any, err error) (map[string]any, error)
- func Marshal(pObj any, ret callResult) error
- func MsgPack(pObj any, ret callResult) error
- func RegTransContextKey(key string, makeFun func() Marshaler)
- func RpcResult(reply any, err error) callResult
- func String(reply any, err error) (string, error)
- type CallInfo
- type FunctionInfo
- type GoroutineControl
- type MQServer
- type Marshaler
- type ParamOption
- type RPCClient
- type RPCListener
- type RPCSerialize
- type RPCServer
Constants ¶
This section is empty.
Variables ¶
var ( NULL = "null" // nil null BOOL = "bool" // bool INT = "int" // int LONG = "long" // int64 FLOAT = "float" // float32 DOUBLE = "double" // float64 BYTES = "bytes" // []byte STRING = "string" // string JSMAP = "map" // map[string]any CONTEXT = "context" // context MARSHAL = "marshal" // mqrpc.Marshaler MSGPACK = "msgpack" // msgpack )
var ErrNil = errors.New("mqrpc: nil returned")
ErrNil ErrNil
Functions ¶
func Bytes ¶
Bytes is a helper that converts a command reply to a slice of bytes. If err is not equal to nil, then Bytes returns nil, err. Otherwise Bytes converts the reply to a slice of bytes as follows:
Reply type Result bulk string reply, nil simple string []byte(reply), nil nil nil, ErrNil other nil, error
func ContextWithValue ¶
使用此WithValue方法才能通过Context传递数据
func Float64 ¶
Float64 is a helper that converts a command reply to 64 bit float. If err is not equal to nil, then Float64 returns 0, err. Otherwise, Float64 converts the reply to an int as follows:
Reply type Result bulk string parsed reply, nil nil 0, ErrNil other 0, error
func Int64 ¶
Int64 is a helper that converts a command reply to 64 bit integer. If err is not equal to nil, then Int returns 0, err. Otherwise, Int64 converts the reply to an int64 as follows:
Reply type Result integer reply, nil bulk string parsed reply, nil nil 0, ErrNil other 0, error
func RegTransContextKey ¶
提前注册复合类型的Context val数据(基本类型不需要注册)
Types ¶
type CallInfo ¶
type CallInfo struct {
RPCInfo *core.RPCInfo
Result *core.ResultInfo
Props map[string]any
ExecTime int64
Agent MQServer //代理者 AMQPServer / LocalServer 都继承 Callback(callinfo CallInfo)(error) 方法
}
CallInfo RPC的请求信息
type FunctionInfo ¶
type FunctionInfo struct {
Function reflect.Value
FuncType reflect.Type
InType []reflect.Type
Goroutine bool
}
FunctionInfo handler接口信息
type GoroutineControl ¶
type GoroutineControl interface {
Wait() error
Finish()
}
GoroutineControl 服务协程数量控制
type Marshaler ¶
Marshaler is a simple encoding interface used for the broker/transport where headers are not supported by the underlying implementation.
type RPCClient ¶
type RPCClient interface {
Done() (err error)
Call(ctx context.Context, _func string, params ...any) (any, error)
CallArgs(ctx context.Context, _func string, argTypes []string, args [][]byte) (any, error) // ctx参数必须装进args中
CallNR(ctx context.Context, _func string, params ...any) (err error)
CallNRArgs(ctx context.Context, _func string, argTypes []string, args [][]byte) (err error) // ctx参数必须装进args中
}
RPCClient 客户端定义
type RPCListener ¶
type RPCListener interface {
/**
NoFoundFunction 当未找到请求的handler时会触发该方法
*FunctionInfo 选择可执行的handler
return error
*/
NoFoundFunction(fn string) (*FunctionInfo, error)
/**
BeforeHandle会对请求做一些前置处理,如:检查当前玩家是否已登录,打印统计日志等。
@session 可能为nil
return error 当error不为nil时将直接返回改错误信息而不会再执行后续调用
*/
BeforeHandle(fn string, callInfo *CallInfo) error
OnTimeOut(fn string, Expired int64)
OnError(fn string, callInfo *CallInfo, err error)
/**
fn 方法名
params 参数
result 执行结果
exec_time 方法执行时间 单位为 Nano 纳秒 1000000纳秒等于1毫秒
*/
OnComplete(fn string, callInfo *CallInfo, result *core.ResultInfo, execTime int64)
}
RPCListener 事件监听器
type RPCSerialize ¶
type RPCSerialize interface {
/**
序列化 结构体-->[]byte
param 需要序列化的参数值
@return ptype 当能够序列化这个值,并且正确解析为[]byte时 返回改值正确的类型,否则返回 ""即可
@return p 解析成功得到的数据, 如果无法解析该类型,或者解析失败 返回nil即可
@return err 无法解析该类型,或者解析失败 返回错误信息
*/
Serialize(param any) (ptype string, p []byte, err error)
/**
反序列化 []byte-->结构体
ptype 参数类型 与Serialize函数中ptype 对应
b 参数的字节流
@return param 解析成功得到的数据结构
@return err 无法解析该类型,或者解析失败 返回错误信息
*/
Deserialize(ptype string, b []byte) (param any, err error)
/**
返回这个接口能够处理的所有类型
*/
GetTypes() []string
}
RPCSerialize 自定义参数序列化接口
type RPCServer ¶
type RPCServer interface {
Addr() string
SetListener(listener RPCListener) // 设置监听器
SetGoroutineControl(control GoroutineControl)
GetExecuting() int64
Register(id string, f any) // 注册RPC方法,f第一个参数必须为context.Context(单线程)
RegisterGO(id string, f any) // 注册RPC方法,f第一个参数必须为context.Context(多线程)
Done() (err error)
}
RPCServer 服务定义