Impl websocket and change all http-get to http-post
This commit is contained in:
@@ -5,41 +5,48 @@ import (
|
||||
|
||||
"github.com/opentdp/go-helper/logman"
|
||||
"github.com/opentdp/go-helper/request"
|
||||
"golang.org/x/net/websocket"
|
||||
|
||||
"github.com/opentdp/wechat-rest/wcferry"
|
||||
)
|
||||
|
||||
var urlReceiverStat = false
|
||||
var urlReceiverKey = ""
|
||||
var urlReceiverList = map[string]bool{}
|
||||
|
||||
var socketReceiverKey = ""
|
||||
var socketReceiverList = map[*websocket.Conn]bool{}
|
||||
|
||||
func (wc *Controller) enableUrlReceiver(url string) error {
|
||||
|
||||
if !urlReceiverStat {
|
||||
err := wc.EnrollReceiver(true, func(msg *wcferry.WxMsg) {
|
||||
logman.Info("enable receiver", "url", url)
|
||||
|
||||
if urlReceiverKey == "" {
|
||||
key, err := wc.EnrollReceiver(true, func(msg *wcferry.WxMsg) {
|
||||
ret := wcferry.ParseWxMsg(msg)
|
||||
for url := range urlReceiverList {
|
||||
logman.Info("forward msg", "url", url, "Id", ret.Id)
|
||||
go request.JsonPost(url, ret, request.H{})
|
||||
for u := range urlReceiverList {
|
||||
logman.Info("call receiver", "url", u, "Id", ret.Id)
|
||||
go request.JsonPost(u, ret, request.H{})
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
urlReceiverKey = key
|
||||
}
|
||||
|
||||
if _, ok := urlReceiverList[url]; ok {
|
||||
return errors.New("url already exists")
|
||||
}
|
||||
|
||||
urlReceiverStat = true
|
||||
urlReceiverList[url] = true
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (wc *Controller) disableUrlReceiver(url string) error {
|
||||
|
||||
logman.Info("disable receiver", "url", url)
|
||||
|
||||
if _, ok := urlReceiverList[url]; !ok {
|
||||
return errors.New("url not exists")
|
||||
}
|
||||
@@ -47,10 +54,52 @@ func (wc *Controller) disableUrlReceiver(url string) error {
|
||||
delete(urlReceiverList, url)
|
||||
|
||||
if len(urlReceiverList) == 0 {
|
||||
if err := wc.DisableReceiver(false); err != nil {
|
||||
return err
|
||||
}
|
||||
urlReceiverStat = false
|
||||
return wc.DisableReceiver(urlReceiverKey)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (wc *Controller) enableSocketReceiver(ws *websocket.Conn) error {
|
||||
|
||||
logman.Info("enable receiver", "socket", ws.RemoteAddr().String())
|
||||
|
||||
if len(socketReceiverList) == 0 {
|
||||
key, err := wc.EnrollReceiver(true, func(msg *wcferry.WxMsg) {
|
||||
ret := wcferry.ParseWxMsg(msg)
|
||||
for w := range socketReceiverList {
|
||||
logman.Info("call receiver", "socket", ws.RemoteAddr().String(), "Id", ret.Id)
|
||||
go websocket.JSON.Send(w, ret)
|
||||
}
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
socketReceiverKey = key
|
||||
}
|
||||
|
||||
if _, ok := socketReceiverList[ws]; ok {
|
||||
return errors.New("socket already exists")
|
||||
}
|
||||
|
||||
socketReceiverList[ws] = true
|
||||
return nil
|
||||
|
||||
}
|
||||
|
||||
func (wc *Controller) disableSocketReceiver(ws *websocket.Conn) error {
|
||||
|
||||
logman.Info("disable receiver", "socket", ws.RemoteAddr().String())
|
||||
|
||||
if _, ok := socketReceiverList[ws]; !ok {
|
||||
return errors.New("socket not exists")
|
||||
}
|
||||
|
||||
delete(socketReceiverList, ws)
|
||||
|
||||
if len(socketReceiverList) == 0 {
|
||||
return wc.DisableReceiver(socketReceiverKey)
|
||||
}
|
||||
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user