微信云控开发SDK使用教程--手机端推送好友列表通知服务端

case FriendPushNotice : {//手机端推送好友列表 log.debug("socket:msgtype=FriendPushNotice"); friendPushNoticeHandler.handleMsg(ctx, msgVo); break; }

package com.jubotech.framework.netty.handler.socket;

import java.util.List;

import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service;

import com.google.protobuf.util.JsonFormat; import com.jubotech.business.web.domain.AccountInfo; import com.jubotech.business.web.domain.WeChatAccountInfo; import com.jubotech.business.web.domain.WeChatContactInfo; import com.jubotech.business.web.service.AccountService; import com.jubotech.business.web.service.WeChatAccountService; import com.jubotech.business.web.service.WeChatContactService; import com.jubotech.framework.netty.common.Constant; import com.jubotech.framework.netty.utils.MessageUtil; import com.jubotech.framework.netty.utils.NettyConnectionUtil;

import Jubo.JuLiao.IM.Wx.Proto.FriendAddNotice.FriendMessage; import Jubo.JuLiao.IM.Wx.Proto.FriendPushNotice.FriendPushNoticeMessage; import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.EnumErrorCode; import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.EnumMsgType; import Jubo.JuLiao.IM.Wx.Proto.TransportMessageOuterClass.TransportMessage; import io.netty.channel.ChannelHandlerContext;

@Service public class FriendPushNoticeHandler{ private final Logger log = LoggerFactory.getLogger(getClass()); @Autowired private WeChatAccountService weChatAccountService; @Autowired private AccountService accountService; @Autowired private WeChatContactService weChatContactService;

/**

* 手机端主动推送好友列表消息

* @author wechatno:tangjinjinwx

* @param ctx

* @param vo

*/

public void handleMsg(ChannelHandlerContext ctx, TransportMessage vo) {

try {

FriendPushNoticeMessage req = vo.getContent().unpack(FriendPushNoticeMessage.class);

log.info(JsonFormat.printer().print(req));

// 把消息转发给pc端

// a、根据wechatId找到accountid

// b、通过accountid找到account

// c、通过account账号找到通道

WeChatAccountInfo account = weChatAccountService.findWeChatAccountInfoByWeChatId(req.getWeChatId());

if (null != account && null != account.getAccountid() && 1 != account.getIslogined()) {

AccountInfo accInfo = accountService.findAccountInfoByid(account.getAccountid());

if (null != accInfo) {

// 转发给pc端

ChannelHandlerContext chx = NettyConnectionUtil.getClientChannelHandlerContextByUserId(accInfo.getAccount());

if (null != chx) {

asyncSendMsg(chx, req);

}

}

// 告诉客户端消息已收到

MessageUtil.sendMsg(ctx, EnumMsgType.MsgReceivedAck, vo.getAccessToken(), vo.getId(), null);

//异步保存到数据库

friendListSave(req, account);

} else {

// 对方不在线

MessageUtil.sendErrMsg(ctx, EnumErrorCode.TargetNotOnline, Constant.ERROR_MSG_NOTONLINE);

}

} catch (Exception e) {

e.printStackTrace();

MessageUtil.sendErrMsg(ctx, EnumErrorCode.InvalidParam, Constant.ERROR_MSG_DECODFAIL);

}

}

@Async

private void asyncSendMsg(ChannelHandlerContext chx,FriendPushNoticeMessage req){

MessageUtil.sendJsonMsg(chx, EnumMsgType.FriendPushNotice, NettyConnectionUtil.getNettyId(chx),null, req);

}

@Async

private void friendListSave(FriendPushNoticeMessage req,WeChatAccountInfo account) {

List friendList = req.getFriendsList();

if(null != friendList && friendList.size()>0){

String wechatId = req.getWeChatId();

for(int i=0;i

FriendMessage friend = friendList.get(i);

if(null != friend){

WeChatContactInfo contactinfo = weChatContactService.findContactinfoByfriendid(account.getCid(),wechatId,friend.getFriendId());

try {

if(null != contactinfo){

setContActinfo(contactinfo, friend);

weChatContactService.update(contactinfo);

}else{

contactinfo = new WeChatContactInfo();

setContActinfo(contactinfo, friend);

contactinfo.setCid(account.getCid());

contactinfo.setWechatid(req.getWeChatId());

contactinfo.setFriendid(friend.getFriendId());

weChatContactService.insert(contactinfo);

}

} catch (Exception e) {

e.printStackTrace();

}

}

}

}

}

private static void setContActinfo(WeChatContactInfo contactinfo,FriendMessage friend){

contactinfo.setFriend_wechatno(friend.getFriendNo());

contactinfo.setNickname(friend.getFriendNick());

contactinfo.setGender(friend.getGenderValue());

contactinfo.setAvatar(friend.getAvatar());

contactinfo.setCountry(friend.getCountry());

contactinfo.setProvince(friend.getProvince());

contactinfo.setCity(friend.getCity());

contactinfo.setState(0);

}

}

微信云linux sdk,微信云控开发SDK使用教程--手机端推送好友列表通知服务端相关推荐

  1. 微信云控开发SDK使用教程--手机机端回传检测清粉好友数通知服务端

    微信云控开发SDK使用教程--手机机端回传检测清粉好友数通知服务端 case PostFriendDetectCountNotice : {//手机机端回传检测清粉好友数 log.debug(&quo ...

  2. .net 服务器推送信息,.net websocket服务端开发,实现消息推送功能

    WebSocket协议是一种双向通信协议,它建立在TCP之上,同http一样通过TCP来传输数据,但是它和http最大的不同有两点: WebSocket是一种双向通信协议,在建立连接后,WebSock ...

  3. 微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端

    微信二次开发SDK使用教程--手机检测到有人点赞/取消点赞通知服务端 case CircleLikeNotice : {//手机检测到有人点赞/取消点赞通知 log.debug("socke ...

  4. 微信开发SDK使用教程--手机微信好友发来聊天消息通知服务端

    微信开发SDK使用教程--手机微信好友发来聊天消息通知服务端 case FriendTalkNotice: {// 微信好友发来聊天消息 log.debug("socket:msgtype= ...

  5. 微信开发SDK使用教程--手机微信个人号新增好友通知服务端

    微信开发SDK使用教程--手机微信个人号新增好友通知服务端 case FriendAddNotice: {// 微信个人号新增好友通知 log.debug("socket:msgtype=F ...

  6. 阿里云Linux服务器部署Mysql,JDK以及Tomcat教程

    阿里云Linux服务器部署Mysql,JDK以及Tomcat教程 最近趁着阿里云服务器优惠在阿里云租用了一个轻型应用服务器,本来可以选择已经搭配好的服务器类型,但自己选择了ubantu Linux系统 ...

  7. 企业微信sdk调用,触发企业微信推送联系人列表

    企业微信sdk调用,触发企业微信推送联系人列表 /**      * 触发推送企业微信联系人列表任务      * @author wechat:happybabby110      * @blog ...

  8. python生成QQ机器人爬取百度文库链接推送好友并生成词云

    QQ机器人爬取百度文库链接推送好友并生成词云 一.环境准备 二.实现QQ机器人 1.QQ机器人介绍 2.安装方法 3.实现自己的QQ机器人 三.百度文库内容链接爬取推送好友 代码实现: 思路分析 1. ...

  9. php 微信图文推送,微信单图文、多图文推送、列表中排序

    /** * @author yinhuiying(改于) * @since version - 2014-10-31 * @deprecated version - 2014-10-31 * 腾讯客服 ...

  10. 微信小程序一次获取多个formid插件,实现主动推送多次消息

    微信小程序一次获取多个formid 微信小程序一次获取多个formid插件,实现主动推送多次消息 版本号:1.0.0 作者:chen-yt github: https://github.com/che ...

最新文章

  1. wxpython富文本_Python实例讲解 -- wxpython 基本的控件 (文本)
  2. 疯狂秀才权限管理系统,开源了
  3. Missing you is a kind of my deep-pain in my life
  4. 20172317 2018-2019-1 《程序设计与数据结构》 第五周学习总结
  5. EtherCAT 网站链接
  6. Qt——P26 Label控件显示图片
  7. With great power comes great responsibility
  8. Flutter业务开发常用小技巧(样式布局篇)
  9. 卡巴斯基终生免费使用方法
  10. 支持HEVC格式的浏览器推荐(windows 10)
  11. log4cxx OutputDebugString DebugView dbgview
  12. 接口测试用例设计和sql注入
  13. 平安京因服务器升级维护什么意思,阴阳师4月27日维护更新公告 堀江由衣猫掌柜降临平安京...
  14. 阿里云ECS服务器很多台共用一个公网ip吗?
  15. python3 实现自动生成入账记录表
  16. root后开启指纹支付,root之后不能用指纹支付
  17. 【笔记】MS5837-30BA压力传感器调试笔记
  18. (深度学习入门)sigmoid型函数和 sigmoid函数的区别
  19. NFT 的价值与法律风险
  20. 肯德基微信小程序连接服务器异常,微信小程序平台常见问题及解决方案

热门文章

  1. 为啥苹果手机连无线无网络连接服务器,苹果手机网络无法连接怎么回事
  2. html表格列文字自动换行,Table文字自动换行
  3. excel中单元格的引用方法
  4. (实战项目二)阳光热线问政平台
  5. STM32+ADS1110
  6. 抖音养号上热门技巧(超详细)
  7. 几个主要软件调试方法及调试原则
  8. 树的深度优先和广度优先
  9. OSI七层模型与TCP/IP四层与五层模型详解
  10. IDEA中使用Git,文件不同颜色代表的含义