Перейти к содержанию
Авторизация  
CalypsoToolz

L2Topmanager На L2J

Рекомендуемые сообщения

Всем привет, решил прикрутить систему выдачи бонусов за голос на л2топе к сборке L2J, взял менеджера здесь. Всё вроде-бы сделал правильно, но после загрузки сервера и последующего обновления списка проголосовавших сыпаются ошибки:

java.sql.SQLException: You can't operate on a closed Connection!!!
       at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:106)
       at com.mchange.v2.sql.SqlUtils.toSQLException(SqlUtils.java:65)
       at com.mchange.v2.c3p0.impl.NewProxyConnection.prepareStatement(NewProxyC
onnection.java:222)
       at com.l2jserver.gameserver.instancemanager.vote.L2TopManager.checkAndSav
eFromDb(L2TopManager.java:201)
       at com.l2jserver.gameserver.instancemanager.vote.L2TopManager.parse(L2Top
Manager.java:143)
       at com.l2jserver.gameserver.instancemanager.vote.L2TopManager.access$600(
L2TopManager.java:25)
       at com.l2jserver.gameserver.instancemanager.vote.L2TopManager$ConnectAndU
pdate.run(L2TopManager.java:308)
       at com.l2jserver.gameserver.ThreadPoolManager$RunnableWrapper.run(ThreadP
oolManager.java:86)
       at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471
)
       at java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:
351)
       at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:178)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.a
ccess$301(ScheduledThreadPoolExecutor.java:178)
       at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.r
un(ScheduledThreadPoolExecutor.java:293)
       at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.j
ava:1145)
       at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.
java:615)
       at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException

 

В чем может быть проблема?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

checkAndSaveFromDb не может сохранить в бд или неверно парсит с топа

Изменено пользователем inFA
  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

checkAndSaveFromDb не может сохранить в бд или неверно парсит с топа

Файлы со списком голосов появляются. Я так понял что коннект к бд закрывается и не открывается.

 

Вот на всякий случай код l2topmanager, может кто-нибудь что-нибудь подскажет:

 

 

package com.l2jserver.gameserver.instancemanager.vote;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Calendar;
import java.util.Collection;
import java.util.NoSuchElementException;
import java.util.StringTokenizer;
import java.util.logging.Logger;
import com.l2jserver.Config;
import com.l2jserver.L2DatabaseFactory;
import com.l2jserver.gameserver.ThreadPoolManager;
import com.l2jserver.gameserver.model.L2World;
import com.l2jserver.gameserver.model.actor.instance.L2PcInstance;
public class L2TopManager
{
private static Logger _log = Logger.getLogger(L2TopManager.class.getName());
private static final String voteWeb = Config.DATAPACK_ROOT + "/data/vote-web.txt";
private static final String voteSms = Config.DATAPACK_ROOT + "/data/vote-sms.txt";
private static L2TopManager _instance;
public static L2TopManager getInstance()
{
if (_instance == null)
{
_instance = new L2TopManager();
}
return _instance;
}

public L2TopManager()
{
if (Config.L2TOP_SERVICE_ENABLED)
{
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new ConnectAndUpdate(), Config.L2TOP_INTERVAL, Config.L2TOP_INTERVAL);
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new Clean(), Config.L2TOP_INTERVAL, Config.L2TOP_INTERVAL);
ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new GiveReward(), Config.L2TOP_INTERVAL, Config.L2TOP_INTERVAL);
_log.info("L2TopManager: Started.");
}
else
{
_log.info("L2TopManager: Disabled.");
}
}
private void update()
{
String out_sms = getPage(Config.L2TOP_SMS_ADRESS);
String out_web = getPage(Config.L2TOP_WEB_ADRESS);
File sms = new File(voteSms);
File web = new File(voteWeb);
FileWriter save = null;
try
{
save = new FileWriter(sms);
save.write(out_sms);
save = new FileWriter(web);
save.write(out_web);
}
catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
if (save != null)
save.close();
}
catch (Exception e1)
{
e1.printStackTrace();
}
}
}
private static String getPage(String address)
{
StringBuffer buf = new StringBuffer();
try
{
Socket s = new Socket("l2top.ru", 80);
s.setSoTimeout(30000);
String request = "GET " + address + " HTTP/1.1\r\n" + "User-Agent: http:\\" + Config.L2_TOP_SERVER_ADRES + " server\r\n" + "Host: http:\\" + Config.L2_TOP_SERVER_ADRES + " \r\n" + "Accept: */*\r\n" + "Connection: close\r\n" + "\r\n";
s.getOutputStream().write(request.getBytes());
BufferedReader in = new BufferedReader(new InputStreamReader(s.getInputStream(), "Cp1251"));
for (String line = in.readLine(); line != null; line = in.readLine())
{
buf.append(line);
buf.append("\r\n");
}
s.close();
}
catch (Exception e)
{
buf.append("Connection error");
}
return buf.toString();
}
private void parse(boolean sms)
{
try
{
BufferedReader in = new BufferedReader(new FileReader(sms ? voteSms : voteWeb));
String line = in.readLine();
while (line != null)
{
Calendar cal = Calendar.getInstance();
int year = cal.get(1);
if (line.startsWith("" + year))
{
try
{
StringTokenizer st = new StringTokenizer(line, "\t -:");
cal.set(1, Integer.parseInt(st.nextToken()));
cal.set(2, Integer.parseInt(st.nextToken()));
cal.set(5, Integer.parseInt(st.nextToken()));
cal.set(11, Integer.parseInt(st.nextToken()));
cal.set(12, Integer.parseInt(st.nextToken()));
cal.set(13, Integer.parseInt(st.nextToken()));
cal.set(14, 0);
String nick = st.nextToken();
int mult = 1;
if (sms)
mult = Integer.parseInt(new StringBuffer(st.nextToken()).delete(0, 1).toString());
if (cal.getTimeInMillis() + Config.L2TOP_CLEAN_DAY * 86400000 > System.currentTimeMillis())
checkAndSaveFromDb(cal.getTimeInMillis(), nick, mult);
}
catch (NoSuchElementException nsee)
{
}
}
else
line = in.readLine();
}
}
catch (Exception e)
{
e.printStackTrace();
}
}
private synchronized void clean()
{
Calendar cal = Calendar.getInstance();
cal.add(6, -Config.L2TOP_CLEAN_DAY);
Connection con = null;
PreparedStatement statement = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("DELETE FROM character_vote WHERE date<?");
statement.setLong(1, cal.getTimeInMillis());
statement.execute();
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
L2DatabaseFactory.close(con);
}
}
private synchronized void checkAndSaveFromDb(long date, String nick, int mult)
{
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
statement = con.prepareStatement("SELECT charId FROM characters WHERE char_name=?");
statement.setString(1, nick);
rset = statement.executeQuery();
int objId = 0;
if (rset.next())
{
objId = rset.getInt("charId");
}
if (objId > 0)
{
L2DatabaseFactory.close(con);
statement = con.prepareStatement("SELECT * FROM character_vote WHERE id=? AND date=? AND multipler=?");
statement.setInt(1, objId);
statement.setLong(2, date);
statement.setInt(3, mult);
rset = statement.executeQuery();
if (!rset.next())
{
L2DatabaseFactory.close(con);
statement = con.prepareStatement("INSERT INTO character_vote (date, id, nick, multipler) values (?,?,?,?)");
statement.setLong(1, date);
statement.setInt(2, objId);
statement.setString(3, nick);
statement.setInt(4, mult);
statement.execute();
}
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
L2DatabaseFactory.close(con);
}
}
private synchronized void giveReward()
{
Connection con = null;
PreparedStatement statement = null;
ResultSet rset = null;
try
{
con = L2DatabaseFactory.getInstance().getConnection();
final Collection<L2PcInstance> players = L2World.getInstance().getAllPlayers().values();
for (L2PcInstance player : players)
{
int objId = player.getObjectId();
int mult = 0;
statement = con.prepareStatement("SELECT multipler FROM character_vote WHERE id=? AND has_reward=0");
statement.setInt(1, objId);
rset = statement.executeQuery();
while (rset.next())
{
mult += rset.getInt("multipler");
}
L2DatabaseFactory.close(con);
statement = con.prepareStatement("UPDATE character_vote SET has_reward=1 WHERE id=?");
statement.setInt(1, objId);
statement.executeUpdate();
if (mult > 0)
{
player.sendMessage("Администрация сервера " + Config.L2_TOP_SERVER_NAME + " благодарит Вас за голосование, не забывайте голосовать завтра!");
player.getInventory().addItem("L2Top Reward", Config.L2_TOP_REWARD_ID, Config.L2_TOP_REWARD_COUNT * mult, player, null);
}
L2DatabaseFactory.close(con);
}
}
catch (SQLException e)
{
e.printStackTrace();
}
finally
{
L2DatabaseFactory.close(con);
}
}
private class GiveReward
implements Runnable
{
private GiveReward()
{
}
public void run()
{
L2TopManager.this.giveReward();
}
}
private class Clean
implements Runnable
{
private Clean()
{
}
public void run()
{
L2TopManager.this.clean();
}
}
private class ConnectAndUpdate
implements Runnable
{
private ConnectAndUpdate()
{
}
public void run()
{
L2TopManager.this.update();
L2TopManager.this.parse(true);
L2TopManager.this.parse(false);
}
}
}

 

 

Изменено пользователем BymerOK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переписывать надо. Т.к о2топ что-то сделал ято зыкрывается коннект, мой знакомый чинил у себя на хф5.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Переписывать надо. Т.к о2топ что-то сделал ято зыкрывается коннект, мой знакомый чинил у себя на хф5.

Исчерпывающий таки ответ) Было бы все так просто - я бы не задал вопрос на форуме.

Изменено пользователем BymerOK

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Или же может кто-нибуть поделится L2Topmanager'ом для L2J сборки? С меня жирный + ))

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...