87 lines
2.3 KiB
Go
87 lines
2.3 KiB
Go
|
|
package clientMgr
|
|||
|
|
|
|||
|
|
import (
|
|||
|
|
"encoding/json"
|
|||
|
|
|
|||
|
|
. "common/model"
|
|||
|
|
"goutil/debugUtil"
|
|||
|
|
"goutil/logUtil"
|
|||
|
|
)
|
|||
|
|
|
|||
|
|
// HandleRequest 处理客户端请求
|
|||
|
|
// clientObj:对应的客户端对象
|
|||
|
|
// request:请求内容字节数组(json格式)
|
|||
|
|
// 返回值:无
|
|||
|
|
func HandleRequest(clientObj IClient, request []byte) {
|
|||
|
|
responseObj := NewServerResponseObject()
|
|||
|
|
|
|||
|
|
defer func() {
|
|||
|
|
// 如果是客户端数据错误,则将客户端请求数据记录下来
|
|||
|
|
if responseObj.ResultStatus == ClientDataError {
|
|||
|
|
logUtil.ErrorLog("client:%s\n请求的数据为:%s, 返回的结果为客户端数据错误", clientObj, string(request))
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 调用发送消息接口
|
|||
|
|
clientObj.SendMessage(responseObj)
|
|||
|
|
|
|||
|
|
// 记录DEBUG日志
|
|||
|
|
if debugUtil.IsDebug() {
|
|||
|
|
result, _ := json.Marshal(responseObj)
|
|||
|
|
logUtil.DebugLog("client:%s\nRequest:%s\nResponse:%s", clientObj, string(request), string(result))
|
|||
|
|
}
|
|||
|
|
}()
|
|||
|
|
|
|||
|
|
// 解析请求字符串
|
|||
|
|
requestObj := new(ServerRequestObject)
|
|||
|
|
if err := json.Unmarshal(request, requestObj); err != nil {
|
|||
|
|
logUtil.ErrorLog("反序列化出错,字符串:%s,错误信息为:%s", string(request), err)
|
|||
|
|
responseObj.SetResultStatus(ClientDataError)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 为参数赋值
|
|||
|
|
responseObj.SetMethodName(requestObj.MethodName)
|
|||
|
|
|
|||
|
|
// 对参数要特殊处理:将Client、Player特殊处理
|
|||
|
|
parameters := make([]interface{}, 0)
|
|||
|
|
if requestObj.MethodName == "Login" {
|
|||
|
|
parameters = append(parameters, interface{}(clientObj))
|
|||
|
|
parameters = append(parameters, requestObj.Parameters...)
|
|||
|
|
} else {
|
|||
|
|
// 判断玩家是否已经登陆
|
|||
|
|
if clientObj.GetPlayerId() == 0 {
|
|||
|
|
responseObj.SetResultStatus(NoLogin)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 判断是否能找到玩家
|
|||
|
|
var playerObj *Player
|
|||
|
|
var exists bool
|
|||
|
|
var err error
|
|||
|
|
if getPlayerHandler == nil {
|
|||
|
|
panic("getPlayerHandler is nil, please set first")
|
|||
|
|
}
|
|||
|
|
playerObj, exists, err = getPlayerHandler(clientObj.GetPlayerId(), false)
|
|||
|
|
if err != nil {
|
|||
|
|
responseObj.SetResultStatus(DataError)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
if !exists {
|
|||
|
|
responseObj.SetResultStatus(NoLogin)
|
|||
|
|
return
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
parameters = append(parameters, interface{}(clientObj))
|
|||
|
|
parameters = append(parameters, interface{}(playerObj))
|
|||
|
|
parameters = append(parameters, requestObj.Parameters...)
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 为参数赋值
|
|||
|
|
requestObj.ModuleName = "Chat"
|
|||
|
|
requestObj.Parameters = parameters
|
|||
|
|
|
|||
|
|
// 调用方法
|
|||
|
|
responseObj = callFunction(requestObj)
|
|||
|
|
}
|