Advertisement
Guest User

SMSOnline.java

a guest
Jun 26th, 2014
36
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5.65 KB | None | 0 0
  1. package com.l2jfrozen.gameserver.powerpak.Servers.Services;
  2.  
  3. import java.io.IOException;
  4. import java.io.OutputStream;
  5. import java.net.URLDecoder;
  6. import java.sql.Connection;
  7. import java.sql.PreparedStatement;
  8. import java.sql.SQLException;
  9. import java.util.Map;
  10. import java.util.StringTokenizer;
  11. import java.util.logging.Level;
  12. import java.util.logging.Logger;
  13.  
  14. import javolution.util.FastMap;
  15.  
  16. import com.l2jfrozen.Config;
  17. import com.l2jfrozen.L2Properties;
  18. import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
  19. import com.l2jfrozen.gameserver.powerpak.L2Utils;
  20. import com.l2jfrozen.gameserver.util.sql.SQLQuery;
  21. import com.l2jfrozen.gameserver.util.sql.SQLQueue;
  22. import com.sun.net.httpserver.HttpExchange;
  23. import com.sun.net.httpserver.HttpHandler;
  24.  
  25. public class SMSOnline implements HttpHandler
  26. {
  27.     protected static final Logger _log = Logger.getLogger(SMSOnline.class.getName());
  28.    
  29.     private class DBUpdater implements SQLQuery {
  30.     private L2PcInstance _pc;
  31.     private int _count;
  32.     private float _tid;
  33.     private String _phone;
  34.     private String _service;
  35.     private String _charName;
  36.  
  37.         public DBUpdater(String charName, int count, String tid, String phone, String service, L2PcInstance player)
  38.         {
  39.             _pc = player;
  40.             _count = count;
  41.             _tid = Float.parseFloat(tid);
  42.             _phone = phone;
  43.             _service = service;
  44.             _charName = charName;
  45.         }
  46.         @Override
  47.         public void execute(Connection con)
  48.         {
  49.             boolean doAdd = _pc!=null;
  50.             try
  51.             {
  52.                 PreparedStatement stm = con.prepareStatement(" insert into smsonline select "+
  53.                                                              "?,?,?,? from characters where not exists ( "+
  54.                                                              "select * from smsonline where smstimestamp = ? and user_phone = ?) limit 1 ");
  55.                 stm.setFloat(1, _tid);
  56.                 stm.setFloat(5, _tid);
  57.                 stm.setString(2, _phone);
  58.                 stm.setString(6, _phone);
  59.                 stm.setString(3, _service);
  60.                 stm.setString(4, _charName);
  61.                 doAdd = doAdd && stm.executeUpdate() > 0;
  62.                 stm.close();
  63.             }
  64.             catch(SQLException e)
  65.             {
  66.                 if(Config.ENABLE_ALL_EXCEPTIONS)
  67.                     e.printStackTrace();
  68.                
  69.                 _log.log(Level.WARNING, "WebServices: SMSOnline error updating database",e);
  70.                 return;
  71.             }
  72.             if(doAdd)
  73.             {
  74.                 _pc.addItem("SMSCoin", _RewardID, _count, null, true);
  75.                 if(_pc.isOnline()!=0 && _PlayerMessage.length()>0)
  76.                     _pc.sendMessage(_PlayerMessage);
  77.                 else
  78.                     _pc.store();
  79.             }
  80.         }
  81.  
  82.     }
  83.     private static Map<String, Integer> _rewards = new FastMap<String, Integer>();
  84.     private String _MsgOk;
  85.     private String _MsgFail;
  86.     private String _prefix;
  87.     protected int _RewardID;
  88.     protected String _PlayerMessage;
  89.     public SMSOnline()
  90.     {
  91.         _rewards.clear();
  92.         try
  93.         {
  94.             L2Properties p = new L2Properties("./config/powerpak/webservices/smsonline.properties");
  95.             _RewardID = Integer.parseInt(p.getProperty("RewardID","4037"));
  96.             _prefix = p.getProperty("Prefix","");
  97.             _MsgOk = L2Utils.loadMessage(p.getProperty("SMSOk","%d CoL dobavleno dlya %s"));
  98.             _MsgFail = L2Utils.loadMessage(p.getProperty("SMSFail","%s ne zaregistrirovan na servere"));
  99.             _PlayerMessage = L2Utils.loadMessage(p.getProperty("MessageForPlayer",""));
  100.             StringTokenizer st = new StringTokenizer(p.getProperty("AmountForNumbers",""),";");
  101.             while(st.hasMoreTokens())
  102.             {
  103.                 try
  104.                 {
  105.                     String  s =st.nextToken();
  106.                     int iPos = s.indexOf(":");
  107.                     if(iPos!=-1)
  108.                         _rewards.put(s.substring(0,iPos).trim(), Integer.parseInt(s.substring(iPos+1).trim()));
  109.                 }
  110.                 catch(NumberFormatException e)
  111.                 {
  112.                     if(Config.ENABLE_ALL_EXCEPTIONS)
  113.                         e.printStackTrace();
  114.                    
  115.                     continue;
  116.                 }
  117.             }
  118.         }
  119.         catch(Exception e)
  120.         {
  121.             if(Config.ENABLE_ALL_EXCEPTIONS)
  122.                 e.printStackTrace();
  123.            
  124.             _log.log(Level.WARNING, "WebService: SMSOnline error reading config :",e);
  125.         }
  126.     }
  127.     @Override
  128.     public void handle(HttpExchange params) throws IOException {
  129.         if(params.getRequestMethod().equalsIgnoreCase("GET")) {
  130.             FastMap<String, String> query = new FastMap<String, String>();
  131.             StringBuffer response = new StringBuffer();
  132.             // Parse the parameters passed in the GET request.
  133.             StringTokenizer st = new StringTokenizer(params.getRequestURI().getQuery(),"&");
  134.             while(st.hasMoreTokens()) {
  135.                 String token = st.nextToken();
  136.                 int iPos = token.indexOf("=");
  137.                 if(iPos!=-1) {
  138.                     String param = token.substring(0,iPos).toLowerCase();
  139.                     String value = token.substring(iPos+1);
  140.  
  141.                     // That is the replacement of which is written above.
  142.                     if(value!=null && value.length()>0) {
  143.                         if(value.charAt(0)=='+')
  144.                             value = "+"+URLDecoder.decode(value.substring(1),"UTF-8");
  145.                         else
  146.                             value = URLDecoder.decode(value,"UTF-8");
  147.                     }
  148.                     query.put(param,value);
  149.                 }
  150.  
  151.             }
  152.             if(query.get("pref")!=null && query.get("txt")!=null && query.get("op")!=null &&
  153.                     query.get("phone")!=null && query.get("sn")!=null && query.get("tid")!=null) {
  154.                 boolean isOk = _prefix.length()>0?_prefix.equals(query.get("pref")):true;
  155.                 if(isOk) {
  156.                     L2PcInstance pc = L2Utils.loadPlayer(query.get("txt"));
  157.                     int count = _rewards.containsKey(query.get("sn"))?_rewards.get(query.get("sn")):1;
  158.                     SQLQueue.getInstance().add(new DBUpdater(query.get("txt"),count,query.get("tid"),query.get("phone"),
  159.                                                              query.get("sn"),pc));
  160.                     if(pc!=null)
  161.                         response.append("sms="+String.format(_MsgOk, count,pc.getName()));
  162.                     else
  163.                         response.append("sms="+String.format(_MsgFail, query.get("txt")));
  164.                 }
  165.                 else
  166.                     response.append("sms=Invalid prefix");
  167.             }
  168.             else
  169.             response.append("");
  170.             params.sendResponseHeaders(200, response.length());
  171.             OutputStream os = params.getResponseBody();
  172.             os.write(response.toString().getBytes());
  173.             os.close();
  174.         }
  175.     }
  176. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement