package com.ruoyi.admin.netty;
|
|
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 {
|
public static void main(String[] args) {
|
Map<String, Object> map = new HashMap<String, Object>();
|
//用户信息
|
map.put("imgUrl", "1");
|
map.put("nickName", "1");
|
map.put("licensePlate", "1");
|
map.put("phone", 1);
|
map.put("driverId", 1);
|
map.put("carColor", "1");
|
map.put("modelName", "1");
|
map.put("brandName", "1");
|
map.put("driverOrderNums", 1);
|
map.put("score", 1);
|
|
|
map.put("id", 1);
|
map.put("orderNum", "123456");
|
map.put("startAddress", "测试");
|
map.put("endAddress", "测试1");
|
map.put("departureTime", 1533608196000L);
|
map.put("type", 1);
|
map.put("mileage", 1);
|
map.put("mileageMoney", 10);
|
map.put("duration", 10);
|
map.put("durationMoney", 10);
|
map.put("nightMoney", 1);
|
map.put("serverMoney", 1);
|
map.put("nightMileage", 10);
|
map.put("longMileage", 10);
|
map.put("longDurationMoney", 10);
|
map.put("orderMoney", 10);
|
map.put("payMoney", 10);
|
map.put("couponsMoney", 10);
|
System.out.println(setMsg(Method.ping, new HashMap<String, Object>()));
|
}
|
|
/**
|
* 返回一个正确数据
|
*
|
* @param method
|
* @param data
|
* @return
|
* @author TaoNingBo
|
*/
|
public static String setMsg(String method, Map<String, Object> 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<Map<String, Object>> data) {
|
StringBuffer json = new StringBuffer();
|
json.append(getHeader(200, "SUCCESS", method));
|
List<JSONObject> jsonList = new ArrayList<JSONObject>();
|
for (Map<String, Object> 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 msg
|
* @author TaoNingBo
|
*/
|
public static void sendMsg(String cacheType, Integer id, String msg) {
|
//NettyServerController.sendMsgToClient(NettyChannelMap.getData(cacheType + id), setMsg(method, data));
|
NettyWebSocketController.sendMsgToClient(cacheType, id, msg);
|
}
|
|
|
public static void resendMsg(String token) {
|
String msg = NettyWebSocketController.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);
|
}
|
NettyWebSocketController.table.remove(token);
|
} catch (Exception e) {
|
resendMsg(token);
|
System.err.println("重发推送发生异常,记录:" + msg);
|
}
|
}
|
}
|
|
|
}
|