package cn.mb.cloud.gateway.util.echo; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import io.netty.buffer.ByteBuf; import io.netty.buffer.Unpooled; import io.netty.channel.ChannelFuture; import io.netty.channel.ChannelHandlerContext; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class NettyMsg { /** * 返回一个正确数据 * * @param method * @param data * @return * @author TaoNingBo */ public static String setMsg(String method, Map data) { StringBuffer json = new StringBuffer(); json.append(getHeader(200, "SUCCESS", method)); json.append(JSON.toJSONString(data)); json.append("}"); //return JSON.toJSONString(json); return json.toString(); } /** * 返回一个正确数据 * * @param method * @param data * @return */ public static String setMsg(String method, List> data) { StringBuffer json = new StringBuffer(); json.append(getHeader(200, "SUCCESS", method)); List jsonList = new ArrayList(); for(Map map : data) { JSONObject dataJson = new JSONObject(map); jsonList.add(dataJson); } json.append(jsonList); json.append("}"); // return JSON.toJSONString(json); return json.toString(); } /** * 返回一个错误数据 * * @param method * @param data * @return * @author TaoNingBo */ public static String setErrMsg(String method, String data) { StringBuffer json = new StringBuffer(); json.append(getHeader(-1, "FAILURE", method)); json.append("\"" + data + "\""); json.append("}"); // return JSON.toJSONString(json); return json.toString(); } /** * 生成一个返回JSON的头 * * @param code * @param msg * @param method * @return * @author TaoNingBo */ private static String getHeader(int code, String msg, String method) { StringBuffer header = new StringBuffer(); header.append("{"); header.append("\"code\":\"" + code); header.append("\",\"msg\":\"" + msg); header.append("\",\"method\":\"" + method); header.append("\",\"data\":"); return header.toString(); } /** * 发送消息给客户端 * * @param cacheType * @param id * @param method * @param data * @author TaoNingBo */ public static void sendMsg(String cacheType, Integer id, String method, Map data) { //NettyServerController.sendMsgToClient(NettyChannelMap.getData(cacheType + id), setMsg(method, data)); NettyServerController.sendMsgToClient(cacheType,id, setMsg(method, data)); } public static void resendMsg(String token){ String msg = NettyServerController.table.get(token); ChannelHandlerContext ctx = NettyChannelMap.getData(token); if(null != msg && !"".equals(msg) && ctx != null && ctx.channel().isActive()){ ByteBuf buffer = Unpooled.copiedBuffer((msg).getBytes()); ChannelFuture sync; try { sync = ctx.writeAndFlush(buffer).sync(); System.err.println("重发异常推送状态"+sync.isSuccess()+",位置:"+token+",消息内容:"+msg); if(!sync.isSuccess()){ resendMsg(token); System.err.println("重发异常推送不成功,将继续推送"+msg); } NettyServerController.table.remove(token); } catch (Exception e) { resendMsg(token); System.err.println("重发推送发生异常,记录:"+msg); } } } }