goProject/trunk/game/common/clientMgr/handleRequest.go
2025-01-15 17:36:12 +08:00

87 lines
2.3 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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)
}