first commit
This commit is contained in:
@@ -0,0 +1,165 @@
|
||||
package wxcore
|
||||
|
||||
import (
|
||||
"encoding/xml"
|
||||
"time"
|
||||
|
||||
"xiawan/wx/api/req"
|
||||
"xiawan/wx/clientsdk/baseinfo"
|
||||
"xiawan/wx/srv/wxface"
|
||||
|
||||
"github.com/lunny/log"
|
||||
)
|
||||
|
||||
// WXFileHelperMgr 文件传输助手消息管理器
|
||||
type WXFileHelperMgr struct {
|
||||
wxConn wxface.IWXConnect
|
||||
msgList chan *MsgItem
|
||||
endChan chan bool
|
||||
isStarted bool
|
||||
}
|
||||
|
||||
// MsgItem MsgItem
|
||||
type MsgItem struct {
|
||||
TextMsg string
|
||||
ImageData []byte
|
||||
MsgType uint32
|
||||
}
|
||||
|
||||
// NewWXFileHelperMgr 新建文件传输助手管理器
|
||||
func NewWXFileHelperMgr(wxConn wxface.IWXConnect) *WXFileHelperMgr {
|
||||
return &WXFileHelperMgr{
|
||||
wxConn: wxConn,
|
||||
msgList: make(chan *MsgItem, 100),
|
||||
endChan: make(chan bool, 1),
|
||||
isStarted: false,
|
||||
}
|
||||
}
|
||||
|
||||
// Start 开启
|
||||
func (wxfhm *WXFileHelperMgr) Start() {
|
||||
if wxfhm.isStarted {
|
||||
return
|
||||
}
|
||||
wxfhm.isStarted = true
|
||||
go wxfhm.startDealMsg()
|
||||
}
|
||||
|
||||
// Stop 关闭
|
||||
func (wxfhm *WXFileHelperMgr) Stop() {
|
||||
wxfhm.isStarted = false
|
||||
wxfhm.endChan <- true
|
||||
wxfhm.isStarted = false
|
||||
}
|
||||
|
||||
// AddNewTipMsg 新增提示
|
||||
func (wxfhm *WXFileHelperMgr) AddNewTipMsg(newMsg string) {
|
||||
if wxfhm.isStarted {
|
||||
newMsgItem := &MsgItem{}
|
||||
newMsgItem.MsgType = 1
|
||||
newMsgItem.TextMsg = newMsg
|
||||
wxfhm.msgList <- newMsgItem
|
||||
}
|
||||
}
|
||||
|
||||
// 新增名片消息 AddNewCardMsg
|
||||
func (wxfhm *WXFileHelperMgr) AddNewCardMsg(newMsg string) {
|
||||
if wxfhm.isStarted {
|
||||
newMsgItem := &MsgItem{}
|
||||
newMsgItem.MsgType = 42
|
||||
newMsgItem.TextMsg = newMsg
|
||||
wxfhm.msgList <- newMsgItem
|
||||
}
|
||||
}
|
||||
|
||||
// AddImageMsg 新增图片消息
|
||||
func (wxfhm *WXFileHelperMgr) AddImageMsg(imgData []byte) {
|
||||
if wxfhm.isStarted {
|
||||
newMsgItem := &MsgItem{}
|
||||
newMsgItem.MsgType = 2
|
||||
newMsgItem.ImageData = imgData
|
||||
wxfhm.msgList <- newMsgItem
|
||||
}
|
||||
}
|
||||
|
||||
// 转发图片
|
||||
func (wxfhm *WXFileHelperMgr) ForwardImageMsg(imgData []byte) {
|
||||
if wxfhm.isStarted {
|
||||
newMsgItem := &MsgItem{}
|
||||
newMsgItem.MsgType = 3
|
||||
newMsgItem.ImageData = imgData
|
||||
wxfhm.msgList <- newMsgItem
|
||||
}
|
||||
}
|
||||
|
||||
// 转发表情
|
||||
func (wxfhm *WXFileHelperMgr) ForwardEmoticonMsg(imgData []byte) {
|
||||
if wxfhm.isStarted {
|
||||
newMsgItem := &MsgItem{}
|
||||
newMsgItem.MsgType = 47
|
||||
newMsgItem.ImageData = imgData
|
||||
wxfhm.msgList <- newMsgItem
|
||||
}
|
||||
}
|
||||
|
||||
// 处理消息
|
||||
func (wxfhm *WXFileHelperMgr) startDealMsg() {
|
||||
defer TryE("(wxfhm *WXFileHelperMgr) startDealMsg()")
|
||||
currentReqInvoker := wxfhm.wxConn.GetWXReqInvoker()
|
||||
for {
|
||||
// 最少1秒发送一次
|
||||
time.Sleep(1 * time.Second)
|
||||
select {
|
||||
case newMsgItem := <-wxfhm.msgList:
|
||||
if newMsgItem.MsgType == 1 {
|
||||
// 文字
|
||||
currentReqInvoker.SendTextMsgToFileHelperRequest(newMsgItem.TextMsg)
|
||||
} else if newMsgItem.MsgType == 2 {
|
||||
// 图片
|
||||
currentReqInvoker.SendImageToFileHelper(newMsgItem.ImageData)
|
||||
} else if newMsgItem.MsgType == 42 {
|
||||
// 名片
|
||||
// 发送消息
|
||||
currentReqInvoker.SendCardMsgToFileHelperRequest(newMsgItem.TextMsg)
|
||||
// currentReqInvoker.SendCardMsgToFileHelper(newMsgItem.TextMsg)
|
||||
} else if newMsgItem.MsgType == 3 {
|
||||
// 图片
|
||||
var msg baseinfo.Msg3
|
||||
err := xml.Unmarshal(newMsgItem.ImageData, &msg)
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing XML: %v", err)
|
||||
return
|
||||
}
|
||||
if msg.Img.CdnThumbURL != "" {
|
||||
sendMsg := baseinfo.ForwardImageItem{
|
||||
ToUserName: baseinfo.FileHelperWXID,
|
||||
AesKey: msg.Img.AESKey,
|
||||
CdnMidImgUrl: msg.Img.CdnThumbURL,
|
||||
CdnMidImgSize: msg.Img.CdnThumbLength,
|
||||
CdnThumbImgSize: msg.Img.Length,
|
||||
}
|
||||
_, _ = currentReqInvoker.ForwardCdnImageRequest(sendMsg)
|
||||
}
|
||||
|
||||
} else if newMsgItem.MsgType == 47 {
|
||||
// 表情
|
||||
var msg baseinfo.Msg47
|
||||
err := xml.Unmarshal(newMsgItem.ImageData, &msg)
|
||||
if err != nil {
|
||||
log.Fatalf("Error parsing XML: %v", err)
|
||||
return
|
||||
}
|
||||
if msg.Emoji.MD5 != "" {
|
||||
sendMsg := req.SendEmojiItem{
|
||||
ToUserName: baseinfo.FileHelperWXID,
|
||||
EmojiMd5: msg.Emoji.MD5,
|
||||
EmojiSize: msg.Emoji.Len,
|
||||
}
|
||||
_, _ = currentReqInvoker.ForwardEmojiRequest(sendMsg.EmojiMd5, sendMsg.ToUserName, sendMsg.EmojiSize)
|
||||
}
|
||||
}
|
||||
case <-wxfhm.endChan:
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user