f5/httpclimgr.go
aozhiwei 9a0acf9f39 1
2023-08-14 13:20:34 +08:00

145 lines
2.7 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 f5
import (
"q5"
)
/*
http的请求分为两种风格
go style: go风格回调的时候不会join主线程被回调方需要处理线程同步问题
js style: js风格回调时候会自动join主线程被回调方无需处理线程同步问题
*/
const (
GO_STYLE_REQUEST = 1
JS_STYLE_REQUEST = 2
NORMAL_CHANNEL = 1
QUICK_CHANNEL = 2
)
type HttpCliResponse interface {
GetErr() error
GetJsonData() map[string]interface{}
GetRawData() string
IsTimeOut() bool
}
type httpCliResponse struct {
err error
data map[string]interface{}
rawData string
isTimeOut bool
}
type HttpCliMgr struct {
}
func (this *HttpCliMgr) init() {
_app.RegisterIMMsgHandle(
IM_HTTP_CLI_MGR_RESPONSE,
func (args q5.Args) {
cb := args[0].(func (HttpCliResponse))
rsp := args[1].(*httpCliResponse)
cb(rsp)
})
}
func (this *HttpCliMgr) unInit() {
}
func (this *HttpCliMgr) SendGoStyleRequest(
url string, params map[string]string,
cb func (HttpCliResponse)) {
this.internalSendRequest(
GO_STYLE_REQUEST,
NORMAL_CHANNEL,
url,
params,
cb)
}
func (this *HttpCliMgr) SendJsStyleRequest(
url string, params map[string]string,
cb func (HttpCliResponse)) {
this.internalSendRequest(
JS_STYLE_REQUEST,
NORMAL_CHANNEL,
url,
params,
cb)
}
func (this *HttpCliMgr) SendQuickChannelGoStyleRequest(
url string, params map[string]string,
cb func (HttpCliResponse)) {
this.internalSendRequest(
GO_STYLE_REQUEST,
QUICK_CHANNEL,
url,
params,
cb)
}
func (this *HttpCliMgr) SendQuickChannelJsStyleRequest(
url string, params map[string]string,
cb func (HttpCliResponse)) {
this.internalSendRequest(
JS_STYLE_REQUEST,
QUICK_CHANNEL,
url,
params,
cb)
}
func (this *HttpCliMgr) internalSendRequest(
style int32, channel int32,
url string, params map[string]string,
cb func (HttpCliResponse)) {
if !(style == GO_STYLE_REQUEST || style == JS_STYLE_REQUEST) {
panic("HttpCliMgr sytel error")
}
if !(channel == NORMAL_CHANNEL || channel == QUICK_CHANNEL) {
panic("HttpCliMgr channel error")
}
doFunc := func() {
data, err := q5.HttpGet(url, params)
if cb == nil {
return
}
rsp := new(httpCliResponse)
rsp.init(data, err)
if style == GO_STYLE_REQUEST {
cb(rsp)
} else {
_app.AddIMMsg(IM_HTTP_CLI_MGR_RESPONSE, []interface{} {
cb,
rsp,
})
}
}
go doFunc()
}
func (this *httpCliResponse) init(data string, err error) {
this.err = err
this.rawData = data
}
func (this *httpCliResponse) GetErr() error {
return this.err
}
func (this *httpCliResponse) GetJsonData() map[string]interface{} {
return this.data
}
func (this *httpCliResponse) GetRawData() string {
return this.rawData
}
func (this *httpCliResponse) IsTimeOut() bool {
return this.isTimeOut
}