ReportHandler.java
Upload User: gwt600
Upload Date: 2021-06-03
Package Size: 704k
Code Size: 3k
Category:

Games

Development Platform:

Java

  1. /*
  2.  * To change this template, choose Tools | Templates
  3.  * and open the template in the editor.
  4.  */
  5. package net.sf.odinms.net.channel.handler;
  6. import java.rmi.RemoteException;
  7. import net.sf.odinms.client.MapleClient;
  8. import net.sf.odinms.net.AbstractMaplePacketHandler;
  9. import net.sf.odinms.tools.data.input.SeekableLittleEndianAccessor;
  10. import java.sql.*;
  11. import net.sf.odinms.client.MapleCharacter;
  12. import org.slf4j.Logger;
  13. import org.slf4j.LoggerFactory;
  14. import net.sf.odinms.database.DatabaseConnection;
  15. import net.sf.odinms.net.world.remote.WorldChannelInterface;
  16. import net.sf.odinms.tools.MaplePacketCreator;
  17. /**
  18.  *
  19.  * @author Administrator
  20.  */
  21. public class ReportHandler extends AbstractMaplePacketHandler {
  22.     
  23.     final String[] reasons = {
  24.         "使用外挂",
  25.         "装B",
  26.         "欺骗我",
  27.         "冒充GM",
  28.         "骚扰我",
  29.         "广告"
  30.     };
  31.     @Override
  32.     public void handlePacket(SeekableLittleEndianAccessor slea, MapleClient c) {
  33.         c.getPlayer().resetAfkTime();
  34.         int reportedCharId = slea.readInt();
  35.         byte reason = slea.readByte();
  36.         String chatlog = "在数据库中没有找到chatlog";
  37.         short clogLen = slea.readShort();
  38.         if (clogLen > 0) {
  39.             chatlog = slea.readAsciiString(clogLen);
  40.         }
  41.         Logger logger = LoggerFactory.getLogger(this.getClass());
  42.         logger.info(c.getPlayer().getName() + " 举报了玩家,被举报玩家ID为 " + reportedCharId);
  43.         int cid = reportedCharId;
  44.         if (addReportEntry(c.getPlayer().getId(), reportedCharId, reason, chatlog)) {
  45.             c.getSession().write(MaplePacketCreator.reportReply((byte) 0));
  46.         } else {
  47.             c.getSession().write(MaplePacketCreator.reportReply((byte) 4));
  48.         }
  49.         try {
  50.             WorldChannelInterface wci = c.getChannelServer().getWorldInterface();
  51.             wci.broadcastGMMessage(null, MaplePacketCreator.serverNotice(5, c.getPlayer().getName() + " 报告 " + MapleCharacter.getNameById(cid, 0) + " 因为 " + reasons[reason] + ".").getBytes());
  52.         } catch (RemoteException ex) {
  53.             c.getChannelServer().reconnectWorld();
  54.         }
  55.     }
  56.     private boolean addReportEntry(int reporterId, int victimId, byte reason, String chatlog) {
  57.         try {
  58.             Connection dcon = DatabaseConnection.getConnection();
  59.             PreparedStatement ps;
  60.             ps = dcon.prepareStatement("INSERT INTO reports VALUES (NULL, CURRENT_TIMESTAMP, ?, ?, ?, ?, 'UNHANDLED')");
  61.             ps.setInt(1, reporterId);
  62.             ps.setInt(2, victimId);
  63.             ps.setInt(3, reason);
  64.             ps.setString(4, chatlog);
  65.             ps.executeUpdate();
  66.             ps.close();
  67.         } catch (SQLException ex) {
  68.             return false;
  69.         }
  70.         return true;
  71.     }
  72. }