goProject/trunk/game/common/server_http/server.go

72 lines
1.7 KiB
Go
Raw Normal View History

2025-01-15 17:36:12 +08:00
package server_http
import (
"encoding/json"
"net/http"
. "common/model"
"goutil/debugUtil"
"goutil/logUtil"
"goutil/webUtil"
)
// http服务对象
type httpServer struct{}
// http应答处理
// response:应答对象
// request:请求对象
func (this *httpServer) ServeHTTP(response http.ResponseWriter, request *http.Request) {
context := newContext(request, response)
responseObj := NewServerResponseObject()
defer func() {
if data := recover(); data != nil {
logUtil.LogUnknownError(data)
return
}
// 特殊路径进行特别处理
if request.URL.Path == "/" || request.URL.Path == "/favicon.ico" {
return
}
// 获取输入参数的字符串形式
parameter := ""
if len(request.Form) > 0 {
parameter_byte, _ := json.Marshal(request.Form)
parameter = string(parameter_byte)
}
// 记录日志
if debugUtil.IsDebug() || responseObj.ResultStatus != Success {
result, _ := json.Marshal(responseObj)
logUtil.DebugLog("%s-->IP:%s;Request:%v;Response:%s;", request.URL.Path, webUtil.GetRequestIP(request), parameter, string(result))
}
}()
// 特殊路径进行特别处理
if request.URL.Path == "/" || request.URL.Path == "/favicon.ico" {
context.WriteString("ok")
return
}
// 验证IP
if rs := context.checkIP(); rs != Success {
context.WriteJson(responseObj.SetResultStatus(rs))
return
}
var handler Handler
var exists bool
if handler, exists = getHandler(request.URL.Path); !exists {
logUtil.ErrorLog("访问的页面不存在RequestAddr: %s request.URL.Path: %s", request.RemoteAddr, request.URL.Path)
http.Error(response, "访问的页面不存在", 404)
return
}
// 调用处理方法,并返回结果
responseObj = handler(context)
context.WriteJson(responseObj)
}