1
This commit is contained in:
parent
1db5053277
commit
af8b118178
15
app.go
15
app.go
@ -17,7 +17,7 @@ type App interface {
|
|||||||
GetZoneId() int32
|
GetZoneId() int32
|
||||||
HasFlag(int32) bool
|
HasFlag(int32) bool
|
||||||
AddIMMsg(uint16, q5.Args)
|
AddIMMsg(uint16, q5.Args)
|
||||||
RegisterIMMsgHandle(uint16, func(uint16,q5.Args))
|
RegisterIMMsgHandle(uint16, func(q5.Args))
|
||||||
NotifyLoopCond()
|
NotifyLoopCond()
|
||||||
NowUnix() int64
|
NowUnix() int64
|
||||||
NowUnixMilli() int64
|
NowUnixMilli() int64
|
||||||
@ -35,7 +35,6 @@ type app struct {
|
|||||||
nodeId int32
|
nodeId int32
|
||||||
instanceId int32
|
instanceId int32
|
||||||
terminated bool
|
terminated bool
|
||||||
pkgName string
|
|
||||||
flags map[int32]int32
|
flags map[int32]int32
|
||||||
servicing bool
|
servicing bool
|
||||||
contextHash map[int32]q5.Args
|
contextHash map[int32]q5.Args
|
||||||
@ -48,7 +47,7 @@ type app struct {
|
|||||||
chGoLoopWait chan int64
|
chGoLoopWait chan int64
|
||||||
nowTime time.Time
|
nowTime time.Time
|
||||||
nowUnixNano int64
|
nowUnixNano int64
|
||||||
imMsgHandlers [1024]func(uint16, q5.Args)
|
imMsgHandlers [1024]func(q5.Args)
|
||||||
maxRunDelay int64
|
maxRunDelay int64
|
||||||
maxScheduleTime int64
|
maxScheduleTime int64
|
||||||
userApp UserApp
|
userApp UserApp
|
||||||
@ -127,11 +126,7 @@ func (this *app) GetZoneId() int32 {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (this *app) GetPkgName() string {
|
func (this *app) GetPkgName() string {
|
||||||
return this.pkgName
|
return this.userApp.GetPkgName()
|
||||||
}
|
|
||||||
|
|
||||||
func (this *app) setPkgName(pkgName string) {
|
|
||||||
this.pkgName = pkgName
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *app) HasFlag(flag int32) bool {
|
func (this *app) HasFlag(flag int32) bool {
|
||||||
@ -157,7 +152,7 @@ func (this *app) AddIMMsg(msgId uint16, params q5.Args) {
|
|||||||
this.loopCond.Broadcast()
|
this.loopCond.Broadcast()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (this *app) RegisterIMMsgHandle(msgId uint16, handle func(uint16,q5.Args)) {
|
func (this *app) RegisterIMMsgHandle(msgId uint16, handle func(q5.Args)) {
|
||||||
this.imMsgHandlers[msgId] = handle
|
this.imMsgHandlers[msgId] = handle
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -215,7 +210,7 @@ func (this *app) dispatchIMMsg() {
|
|||||||
currNode := this.imWorkNode
|
currNode := this.imWorkNode
|
||||||
this.imWorkNode = this.imWorkNode.next
|
this.imWorkNode = this.imWorkNode.next
|
||||||
if this.imMsgHandlers[currNode.msgId] != nil {
|
if this.imMsgHandlers[currNode.msgId] != nil {
|
||||||
this.imMsgHandlers[currNode.msgId](currNode.msgId, currNode.params)
|
this.imMsgHandlers[currNode.msgId](currNode.params)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
5
constant.go
Normal file
5
constant.go
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
package f5
|
||||||
|
|
||||||
|
const (
|
||||||
|
IM_HTTP_CLI_MGR_RESPONSE = 1
|
||||||
|
)
|
@ -4,6 +4,11 @@ var _app *app
|
|||||||
var _timer *Timer
|
var _timer *Timer
|
||||||
var _sysLog *SysLog_
|
var _sysLog *SysLog_
|
||||||
var _tgLog *TGLog_
|
var _tgLog *TGLog_
|
||||||
|
var _httpCliMgr *HttpCliMgr
|
||||||
|
|
||||||
|
func GetApp() App {
|
||||||
|
return _app
|
||||||
|
}
|
||||||
|
|
||||||
func GetTimer() *Timer {
|
func GetTimer() *Timer {
|
||||||
return _timer
|
return _timer
|
||||||
@ -17,8 +22,8 @@ func GetTgLog() *TGLog_ {
|
|||||||
return _tgLog
|
return _tgLog
|
||||||
}
|
}
|
||||||
|
|
||||||
func GetApp() App {
|
func GetHttpCliMgr() *HttpCliMgr {
|
||||||
return _app
|
return _httpCliMgr
|
||||||
}
|
}
|
||||||
|
|
||||||
func Run(userApp UserApp) {
|
func Run(userApp UserApp) {
|
||||||
|
144
httpclimgr.go
Normal file
144
httpclimgr.go
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
package f5
|
||||||
|
|
||||||
|
import (
|
||||||
|
"q5"
|
||||||
|
)
|
||||||
|
|
||||||
|
/*
|
||||||
|
http的请求分为两种风格
|
||||||
|
go like: go风格回调的时候不会join主线程,被回调方需要处理线程同步问题
|
||||||
|
js like: js风格回调时候会自动join主线程,被回调方无需处理线程同步问题
|
||||||
|
*/
|
||||||
|
|
||||||
|
const (
|
||||||
|
GO_LIKE_REQUEST = 1
|
||||||
|
JS_LIKE_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) SendGoLikeRequest(
|
||||||
|
url string, params map[string]string,
|
||||||
|
cb func (HttpCliResponse)) {
|
||||||
|
this.internalSendRequest(
|
||||||
|
GO_LIKE_REQUEST,
|
||||||
|
NORMAL_CHANNEL,
|
||||||
|
url,
|
||||||
|
params,
|
||||||
|
cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *HttpCliMgr) SendJsLikeRequest(
|
||||||
|
url string, params map[string]string,
|
||||||
|
cb func (HttpCliResponse)) {
|
||||||
|
this.internalSendRequest(
|
||||||
|
JS_LIKE_REQUEST,
|
||||||
|
NORMAL_CHANNEL,
|
||||||
|
url,
|
||||||
|
params,
|
||||||
|
cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *HttpCliMgr) SendQuickChannelGoLikeRequest(
|
||||||
|
url string, params map[string]string,
|
||||||
|
cb func (HttpCliResponse)) {
|
||||||
|
this.internalSendRequest(
|
||||||
|
GO_LIKE_REQUEST,
|
||||||
|
QUICK_CHANNEL,
|
||||||
|
url,
|
||||||
|
params,
|
||||||
|
cb)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *HttpCliMgr) SendQuickChannelJsLikeRequest(
|
||||||
|
url string, params map[string]string,
|
||||||
|
cb func (HttpCliResponse)) {
|
||||||
|
this.internalSendRequest(
|
||||||
|
JS_LIKE_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_LIKE_REQUEST || style == JS_LIKE_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_LIKE_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
|
||||||
|
}
|
89
prototils.go
Normal file
89
prototils.go
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
package f5
|
||||||
|
|
||||||
|
import (
|
||||||
|
"q5"
|
||||||
|
"net"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MsgHdr struct {
|
||||||
|
MsgId uint16
|
||||||
|
SeqId uint32
|
||||||
|
SocketHandle uint16
|
||||||
|
IpSaddr uint32
|
||||||
|
|
||||||
|
Conn net.Conn
|
||||||
|
Data []byte
|
||||||
|
Msg interface{}
|
||||||
|
Entry q5.ListHead
|
||||||
|
}
|
||||||
|
|
||||||
|
type NetMsg interface {
|
||||||
|
GetNetMsgId() uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
struct WSProxyPackHead_C
|
||||||
|
{
|
||||||
|
unsigned short packlen;
|
||||||
|
unsigned short msgid;
|
||||||
|
unsigned int seqid;
|
||||||
|
unsigned short magic_code;
|
||||||
|
|
||||||
|
unsigned short socket_handle;
|
||||||
|
unsigned long ip_saddr;
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
type WSProxyPackHead_C struct {
|
||||||
|
PackLen uint16
|
||||||
|
MsgId uint16
|
||||||
|
SeqId uint32
|
||||||
|
MagicCode uint16
|
||||||
|
SocketHandle uint16
|
||||||
|
|
||||||
|
IpSaddr uint64
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
struct WSProxyPackHead_S
|
||||||
|
{
|
||||||
|
unsigned short packlen;
|
||||||
|
unsigned short msgid;
|
||||||
|
unsigned int seqid;
|
||||||
|
unsigned short magic_code;
|
||||||
|
unsigned short rpc_error_code;
|
||||||
|
|
||||||
|
unsigned short socket_handle;
|
||||||
|
unsigned short ext_len;
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
type WSProxyPackHead_S struct {
|
||||||
|
PackLen uint16
|
||||||
|
MsgId uint16
|
||||||
|
SeqId uint32
|
||||||
|
MagicCode uint16
|
||||||
|
RpcErrCode uint16
|
||||||
|
|
||||||
|
SocketHandle uint16
|
||||||
|
ExtLen uint16
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *WSProxyPackHead_C) Read(data []byte, offset int) {
|
||||||
|
this.PackLen = q5.MkUInt16(data[offset + 0], data[offset + 1])
|
||||||
|
this.MsgId = q5.MkUInt16(data[offset + 2], data[offset + 3])
|
||||||
|
this.SeqId = q5.MkUInt32(data[offset + 4], data[offset + 5],
|
||||||
|
data[offset + 6], data[offset + 7])
|
||||||
|
this.MagicCode = q5.MkUInt16(data[offset + 8], data[offset + 9])
|
||||||
|
this.SocketHandle = q5.MkUInt16(data[offset + 10], data[offset + 11])
|
||||||
|
}
|
||||||
|
|
||||||
|
func (this *WSProxyPackHead_S) Write(data []byte, offset int) {
|
||||||
|
data[offset + 0] = byte(this.PackLen & 0xFF)
|
||||||
|
data[offset + 1] = byte(this.PackLen >> 8)
|
||||||
|
data[offset + 2] = byte(this.MsgId & 0xFF)
|
||||||
|
data[offset + 3] = byte(this.MsgId >> 8)
|
||||||
|
data[offset + 8] = byte('K')
|
||||||
|
data[offset + 9] = byte('S')
|
||||||
|
|
||||||
|
data[offset + 12] = byte(this.SocketHandle & 0xFF)
|
||||||
|
data[offset + 13] = byte(this.SocketHandle >> 8)
|
||||||
|
}
|
84
types.go
84
types.go
@ -2,7 +2,6 @@ package f5
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"q5"
|
"q5"
|
||||||
"net"
|
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
@ -28,86 +27,3 @@ type middleware struct {
|
|||||||
handlerFunc HandlerFunc
|
handlerFunc HandlerFunc
|
||||||
entry q5.ListHead
|
entry q5.ListHead
|
||||||
}
|
}
|
||||||
|
|
||||||
type MsgHdr struct {
|
|
||||||
MsgId uint16
|
|
||||||
SeqId uint32
|
|
||||||
SocketHandle uint16
|
|
||||||
IpSaddr uint32
|
|
||||||
|
|
||||||
Conn net.Conn
|
|
||||||
Data []byte
|
|
||||||
Msg interface{}
|
|
||||||
Entry q5.ListHead
|
|
||||||
}
|
|
||||||
|
|
||||||
type NetMsg interface {
|
|
||||||
GetNetMsgId() uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
struct WSProxyPackHead_C
|
|
||||||
{
|
|
||||||
unsigned short packlen;
|
|
||||||
unsigned short msgid;
|
|
||||||
unsigned int seqid;
|
|
||||||
unsigned short magic_code;
|
|
||||||
|
|
||||||
unsigned short socket_handle;
|
|
||||||
unsigned long ip_saddr;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
type WSProxyPackHead_C struct {
|
|
||||||
PackLen uint16
|
|
||||||
MsgId uint16
|
|
||||||
SeqId uint32
|
|
||||||
MagicCode uint16
|
|
||||||
SocketHandle uint16
|
|
||||||
|
|
||||||
IpSaddr uint64
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
struct WSProxyPackHead_S
|
|
||||||
{
|
|
||||||
unsigned short packlen;
|
|
||||||
unsigned short msgid;
|
|
||||||
unsigned int seqid;
|
|
||||||
unsigned short magic_code;
|
|
||||||
unsigned short rpc_error_code;
|
|
||||||
|
|
||||||
unsigned short socket_handle;
|
|
||||||
unsigned short ext_len;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
type WSProxyPackHead_S struct {
|
|
||||||
PackLen uint16
|
|
||||||
MsgId uint16
|
|
||||||
SeqId uint32
|
|
||||||
MagicCode uint16
|
|
||||||
RpcErrCode uint16
|
|
||||||
|
|
||||||
SocketHandle uint16
|
|
||||||
ExtLen uint16
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *WSProxyPackHead_C) Read(data []byte, offset int) {
|
|
||||||
this.PackLen = q5.MkUInt16(data[offset + 0], data[offset + 1])
|
|
||||||
this.MsgId = q5.MkUInt16(data[offset + 2], data[offset + 3])
|
|
||||||
this.SeqId = q5.MkUInt32(data[offset + 4], data[offset + 5],
|
|
||||||
data[offset + 6], data[offset + 7])
|
|
||||||
this.MagicCode = q5.MkUInt16(data[offset + 8], data[offset + 9])
|
|
||||||
this.SocketHandle = q5.MkUInt16(data[offset + 10], data[offset + 11])
|
|
||||||
}
|
|
||||||
|
|
||||||
func (this *WSProxyPackHead_S) Write(data []byte, offset int) {
|
|
||||||
data[offset + 0] = byte(this.PackLen & 0xFF)
|
|
||||||
data[offset + 1] = byte(this.PackLen >> 8)
|
|
||||||
data[offset + 2] = byte(this.MsgId & 0xFF)
|
|
||||||
data[offset + 3] = byte(this.MsgId >> 8)
|
|
||||||
data[offset + 8] = byte('K')
|
|
||||||
data[offset + 9] = byte('S')
|
|
||||||
|
|
||||||
data[offset + 12] = byte(this.SocketHandle & 0xFF)
|
|
||||||
data[offset + 13] = byte(this.SocketHandle >> 8)
|
|
||||||
}
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user