diff --git a/src/main/java/com/jmfy/controller/GameTitleController.java b/src/main/java/com/jmfy/controller/GameTitleController.java index 2c94443..d2972e2 100644 --- a/src/main/java/com/jmfy/controller/GameTitleController.java +++ b/src/main/java/com/jmfy/controller/GameTitleController.java @@ -23,9 +23,12 @@ import org.springframework.web.bind.annotation.ResponseBody; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; +import java.io.UnsupportedEncodingException; +import java.math.BigInteger; +import java.security.NoSuchAlgorithmException; import java.util.HashMap; -import java.util.Iterator; import java.util.List; +import java.util.Map; @Controller public class GameTitleController { @@ -170,4 +173,59 @@ public class GameTitleController { return handler.execute(jsonObject,session); } + /** + * 天眼封禁 + */ + @RequestMapping(value = "/skyEye",method = {RequestMethod.GET,RequestMethod.POST}) + public @ResponseBody + String skyEye(HttpServletRequest request,HttpSession session){ + Map map = new HashMap<>(); + map.put("code","1"); + map.put("message",""); + if(verify(request)){ + return JSON.toJSONString(map); + } + try { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); + String jsonString = JSON.toJSONString(parameterMap); + JSONObject jsonObject = JSON.parseObject(jsonString); + BaseHandler handler = ManagerManager.getInstance().getBaseHandler("gm"); + if(handler.skyEyeExecute(jsonObject,session,map)){ + map.put("code","0"); + } + } catch (Exception e) { + e.printStackTrace(); + }finally { + return JSON.toJSONString(map); + } + } + + private boolean verify(HttpServletRequest request) + { + HashMap parameterMap = JsonUtil.getInstence().getParameterMap(request); + String playerId = parameterMap.get("playerId"); + String sign = parameterMap.get("sign"); + String userId = parameterMap.get("userId"); + String zoneId = parameterMap.get("zoneId"); + String serverId = parameterMap.get("serverId"); + String time = parameterMap.get("time"); + + try { + String secretKey = "3dcbb03682d80fea5ee3ead074aebba7"; + byte[] bytes = (secretKey + playerId + userId + zoneId + serverId + time).getBytes("UTF-8"); // 输出其utf-8的bytes + + java.security.MessageDigest digest = java.security.MessageDigest.getInstance("MD5"); + digest.update(bytes); + + byte[] md5sum = digest.digest(); + BigInteger bigInt = new BigInteger(1, md5sum); + + return String.format("%032X", bigInt).equalsIgnoreCase(sign); // MD5前面会补零 + + } catch (NoSuchAlgorithmException | UnsupportedEncodingException e) + { + return false; + } + } + } diff --git a/src/main/java/com/jmfy/handler/BaseHandler.java b/src/main/java/com/jmfy/handler/BaseHandler.java index 9cc3821..4bf46ac 100644 --- a/src/main/java/com/jmfy/handler/BaseHandler.java +++ b/src/main/java/com/jmfy/handler/BaseHandler.java @@ -3,6 +3,7 @@ package com.jmfy.handler; import com.alibaba.fastjson.JSONObject; import javax.servlet.http.HttpSession; +import java.util.Map; public abstract class BaseHandler { private int pid; @@ -16,6 +17,8 @@ public abstract class BaseHandler { public abstract int execute(JSONObject json,HttpSession session) throws Exception ; + public abstract boolean skyEyeExecute(JSONObject json, HttpSession session, Map map) throws Exception; + public int getPid() { return pid; } diff --git a/src/main/java/com/jmfy/handler/GMHandler.java b/src/main/java/com/jmfy/handler/GMHandler.java index a8ce453..f613fc2 100644 --- a/src/main/java/com/jmfy/handler/GMHandler.java +++ b/src/main/java/com/jmfy/handler/GMHandler.java @@ -23,6 +23,7 @@ import javax.annotation.Resource; import javax.servlet.http.HttpSession; import java.util.ArrayList; import java.util.List; +import java.util.Map; @Component public class GMHandler extends BaseHandler { @@ -63,6 +64,14 @@ public class GMHandler extends BaseHandler { * 修改用户名 */ public static final int UPDATE_USERNAME = 6; + /** + * 天眼禁言封禁 + */ + public static final int SKYEYE_BAN = 7; + /** + * 天眼禁言解禁 + */ + public static final int CANCEL_SKYEYE_BAN = 8; @Override public int execute(JSONObject jsonObject,HttpSession session) throws Exception { @@ -115,6 +124,65 @@ public class GMHandler extends BaseHandler { } + @Override + public boolean skyEyeExecute(JSONObject json, HttpSession session, Map map) throws Exception { + String nickname = json.getString("nickname"); + String playerId = json.getString("playerId"); + String userId = json.getString("userId"); + String zoneId = json.getString("zoneId"); + String serverId = json.getString("serverId"); + String content = json.getString("content"); + String time = json.getString("time"); + String sign = json.getString("sign"); + JSONObject jsonBan = new JSONObject(); + jsonBan.put("uid",userId); + jsonBan.put("banTime",time); + jsonBan.put("dsid",zoneId); + jsonBan.put("treat_type","7"); + jsonBan.put("banReason",content); + CUserInfo coreUserInfo = userInfoDao.findUserInfoByUserId(Integer.valueOf(userId)); + if (coreUserInfo == null) { + map.put("message","帐号不存在"+userId); + throw new Exception("帐号不存在"); + } else { + ServerInfo coreServerList = serverListDao.getServerinfo(String.valueOf(coreUserInfo.getServerid())); + + if (null == coreServerList) { + map.put("message","服务器不存在"); + return false; + } + if (!coreServerList.getServer_id().equals(String.valueOf(zoneId))) { + map.put("message","服务器不存在"+zoneId); + return false; + } + + // 获取拼接参数 + String cmd = getCmd(jsonBan, coreUserInfo, 7); + + String rpcString = RedisUtil.getInstence().getObject(RedisUserKey.LOGIC_SERVER_INFO, String.valueOf(coreServerList.getServer_id()), String.class, -1); + if (null == rpcString) { + map.put("message","Exception send err rpcString dsid="+coreUserInfo.getServerid()+",uid="+userId); + LOGGER.error("Exception send err rpcString dsid=>{},uid=>{},cmd=>{}", coreUserInfo.getServerid(), userId, cmd); + return false; + } + String thriftIp = rpcString.split(":")[0]; + String thriftPort = rpcString.split(":")[1]; + if (thriftIp == null || thriftIp.isEmpty() || null == thriftPort || thriftPort.isEmpty()) { + map.put("message","thriftIp == null || thriftIp.isEmpty() || null == thriftPort || thriftPort.isEmpty()"); + return false; + } + Result result = RPCClient.gmSend(cmd, thriftIp, thriftPort); + // 异常或者错误 + if (result.getResultCode() != 0) { + LOGGER.error("Exception send err dsid=>{},uid=>{},cmd=>{}", coreUserInfo.getServerid(), userId, cmd); + }else { + // 封禁入库 + updateUserBanner(coreUserInfo,session,jsonBan); + } + } + return true; + } + /** * 获取cmd参数 * @param jsonObject @@ -141,6 +209,12 @@ public class GMHandler extends BaseHandler { case CANCEL_BANNED_LOGIN: cmd = "reblack " + coreUserInfo.getUserId(); break; + case SKYEYE_BAN: + cmd = "skyeye " + coreUserInfo.getUserId() + " " +jsonObject.getString("banTime"); + break; + case CANCEL_SKYEYE_BAN: + cmd = "skyeyec " + coreUserInfo.getUserId(); + break; case UPDATE_USERNAME: if (!jsonObject.containsKey("actor_id")) { throw new Exception("缺少参数"); @@ -168,6 +242,7 @@ public class GMHandler extends BaseHandler { private void updateUserBanner(CUserInfo cUser,HttpSession session,JSONObject jsonObject) throws Exception { int type = jsonObject.getIntValue("treat_type"); switch (type) { + case GMHandler.SKYEYE_BAN: case GMHandler.BANNED_TO_POST: case GMHandler.BANNED_LOGIN: // 封禁用户 @@ -180,6 +255,7 @@ public class GMHandler extends BaseHandler { throw new Exception("该用户已经处于封禁状态,请删除后重新操作"); } break; + case GMHandler.CANCEL_SKYEYE_BAN: case GMHandler.CANCEL_BANNED_TO_POST: case GMHandler.CANCEL_BANNED_LOGIN: // 封禁用户 @@ -257,6 +333,9 @@ public class GMHandler extends BaseHandler { case GMHandler.BANNED_LOGIN: resultType = GMHandler.CANCEL_BANNED_LOGIN; break; + case GMHandler.SKYEYE_BAN: + resultType = GMHandler.CANCEL_SKYEYE_BAN; + break; default:break; } return resultType; diff --git a/src/main/java/com/jmfy/model/UserBanned.java b/src/main/java/com/jmfy/model/UserBanned.java index 0c873ab..a730520 100644 --- a/src/main/java/com/jmfy/model/UserBanned.java +++ b/src/main/java/com/jmfy/model/UserBanned.java @@ -83,6 +83,9 @@ public class UserBanned { case GMHandler.BANNED_LOGIN: string = "禁登录"; break; + case GMHandler.SKYEYE_BAN: + string = "天眼禁言"; + break; default:break; } return string;