瀏覽代碼

增加企微通道

boweniac 1 周之前
父節點
當前提交
2caba3952c
共有 100 個文件被更改,包括 360 次插入0 次删除
  1. 347 0
      internal/pkg/wechat_ws/wecom_ws_client.go
  2. 13 0
      internal/svc/service_context.go
  3. 0 0
      proto/wechat/AcceptFriendAddRequestTask.proto
  4. 0 0
      proto/wechat/AccountForceOfflineNotice.proto
  5. 0 0
      proto/wechat/AccountLogoutNotice.proto
  6. 0 0
      proto/wechat/AddEmojiTask.proto
  7. 0 0
      proto/wechat/AddFriendFromPhonebookTask.proto
  8. 0 0
      proto/wechat/AddFriendInChatRoomTask.proto
  9. 0 0
      proto/wechat/AddFriendNameCardTask.proto
  10. 0 0
      proto/wechat/AddFriendNotice.proto
  11. 0 0
      proto/wechat/AddFriendWithSceneTask.proto
  12. 0 0
      proto/wechat/AddFriendsTask.proto
  13. 0 0
      proto/wechat/AgreeJoinChatRoomTask.proto
  14. 0 0
      proto/wechat/BizContactAddNotice.proto
  15. 0 0
      proto/wechat/BizContactPushNotice.proto
  16. 0 0
      proto/wechat/BizConversPushNotice.proto
  17. 0 0
      proto/wechat/CDNDownloadFileTask.proto
  18. 0 0
      proto/wechat/CDNDownloadResultNotice.proto
  19. 0 0
      proto/wechat/CallLogPushNotice.proto
  20. 0 0
      proto/wechat/ChatMsgFilePushNotice.proto
  21. 0 0
      proto/wechat/ChatMsgIdsPushNotice.proto
  22. 0 0
      proto/wechat/ChatRoomActionTask.proto
  23. 0 0
      proto/wechat/ChatRoomAddNotice.proto
  24. 0 0
      proto/wechat/ChatRoomChangedNotice.proto
  25. 0 0
      proto/wechat/ChatRoomDelNotice.proto
  26. 0 0
      proto/wechat/ChatRoomInviteApproveTask.proto
  27. 0 0
      proto/wechat/ChatRoomMembersNotice.proto
  28. 0 0
      proto/wechat/ChatRoomPushNotice.proto
  29. 0 0
      proto/wechat/CircleCommentDeleteTask.proto
  30. 0 0
      proto/wechat/CircleCommentDeleteTaskResultNotice.proto
  31. 0 0
      proto/wechat/CircleCommentNotice.proto
  32. 0 0
      proto/wechat/CircleCommentReplyTask.proto
  33. 0 0
      proto/wechat/CircleCommentReplyTaskResultNotice.proto
  34. 0 0
      proto/wechat/CircleDelNotice.proto
  35. 0 0
      proto/wechat/CircleDetailNotice.proto
  36. 0 0
      proto/wechat/CircleLikeNotice.proto
  37. 0 0
      proto/wechat/CircleLikeTask.proto
  38. 0 0
      proto/wechat/CircleMsgClearTask.proto
  39. 0 0
      proto/wechat/CircleMsgPushNotice.proto
  40. 0 0
      proto/wechat/CircleMsgReadTask.proto
  41. 0 0
      proto/wechat/CircleNewPublishNotice.proto
  42. 0 0
      proto/wechat/CirclePushNotice.proto
  43. 0 0
      proto/wechat/ClearAllChatMsgTask.proto
  44. 0 0
      proto/wechat/ConfigPushNotice.proto
  45. 0 0
      proto/wechat/ContactInfoNotice.proto
  46. 0 0
      proto/wechat/ContactLabelAddNotic.proto
  47. 0 0
      proto/wechat/ContactLabelDelNotice.proto
  48. 0 0
      proto/wechat/ContactLabelDeleteTask.proto
  49. 0 0
      proto/wechat/ContactLabelInfoNotice.proto
  50. 0 0
      proto/wechat/ContactLabelTask.proto
  51. 0 0
      proto/wechat/ContactSetLabelTask.proto
  52. 0 0
      proto/wechat/ConvDelNotice.proto
  53. 0 0
      proto/wechat/ConversationPushNotice.proto
  54. 0 0
      proto/wechat/DeleteFriendTask.proto
  55. 0 0
      proto/wechat/DeleteSNSNewsTask.proto
  56. 0 0
      proto/wechat/DeviceAuthReq.proto
  57. 0 0
      proto/wechat/DeviceAuthRsp.proto
  58. 0 0
      proto/wechat/ErrorMessage.proto
  59. 0 0
      proto/wechat/FindContactTask.proto
  60. 0 0
      proto/wechat/FindContactTaskResultNotice.proto
  61. 0 0
      proto/wechat/ForwardMessageByContentTask.proto
  62. 0 0
      proto/wechat/ForwardMessageTask.proto
  63. 0 0
      proto/wechat/ForwardMultiMessageTask.proto
  64. 0 0
      proto/wechat/FriendAddNotice.proto
  65. 0 0
      proto/wechat/FriendAddReqListNotice.proto
  66. 0 0
      proto/wechat/FriendAddReqeustNotice.proto
  67. 0 0
      proto/wechat/FriendChangeNotice.proto
  68. 0 0
      proto/wechat/FriendDelNotice.proto
  69. 0 0
      proto/wechat/FriendDetectResultNotice.proto
  70. 0 0
      proto/wechat/FriendPushNotice.proto
  71. 0 0
      proto/wechat/FriendTalkNotice.proto
  72. 0 0
      proto/wechat/GetA8KeyTask.proto
  73. 0 0
      proto/wechat/GetContactInfoTask.proto
  74. 0 0
      proto/wechat/GetFriendDetectResult.proto
  75. 0 0
      proto/wechat/GetWeChatsReq.proto
  76. 0 0
      proto/wechat/GetWeChatsRsp.proto
  77. 0 0
      proto/wechat/GroupMemberAddProgress.proto
  78. 0 0
      proto/wechat/HeartBeat.proto
  79. 0 0
      proto/wechat/HistoryMsgPushNotice.proto
  80. 0 0
      proto/wechat/JoinGroupByQrTask.proto
  81. 0 0
      proto/wechat/ModifyFriendMemoTask.proto
  82. 0 0
      proto/wechat/MsgDelNotice.proto
  83. 0 0
      proto/wechat/OneKeyLikeTask.proto
  84. 0 0
      proto/wechat/OneKeyLikeTaskResultNotice.proto
  85. 0 0
      proto/wechat/PhoneActionTask.proto
  86. 0 0
      proto/wechat/PhoneStateTask.proto
  87. 0 0
      proto/wechat/PhoneStateTaskResultNotice.proto
  88. 0 0
      proto/wechat/PhoneStateWarningNotice.proto
  89. 0 0
      proto/wechat/PostDeleteDeviceNotice.proto
  90. 0 0
      proto/wechat/PostDeviceInfoNotice.proto
  91. 0 0
      proto/wechat/PostFriendDetectCountNotice.proto
  92. 0 0
      proto/wechat/PostFriendDetectTask.proto
  93. 0 0
      proto/wechat/PostMessageReadNotice.proto
  94. 0 0
      proto/wechat/PostSNSNewsTask.proto
  95. 0 0
      proto/wechat/PostSNSNewsTaskResultNotice.proto
  96. 0 0
      proto/wechat/PostStopFriendDetectTask.proto
  97. 0 0
      proto/wechat/PullCallLogTask.proto
  98. 0 0
      proto/wechat/PullCallLogTaskResultNotice.proto
  99. 0 0
      proto/wechat/PullChatRoomQrCodeTask.proto
  100. 0 0
      proto/wechat/PullChatRoomQrCodeTaskResultNotice.proto

+ 347 - 0
internal/pkg/wechat_ws/wecom_ws_client.go

@@ -0,0 +1,347 @@
+package wechat_ws
+
+import (
+	"bytes"
+	"encoding/json"
+	"errors"
+	"github.com/gorilla/websocket"
+	"github.com/zeromicro/go-zero/core/logx"
+	"google.golang.org/protobuf/encoding/protojson"
+	"google.golang.org/protobuf/types/known/anypb"
+	"time"
+	"wechat-api/workphone/wecom"
+)
+
+type WecomWsClient struct {
+	Conn           *websocket.Conn
+	AccessToken    string
+	Send           chan []byte
+	Name           string
+	CTypes         string
+	MessageHandler []MessageHandler
+}
+
+func NewWecomWsClient(urlStr string, name string, ctype string) (*WecomWsClient, error) {
+	logx.Debug("实例开始")
+
+	//p, _ := url.Parse("http://127.0.0.1:7897")
+
+	var d = websocket.Dialer{
+		//Proxy: http.ProxyURL(&url.URL{
+		//	Scheme: "http", // or "https" depending on your proxy
+		//	Host:   "127.0.0.1:7897",
+		//	Path:   "/",
+		//}),
+	}
+
+	c, _, err := d.Dial(urlStr, nil)
+	if err != nil {
+		logx.Error(err)
+		return nil, err
+	}
+
+	client := &WecomWsClient{
+		Conn:           c,
+		AccessToken:    "",
+		Send:           make(chan []byte, 256),
+		Name:           name,
+		CTypes:         ctype,
+		MessageHandler: make([]MessageHandler, 0),
+	}
+
+	err = client.DeviceAuth()
+	if err != nil {
+		return nil, err
+	}
+
+	return client, nil
+}
+
+// SendMsg 立刻发送消息,发送不成功可以获取错误信息
+func (c *WecomWsClient) SendMsg(message []byte) error {
+	logx.Info("发送消息:", string(message))
+	err := c.Conn.SetWriteDeadline(time.Now().Add(writeWait))
+	if err != nil {
+		return err
+	}
+	err = c.Conn.WriteMessage(websocket.TextMessage, message)
+	if err != nil {
+		return err
+	}
+	return nil
+}
+
+// SendMsgByChan 通过chan通道发送消息,这样可以保证发送顺序,异步,不返回错误
+func (c *WecomWsClient) SendMsgByChan(msg []byte) {
+	c.Send <- msg
+}
+
+func (c *WecomWsClient) WritePump() {
+	ticker := time.NewTicker(pingPeriod)
+	defer func() {
+		ticker.Stop()
+		err := c.Conn.Close()
+		if err != nil {
+			return
+		}
+	}()
+	for {
+		select {
+		case message, ok := <-c.Send:
+			if !ok {
+				continue
+			}
+			_ = c.SendMsg(message)
+
+			// 以下注释 的,是把所有当前积压的消息一次性都发出去的写法,不确定是否会乱序,或服务端否支持
+			//_ = c.conn.SetWriteDeadline(time.Now().Add(writeWait))
+			//if !ok {
+			//	_ = c.conn.WriteMessage(websocket.CloseMessage, []byte{})
+			//	return
+			//}
+			//
+			//w, err := c.conn.NextWriter(websocket.TextMessage)
+			//if err != nil {
+			//	return
+			//}
+			//_, _ = w.Write(message)
+			//
+			//// Add queued chat messages to the current websocket message.
+			//n := len(c.send)
+			//for i := 0; i < n; i++ {
+			//	_, _ = w.Write(newline)
+			//	_, _ = w.Write(<-c.send)
+			//}
+			//
+			//if err := w.Close(); err != nil {
+			//	return
+			//}
+		case <-ticker.C:
+			if c.AccessToken == "" {
+				logx.Error("accessToken is empty")
+				continue
+			}
+
+			message := map[string]interface{}{
+				"Id":          1001,
+				"MsgType":     "HeartBeatReq",
+				"AccessToken": c.AccessToken,
+				"Content": map[string]string{
+					"token": c.AccessToken,
+				},
+			}
+
+			//transportMessageJSON, err := json.Marshal(message)
+			//if err != nil {
+			//	logx.Error(err)
+			//	continue
+			//}
+			//
+			_ = c.Conn.SetWriteDeadline(time.Now().Add(writeWait))
+			//err = c.Conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
+
+			err := c.Conn.WriteJSON(message)
+
+			if err != nil {
+				logx.Error(err)
+				continue
+			}
+			logx.Info("发送心跳保活~~")
+		}
+	}
+}
+
+func (c *WecomWsClient) RegisterMessageHandler(handler MessageHandler) {
+	if c == nil {
+		logx.Error("WecomWsClient is nil in RegisterMessageHandler")
+		return
+	}
+	logx.Info("Registering message handler for WecomWsClient:", c.Name)
+	c.MessageHandler = append(c.MessageHandler, handler)
+}
+
+func (c *WecomWsClient) ReadPump() {
+	defer func() {
+		err := c.Conn.Close()
+		if err != nil {
+			return
+		}
+	}()
+	//c.Conn.SetReadLimit(maxMessageSize)
+	//err := c.Conn.SetReadDeadline(time.Time{})
+	//if err != nil {
+	//	logx.Errorf("SetReadDeadline error: %v", err)
+	//	return
+	//}
+	//c.conn.SetPongHandler(func(string) error {
+	//	err := c.conn.SetReadDeadline(time.Time{})
+	//	if err != nil {
+	//		return err
+	//	}
+	//	return nil
+	//})
+	for {
+		_, message, err := c.Conn.ReadMessage()
+		if err != nil {
+			if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
+				logx.Errorf("IsUnexpectedCloseError error: %v", err)
+			} else {
+				logx.Errorf("NotIsUnexpectedCloseError error: %v", err)
+			}
+			break
+		}
+		message = bytes.TrimSpace(bytes.Replace(message, newline, space, -1))
+
+		logx.Debugf("message 获取的消息原型是 : %s", string(message))
+
+		var msg MsgJsonObject
+		//err = c.Conn.ReadJSON(msg)
+		err = json.Unmarshal(message, &msg)
+		if err != nil {
+			logx.Error(err)
+			continue
+		}
+		//logx.Info("message 获取的消息原型是 : ", msg)
+
+		switch msg.MsgType {
+		case "MsgReceivedAck":
+			logx.Info("心跳确认消息已收到,无需处理")
+		default:
+			if len(c.MessageHandler) > 0 {
+				for _, handler := range c.MessageHandler {
+					// todo 重启时这里会丢消息,回头需要用wg来进行平滑处理
+					go func() {
+						defer func() {
+							// 捕获panic, 防止程序崩溃
+							if r := recover(); r != nil {
+								logx.Error("Recovered in f", r)
+							}
+						}()
+						err = handler(&msg)
+						if err != nil {
+							logx.Error(err)
+						}
+					}()
+				}
+			}
+		}
+
+	}
+}
+
+// DeviceAuth2 todo 这个方法中,产生了一个@type的字段,无法通过注册.有空的时候看看,这种方式还是更优雅
+//
+//go:deprecated 已弃用,请使用 DeviceAuth 方法进行设备认证。
+func (c *WecomWsClient) DeviceAuth2() error {
+	sendMsg := &wecom.DeviceAuthReqMessage{
+		AuthType:   wecom.DeviceAuthReqMessage_InternalCode,
+		Credential: "",
+	}
+
+	content, err := anypb.New(sendMsg)
+	if err != nil {
+		logx.Error(err)
+		return err
+	}
+
+	logx.Info("content is ", content)
+
+	transportMessage := &wecom.TransportMessage{
+		Id:      int64(wecom.EnumMsgType_DeviceAuthReq),
+		MsgType: wecom.EnumMsgType_DeviceAuthReq,
+		Content: content,
+	}
+
+	transportMessageJSON, err := protojson.MarshalOptions{
+		UseProtoNames: true,
+	}.Marshal(transportMessage)
+
+	if err != nil {
+		logx.Error(err)
+		return err
+	}
+
+	logx.Info(string(transportMessageJSON))
+
+	err = c.Conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
+	if err != nil {
+		logx.Error(err)
+		return err
+	}
+
+	return nil
+
+}
+
+// DeviceAuth 连接认证,使用IP白名单方式进行认证
+func (c *WecomWsClient) DeviceAuth() error {
+
+	message := map[string]interface{}{
+		"Id":          1010,
+		"AccessToken": "",
+		"MsgType":     "DeviceAuthReq",
+		"Content": map[string]interface{}{
+			"AuthType":   3,
+			"Credential": "",
+		},
+	}
+	transportMessageJSON, err := json.Marshal(message)
+	if err != nil {
+		logx.Error(err)
+		return err
+	}
+
+	err = c.Conn.WriteMessage(websocket.TextMessage, transportMessageJSON)
+	if err != nil {
+		logx.Error(err)
+		return err
+	}
+
+	for {
+		_, msgByte, err := c.Conn.ReadMessage()
+		if err != nil {
+			if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
+				logx.Errorf("IsUnexpectedCloseError error: %v", err)
+			} else {
+				logx.Errorf("NotIsUnexpectedCloseError error: %v", err)
+			}
+			break
+		}
+		msgByte = bytes.TrimSpace(bytes.Replace(msgByte, newline, space, -1))
+
+		logx.Debugf("message 获取的消息原型是 : %s", string(msgByte))
+
+		var msg MsgJsonObject
+
+		err = json.Unmarshal(msgByte, &msg)
+		if err != nil {
+			logx.Error(err)
+			continue
+		}
+
+		if msg.MsgType == "Error" {
+			var errMsg wecom.ErrorMessage
+			_ = protojson.Unmarshal([]byte(msg.Message), &errMsg)
+			logx.Error("连接认证失败,请检查IP白名单是否正确", errMsg)
+			return errors.New("连接认证失败,请检查IP白名单是否正确")
+		}
+
+		if msg.MsgType != "DeviceAuthRsp" {
+			logx.Error("不是连接认证消息,丢弃~", string(msgByte))
+			continue
+		}
+
+		var deviceAuthRsp wecom.DeviceAuthRspMessage
+		err = protojson.Unmarshal([]byte(msg.Message), &deviceAuthRsp)
+		if err != nil {
+			logx.Error(err)
+			continue
+		}
+		logx.Info("连接认证成功 accessToken :", deviceAuthRsp.AccessToken)
+		c.AccessToken = deviceAuthRsp.AccessToken
+		break
+	}
+
+	return nil
+
+}

+ 13 - 0
internal/svc/service_context.go

@@ -38,6 +38,7 @@ type ServiceContext struct {
 	CoreRpc       coreclient.Core
 	Rds           redis.UniversalClient
 	WechatWs      map[string]*wechat_ws.WechatWsClient
+	WecomWs       map[string]*wechat_ws.WecomWsClient
 	Cache         *collection.Cache
 	NodeID        *snowflake.Node
 	MongoModel    *mongo_model.AllMongoModel
@@ -73,6 +74,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
 	// 初始化微信ws客户端
 	// todo 现在配置是从 config.yaml中读取的,后续需要改成从数据库中读取,以便匹配不同的微信号
 	wechatWs := make(map[string]*wechat_ws.WechatWsClient)
+	wecomWs := make(map[string]*wechat_ws.WecomWsClient)
 
 	for _, ws := range c.WebSocket {
 		if ws.Type == "wechat" {
@@ -85,6 +87,16 @@ func NewServiceContext(c config.Config) *ServiceContext {
 				go client.WritePump()
 				wechatWs[ws.Name] = client
 			}
+		} else if ws.Type == "wecom" {
+			wecomClient, err := wechat_ws.NewWecomWsClient(ws.Url, ws.Name, ws.Type)
+			if err != nil {
+				logx.Error(err)
+			} else {
+				logx.Info("建立ws wecomClient成功~", ws.Name)
+				go wecomClient.ReadPump()
+				go wecomClient.WritePump()
+				wecomWs[ws.Name] = wecomClient
+			}
 		}
 	}
 
@@ -111,6 +123,7 @@ func NewServiceContext(c config.Config) *ServiceContext {
 		CoreRpc:       coreRpc,
 		Rds:           rds,
 		WechatWs:      wechatWs,
+		WecomWs:       wecomWs,
 		Cache:         cache,
 		NodeID:        node,
 		MongoModel:    all_mongo_model,

+ 0 - 0
proto/AcceptFriendAddRequestTask.proto → proto/wechat/AcceptFriendAddRequestTask.proto


+ 0 - 0
proto/AccountForceOfflineNotice.proto → proto/wechat/AccountForceOfflineNotice.proto


+ 0 - 0
proto/AccountLogoutNotice.proto → proto/wechat/AccountLogoutNotice.proto


+ 0 - 0
proto/AddEmojiTask.proto → proto/wechat/AddEmojiTask.proto


+ 0 - 0
proto/AddFriendFromPhonebookTask.proto → proto/wechat/AddFriendFromPhonebookTask.proto


+ 0 - 0
proto/AddFriendInChatRoomTask.proto → proto/wechat/AddFriendInChatRoomTask.proto


+ 0 - 0
proto/AddFriendNameCardTask.proto → proto/wechat/AddFriendNameCardTask.proto


+ 0 - 0
proto/AddFriendNotice.proto → proto/wechat/AddFriendNotice.proto


+ 0 - 0
proto/AddFriendWithSceneTask.proto → proto/wechat/AddFriendWithSceneTask.proto


+ 0 - 0
proto/AddFriendsTask.proto → proto/wechat/AddFriendsTask.proto


+ 0 - 0
proto/AgreeJoinChatRoomTask.proto → proto/wechat/AgreeJoinChatRoomTask.proto


+ 0 - 0
proto/BizContactAddNotice.proto → proto/wechat/BizContactAddNotice.proto


+ 0 - 0
proto/BizContactPushNotice.proto → proto/wechat/BizContactPushNotice.proto


+ 0 - 0
proto/BizConversPushNotice.proto → proto/wechat/BizConversPushNotice.proto


+ 0 - 0
proto/CDNDownloadFileTask.proto → proto/wechat/CDNDownloadFileTask.proto


+ 0 - 0
proto/CDNDownloadResultNotice.proto → proto/wechat/CDNDownloadResultNotice.proto


+ 0 - 0
proto/CallLogPushNotice.proto → proto/wechat/CallLogPushNotice.proto


+ 0 - 0
proto/ChatMsgFilePushNotice.proto → proto/wechat/ChatMsgFilePushNotice.proto


+ 0 - 0
proto/ChatMsgIdsPushNotice.proto → proto/wechat/ChatMsgIdsPushNotice.proto


+ 0 - 0
proto/ChatRoomActionTask.proto → proto/wechat/ChatRoomActionTask.proto


+ 0 - 0
proto/ChatRoomAddNotice.proto → proto/wechat/ChatRoomAddNotice.proto


+ 0 - 0
proto/ChatRoomChangedNotice.proto → proto/wechat/ChatRoomChangedNotice.proto


+ 0 - 0
proto/ChatRoomDelNotice.proto → proto/wechat/ChatRoomDelNotice.proto


+ 0 - 0
proto/ChatRoomInviteApproveTask.proto → proto/wechat/ChatRoomInviteApproveTask.proto


+ 0 - 0
proto/ChatRoomMembersNotice.proto → proto/wechat/ChatRoomMembersNotice.proto


+ 0 - 0
proto/ChatRoomPushNotice.proto → proto/wechat/ChatRoomPushNotice.proto


+ 0 - 0
proto/CircleCommentDeleteTask.proto → proto/wechat/CircleCommentDeleteTask.proto


+ 0 - 0
proto/CircleCommentDeleteTaskResultNotice.proto → proto/wechat/CircleCommentDeleteTaskResultNotice.proto


+ 0 - 0
proto/CircleCommentNotice.proto → proto/wechat/CircleCommentNotice.proto


+ 0 - 0
proto/CircleCommentReplyTask.proto → proto/wechat/CircleCommentReplyTask.proto


+ 0 - 0
proto/CircleCommentReplyTaskResultNotice.proto → proto/wechat/CircleCommentReplyTaskResultNotice.proto


+ 0 - 0
proto/CircleDelNotice.proto → proto/wechat/CircleDelNotice.proto


+ 0 - 0
proto/CircleDetailNotice.proto → proto/wechat/CircleDetailNotice.proto


+ 0 - 0
proto/CircleLikeNotice.proto → proto/wechat/CircleLikeNotice.proto


+ 0 - 0
proto/CircleLikeTask.proto → proto/wechat/CircleLikeTask.proto


+ 0 - 0
proto/CircleMsgClearTask.proto → proto/wechat/CircleMsgClearTask.proto


+ 0 - 0
proto/CircleMsgPushNotice.proto → proto/wechat/CircleMsgPushNotice.proto


+ 0 - 0
proto/CircleMsgReadTask.proto → proto/wechat/CircleMsgReadTask.proto


+ 0 - 0
proto/CircleNewPublishNotice.proto → proto/wechat/CircleNewPublishNotice.proto


+ 0 - 0
proto/CirclePushNotice.proto → proto/wechat/CirclePushNotice.proto


+ 0 - 0
proto/ClearAllChatMsgTask.proto → proto/wechat/ClearAllChatMsgTask.proto


+ 0 - 0
proto/ConfigPushNotice.proto → proto/wechat/ConfigPushNotice.proto


+ 0 - 0
proto/ContactInfoNotice.proto → proto/wechat/ContactInfoNotice.proto


+ 0 - 0
proto/ContactLabelAddNotic.proto → proto/wechat/ContactLabelAddNotic.proto


+ 0 - 0
proto/ContactLabelDelNotice.proto → proto/wechat/ContactLabelDelNotice.proto


+ 0 - 0
proto/ContactLabelDeleteTask.proto → proto/wechat/ContactLabelDeleteTask.proto


+ 0 - 0
proto/ContactLabelInfoNotice.proto → proto/wechat/ContactLabelInfoNotice.proto


+ 0 - 0
proto/ContactLabelTask.proto → proto/wechat/ContactLabelTask.proto


+ 0 - 0
proto/ContactSetLabelTask.proto → proto/wechat/ContactSetLabelTask.proto


+ 0 - 0
proto/ConvDelNotice.proto → proto/wechat/ConvDelNotice.proto


+ 0 - 0
proto/ConversationPushNotice.proto → proto/wechat/ConversationPushNotice.proto


+ 0 - 0
proto/DeleteFriendTask.proto → proto/wechat/DeleteFriendTask.proto


+ 0 - 0
proto/DeleteSNSNewsTask.proto → proto/wechat/DeleteSNSNewsTask.proto


+ 0 - 0
proto/DeviceAuthReq.proto → proto/wechat/DeviceAuthReq.proto


+ 0 - 0
proto/DeviceAuthRsp.proto → proto/wechat/DeviceAuthRsp.proto


+ 0 - 0
proto/ErrorMessage.proto → proto/wechat/ErrorMessage.proto


+ 0 - 0
proto/FindContactTask.proto → proto/wechat/FindContactTask.proto


+ 0 - 0
proto/FindContactTaskResultNotice.proto → proto/wechat/FindContactTaskResultNotice.proto


+ 0 - 0
proto/ForwardMessageByContentTask.proto → proto/wechat/ForwardMessageByContentTask.proto


+ 0 - 0
proto/ForwardMessageTask.proto → proto/wechat/ForwardMessageTask.proto


+ 0 - 0
proto/ForwardMultiMessageTask.proto → proto/wechat/ForwardMultiMessageTask.proto


+ 0 - 0
proto/FriendAddNotice.proto → proto/wechat/FriendAddNotice.proto


+ 0 - 0
proto/FriendAddReqListNotice.proto → proto/wechat/FriendAddReqListNotice.proto


+ 0 - 0
proto/FriendAddReqeustNotice.proto → proto/wechat/FriendAddReqeustNotice.proto


+ 0 - 0
proto/FriendChangeNotice.proto → proto/wechat/FriendChangeNotice.proto


+ 0 - 0
proto/FriendDelNotice.proto → proto/wechat/FriendDelNotice.proto


+ 0 - 0
proto/FriendDetectResultNotice.proto → proto/wechat/FriendDetectResultNotice.proto


+ 0 - 0
proto/FriendPushNotice.proto → proto/wechat/FriendPushNotice.proto


+ 0 - 0
proto/FriendTalkNotice.proto → proto/wechat/FriendTalkNotice.proto


+ 0 - 0
proto/GetA8KeyTask.proto → proto/wechat/GetA8KeyTask.proto


+ 0 - 0
proto/GetContactInfoTask.proto → proto/wechat/GetContactInfoTask.proto


+ 0 - 0
proto/GetFriendDetectResult.proto → proto/wechat/GetFriendDetectResult.proto


+ 0 - 0
proto/GetWeChatsReq.proto → proto/wechat/GetWeChatsReq.proto


+ 0 - 0
proto/GetWeChatsRsp.proto → proto/wechat/GetWeChatsRsp.proto


+ 0 - 0
proto/GroupMemberAddProgress.proto → proto/wechat/GroupMemberAddProgress.proto


+ 0 - 0
proto/HeartBeat.proto → proto/wechat/HeartBeat.proto


+ 0 - 0
proto/HistoryMsgPushNotice.proto → proto/wechat/HistoryMsgPushNotice.proto


+ 0 - 0
proto/JoinGroupByQrTask.proto → proto/wechat/JoinGroupByQrTask.proto


+ 0 - 0
proto/ModifyFriendMemoTask.proto → proto/wechat/ModifyFriendMemoTask.proto


+ 0 - 0
proto/MsgDelNotice.proto → proto/wechat/MsgDelNotice.proto


+ 0 - 0
proto/OneKeyLikeTask.proto → proto/wechat/OneKeyLikeTask.proto


+ 0 - 0
proto/OneKeyLikeTaskResultNotice.proto → proto/wechat/OneKeyLikeTaskResultNotice.proto


+ 0 - 0
proto/PhoneActionTask.proto → proto/wechat/PhoneActionTask.proto


+ 0 - 0
proto/PhoneStateTask.proto → proto/wechat/PhoneStateTask.proto


+ 0 - 0
proto/PhoneStateTaskResultNotice.proto → proto/wechat/PhoneStateTaskResultNotice.proto


+ 0 - 0
proto/PhoneStateWarningNotice.proto → proto/wechat/PhoneStateWarningNotice.proto


+ 0 - 0
proto/PostDeleteDeviceNotice.proto → proto/wechat/PostDeleteDeviceNotice.proto


+ 0 - 0
proto/PostDeviceInfoNotice.proto → proto/wechat/PostDeviceInfoNotice.proto


+ 0 - 0
proto/PostFriendDetectCountNotice.proto → proto/wechat/PostFriendDetectCountNotice.proto


+ 0 - 0
proto/PostFriendDetectTask.proto → proto/wechat/PostFriendDetectTask.proto


+ 0 - 0
proto/PostMessageReadNotice.proto → proto/wechat/PostMessageReadNotice.proto


+ 0 - 0
proto/PostSNSNewsTask.proto → proto/wechat/PostSNSNewsTask.proto


+ 0 - 0
proto/PostSNSNewsTaskResultNotice.proto → proto/wechat/PostSNSNewsTaskResultNotice.proto


+ 0 - 0
proto/PostStopFriendDetectTask.proto → proto/wechat/PostStopFriendDetectTask.proto


+ 0 - 0
proto/PullCallLogTask.proto → proto/wechat/PullCallLogTask.proto


+ 0 - 0
proto/PullCallLogTaskResultNotice.proto → proto/wechat/PullCallLogTaskResultNotice.proto


+ 0 - 0
proto/PullChatRoomQrCodeTask.proto → proto/wechat/PullChatRoomQrCodeTask.proto


+ 0 - 0
proto/PullChatRoomQrCodeTaskResultNotice.proto → proto/wechat/PullChatRoomQrCodeTaskResultNotice.proto


Some files were not shown because too many files changed in this diff