package MXDJR; import java.util.ArrayList; import java.io.IOException; import java.nio.charset.StandardCharsets; import java.util.Arrays; import handling.world.World.Broadcast; import tools.MaplePacketCreator; import com.alibaba.fastjson.JSON; import java.util.concurrent.CopyOnWriteArrayList; import constants.ServerConfig; import java.util.List; import java.net.Socket; public class RobotSocket { private static Socket Socket; private static Thread ReadThread; private static Thread DoThread; public static boolean IsRun; public static boolean IsConnect; private static List QueueRead; private static List QueueSend; private static int Num; private static String list; private static long[] QQ号; private static long[] QQ群号; private static long[] QQ群主; private static final StartPack PackStart; public static long QQ号() { return RobotSocket.QQ号[ServerConfig.nub1]; } public static long QQ群号() { return RobotSocket.QQ群号[ServerConfig.nub1]; } public static long QQ群主() { return RobotSocket.QQ群主[ServerConfig.nub1]; } public static void Start() { RobotSocket.QueueRead = (List) new CopyOnWriteArrayList(); RobotSocket.QueueSend = (List) new CopyOnWriteArrayList(); RobotSocket.DoThread = new Thread((Runnable) new Runnable() { @Override public void run() { while (RobotSocket.IsRun) { try { if (!RobotSocket.QueueRead.isEmpty()) { final RobotTask task = (RobotTask) RobotSocket.QueueRead.remove(0); switch (task.index) { case 49: { final GroupMessageEventPack pack = (GroupMessageEventPack) JSON.parseObject(task.data, GroupMessageEventPack.class); final String item = (String) pack.message.get(1); if (!item.contains((CharSequence) "{") && !item.contains((CharSequence) "[")) { Broadcast.broadcastMessage(MaplePacketCreator.serverNotice(6, "[群消息]:" + pack.name + "->" + item)); } if (item.contains((CharSequence) "增加关键字") && pack.fid == RobotSocket.QQ群主[ServerConfig.nub1]) { final String 关键字 = item.substring(item.indexOf("字") + 1); System.out.println("增加游戏内关键字:" + 关键字); MXDJR.Config.GJC.add(关键字); ConfigRead.Save(); final List send = Arrays.asList("我已经开通关键字:" + 关键字); RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send); break; } if (item.contains((CharSequence) "删除关键字") && pack.fid == RobotSocket.QQ群主[ServerConfig.nub1]) { final String 关键字 = item.substring(item.indexOf("字") + 1); System.out.println("删除游戏内关键字:" + 关键字); for (int num = 0; num < MXDJR.Config.GJC.size(); ++num) { if (((String) MXDJR.Config.GJC.get(num)).contains((CharSequence) 关键字)) { MXDJR.Config.GJC.remove(num); ConfigRead.Save(); final List send2 = Arrays.asList("我已经删除关键字:" + 关键字); RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send2); break; } } } if (item.contains((CharSequence) "查看关键字")) { String 关键字2 = ""; for (int num2 = 0; num2 < MXDJR.Config.GJC.size(); ++num2) { 关键字2 = 关键字2 + "【" + (String) MXDJR.Config.GJC.get(num2) + "】"; } final List send2 = Arrays.asList("游戏通告支持关键字:" + 关键字2); RobotSocket.SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send2); break; } break; } } } Thread.sleep(10L); } catch (Exception e) { ServerMain.LogError(e); } } } }); (RobotSocket.ReadThread = new Thread((Runnable) new Runnable() { @Override public void run() { try { while (!RobotSocket.IsRun) { Thread.sleep(100L); } } catch (Exception e) { ServerMain.LogError(e); } RobotSocket.DoThread.start(); while (RobotSocket.IsRun) { try { if (!RobotSocket.IsConnect) { ReConnect(); } else { if (RobotSocket.Socket.getInputStream().available() > 0) { final byte[] data = new byte[RobotSocket.Socket.getInputStream().available()]; RobotSocket.Socket.getInputStream().read(data); final byte type = data[data.length - 1]; data[data.length - 1] = 0; final String unicode = new String(data, "UTF-8"); final String gbk = new String(unicode.getBytes("GBK")); RobotSocket.QueueRead.add(new RobotTask(type, gbk)); continue; } if (RobotSocket.Socket.getInputStream().available() < 0) { ServerMain.LogOut("机器人连接中断"); RobotSocket.IsConnect = false; } else if (!RobotSocket.QueueSend.isEmpty()) { final byte[] data = (byte[]) RobotSocket.QueueSend.remove(0); RobotSocket.Socket.getOutputStream().write(data); RobotSocket.Socket.getOutputStream().flush(); } } Thread.sleep(50L); } catch (Exception e2) { ServerMain.LogError("机器人连接失败"); ServerMain.LogError(e2); RobotSocket.IsConnect = false; ServerMain.LogError("机器人20秒后重连"); try { Thread.sleep(20000L); } catch (InterruptedException interruptedException) { interruptedException.printStackTrace(); } ServerMain.LogError("机器人重连中"); } } } })).start(); RobotSocket.IsRun = true; } private static boolean is() { try { RobotSocket.Socket.sendUrgentData(60); return false; } catch (Exception ex) { return true; } } private static void ReConnect() { try { if (RobotSocket.Socket != null) { RobotSocket.Socket.close(); } RobotSocket.Socket = new Socket("121.62.23.34", 790393010); final byte[] data = (JSON.toJSON(RobotSocket.PackStart) + " ").getBytes(StandardCharsets.UTF_8); data[data.length - 1] = 0; RobotSocket.Socket.getOutputStream().write(data); RobotSocket.Socket.getOutputStream().flush(); RobotSocket.QueueRead.clear(); RobotSocket.QueueSend.clear(); ServerMain.LogOut("机器人已连接"); RobotSocket.IsConnect = true; } catch (Exception e) { ServerMain.LogError("机器人连接失败"); ServerMain.LogError(e); } } public static void SendGroupMessage(final long qq_, final long id_, final List message_) { final byte[] data = BuildPack.Build(new SendGroupMessagePack() { }, 52); RobotSocket.QueueSend.add(data); } public static void SendGroupPrivateMessage(final long qq_, final long id_, final long fid_, final List message_) { final byte[] data = BuildPack.Build(new SendGroupPrivateMessagePack() { }, 53); RobotSocket.QueueSend.add(data); } public static void SendFriendMessage(final long qq_, final long id_, final List message_) { final byte[] data = BuildPack.Build(new SendFriendMessagePack() { }, 54); RobotSocket.QueueSend.add(data); } public static void SendGroupImage(final long qq, final long id, final String img) { final byte[] data = BuildPack.BuildImage(qq, id, 0L, img, 61); RobotSocket.QueueSend.add(data); } public static void SendGroupPrivateImage(final long qq, final long id, final long fid, final String img) { final byte[] data = BuildPack.BuildImage(qq, id, fid, img, 62); RobotSocket.QueueSend.add(data); } public static void SendFriendImage(final long qq, final long id, final String img) { final byte[] data = BuildPack.BuildImage(qq, id, 0L, img, 63); RobotSocket.QueueSend.add(data); } public static void Stop() { ServerMain.LogOut("机器人正在断开!"); RobotSocket.IsRun = false; if (RobotSocket.Socket != null) { try { RobotSocket.Socket.close(); } catch (IOException e) { e.printStackTrace(); } } ServerMain.LogOut("机器人已断开!"); } public static final void robbatSpeak(final String text) { if (RobotSocket.IsConnect) { final List send = Arrays.asList(text); SendGroupMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send); } } public static final void robbatSpeak1(final String text) { if (RobotSocket.IsConnect) { final List send = Arrays.asList(text); SendFriendMessage(RobotSocket.QQ号[ServerConfig.nub1], RobotSocket.QQ群号[ServerConfig.nub1], send); } } static { Num = 0; QQ号 = new long[]{3430308405L}; QQ群号 = new long[]{790393010L}; QQ群主 = new long[]{116711496L}; PackStart = new StartPack() { { Name = "MXDJR"; Reg = new ArrayList() { { add(Integer.valueOf(49)); add(Integer.valueOf(50)); add(Integer.valueOf(51)); } }; } }; } }