Jump to content
  • 0

Unclosed Connection! Java.lang.runtimeexception


Question

Posted

hey guys i get this error as the title say java.lang.RuntimeException and then my server freezes and nothing happens

 

This is the code i've modified (L2Network & Topzone)

im pretty sure this is causing this problem

Also if you vote for NETWORK and srv votes are 24 and reward at 28

Then srv votes update to ->25 and reward at 30 votes

it doesnt save them...can anyone help me?

package com.l2jfrozen.gameserver.handler;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Set;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;

import com.gargoylesoftware.htmlunit.BrowserVersion;
import com.gargoylesoftware.htmlunit.WebClient;
import com.gargoylesoftware.htmlunit.html.HtmlPage;
import com.l2jfrozen.Config;
import com.l2jfrozen.gameserver.model.L2World;
import com.l2jfrozen.gameserver.model.actor.instance.L2PcInstance;
import com.l2jfrozen.gameserver.model.entity.Announcements;
import com.l2jfrozen.gameserver.powerpak.PowerPakConfig;
import com.l2jfrozen.gameserver.thread.ThreadPoolManager;

/**
 * @author L2jFrozen <br>
 * <br>
 *         Network working with L2jFrozen AutoVoteReward: <br>
 *         Hopzone -> http://l2.hopzone.net/ <br>
 *         Topzone -> http://l2topzone.com/ <br>
 *         L2network -> http://l2network.eu/ <br>
 */

public class AutoVoteRewardHandler
{
	protected static final Logger LOGGER = Logger.getLogger(AutoVoteRewardHandler.class);
	
	protected List<String> already_rewarded;
	
	private int _l2networkVotesCount = 0;
	private int _hopzoneVotesCount = 0;
	private int _topzoneVotesCount = 0;
	protected List<String> _already_rewarded;
	
	protected static boolean _l2network = false;
	protected static boolean _topzone = false;
	protected static boolean _hopzone = false;
	
	private AutoVoteRewardHandler()
	{
		LOGGER.info("Vote Reward System Initiated.");
		
		if (_hopzone)
		{
			int hopzone_votes = getHopZoneVotes();
			
			if (hopzone_votes == -1)
			{
				hopzone_votes = 0;
			}
			
			setHopZoneVoteCount(hopzone_votes);
		}
		
		if (_l2network)
		{
			int l2network_votes = getL2NetworkVotes();
			
			if (l2network_votes == -1)
			{
				l2network_votes = 0;
			}
			
			setL2NetworkVoteCount(l2network_votes);
		}
		
		if (_topzone)
		{
			int topzone_votes = getTopZoneVotes();
			
			if (topzone_votes == -1)
			{
				topzone_votes = 0;
			}
			
			setTopZoneVoteCount(topzone_votes);
		}
		
		ThreadPoolManager.getInstance().scheduleGeneralAtFixedRate(new AutoReward(), PowerPakConfig.VOTES_SYSYEM_INITIAL_DELAY, PowerPakConfig.VOTES_SYSYEM_STEP_DELAY);
	}
	
	protected class AutoReward implements Runnable
	{
		@Override
		public void run()
		{
			final int minutes = (PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 1000) / 60;
			
			if (_hopzone)
			{
				final int hopzone_votes = getHopZoneVotes();
				
				if (hopzone_votes != -1)
				{
					LOGGER.info("[VoteReward] Server HOPZONE Votes: " + hopzone_votes);
					Announcements.getInstance().gameAnnounceToAll("[VoteReward] Actual HOPZONE Votes are " + hopzone_votes + "");
					
					if (hopzone_votes != 0 && hopzone_votes >= getHopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
					{
						_already_rewarded = new ArrayList<>();
						
						final Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
						
						Announcements.getInstance().gameAnnounceToAll("[VoteReward] Great Work! Check your inventory for Reward!");
						
						// L2ItemInstance item;
						for (final L2PcInstance player : pls)
						{
							if (player != null && !player.isInOfflineMode() && player.isOnline() == 1)
							{
								if (player._active_boxes <= 1 || (player._active_boxes > 1 && checkSingleBox(player)))
								{
									
									final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
									for (final Integer i : items)
									{
										// item = player.getInventory().getItemByItemId(i);
										
										// TODO: check on maxstack for item
										player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
										
									}
									
								}
							}
						}
						setHopZoneVoteCount(hopzone_votes);
					}
					Announcements.getInstance().gameAnnounceToAll("[VoteReward] Next Reward in " + minutes + " minutes at " + (getHopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes!");
					// site web
					
					
				}
				
			}
			
			if (_topzone && _hopzone && PowerPakConfig.VOTES_SYSYEM_STEP_DELAY > 0)
			{
				try
				{
					Thread.sleep(PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 2);
				}
				catch (final InterruptedException e)
				{
					if (Config.ENABLE_ALL_EXCEPTIONS)
						e.printStackTrace();
				}
			}
			
			if (_topzone)
			{
				final int topzone_votes = getTopZoneVotes();
				
				if (topzone_votes != -1)
				{
					LOGGER.info("[VoteReward] Server TOPZONE Votes: " + topzone_votes);
					Announcements.getInstance().gameAnnounceToAll("[VoteReward] Actual TOPZONE Votes are " + topzone_votes + "");
					
					if (topzone_votes != 0 && topzone_votes >= getTopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
					{
						_already_rewarded = new ArrayList<>();
						
						final Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
						
						Announcements.getInstance().gameAnnounceToAll("[VoteReward] Great Work! Check your inventory for Reward!");
						
						// L2ItemInstance item;
						for (final L2PcInstance player : pls)
						{
							if (player != null && !player.isInOfflineMode() && player.isOnline() == 1)
							{
								if (player._active_boxes <= 1 || (player._active_boxes > 1 && checkSingleBox(player)))
								{
									final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
									for (final Integer i : items)
									{
										// item = player.getInventory().getItemByItemId(i);
										
										// TODO: check on maxstack for item
										player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
									}
								}
							}
						}
						setTopZoneVoteCount(topzone_votes);
					}
					
					Announcements.getInstance().gameAnnounceToAll("[VoteReward] Next Reward in " + minutes + " minutes at " + (getTopZoneVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes!");
					// site web
					
				}
			}
			
			if (_topzone && _hopzone && _l2network && PowerPakConfig.VOTES_SYSYEM_STEP_DELAY > 0)
			{
				try
				{
					Thread.sleep(PowerPakConfig.VOTES_SYSYEM_STEP_DELAY / 2);
				}
				catch (final InterruptedException e)
				{
					if (Config.ENABLE_ALL_EXCEPTIONS)
						e.printStackTrace();
				}
			}
			
			  if(_l2network)
	            {
	                int l2network_votes = getL2NetworkVotes();
	                if(l2network_votes != -1)
	                {
	                    LOGGER.info("Network Votes: " + l2network_votes);
	                    Announcements.getInstance().gameAnnounceToAll("[VoteReward] Actual L2NETWORK Votes are " + l2network_votes + "");

	                    if(l2network_votes != 0 && l2network_votes >= getL2NetworkVoteCount() + PowerPakConfig.VOTES_FOR_REWARD)
	                    {
	                        already_rewarded = new ArrayList<>();

	                        Collection<L2PcInstance> pls = L2World.getInstance().getAllPlayers();
	                        Announcements.getInstance().gameAnnounceToAll("[VoteReward] Great Work! Check your inventory for Reward!");

	                        for(L2PcInstance player : pls)
	                        {
	                            if(player != null)
	                            {
	                            	final Set<Integer> items = PowerPakConfig.VOTES_REWARDS_LIST.keySet();
									for (final Integer i : items)
									{
										// item = player.getInventory().getItemByItemId(i);
										
										// TODO: check on maxstack for item
										player.addItem("reward", i, PowerPakConfig.VOTES_REWARDS_LIST.get(i), player, true);
									}
	                                }
	                            }
	                        }

	                        setL2NetworkVoteCount(l2network_votes);
	                    }
	                    Announcements.getInstance().gameAnnounceToAll("[VoteReward] Next Reward in " + minutes + " minutes at " + (getL2NetworkVoteCount() + PowerPakConfig.VOTES_FOR_REWARD) + " Votes!");
	                }
	            }
	        }
	
	// Check boxes
	protected boolean checkSingleBox(final L2PcInstance player)
	{
		if (player == null)
			return false;
		
		if (player.getClient() != null && player.getClient().getConnection() != null && !player.getClient().getConnection().isClosed() && player.isOnline() == 1 && !player.isInOfflineMode())
		{
			final String playerip = player.getClient().getConnection().getInetAddress().getHostAddress();
			
			if (_already_rewarded.contains(playerip))
				return false;
			_already_rewarded.add(playerip);
			return true;
		}
		
		// if no connection (maybe offline shop) dnt reward
		return false;
	}
	
	 protected int getHopZoneVotes()
	    {
	        try
	        {
	            BufferedReader in = new BufferedReader(new InputStreamReader(new URL(PowerPakConfig.VOTES_SITE_HOPZONE_URL).openConnection().getInputStream()));
	            String[] tokens = in.readLine().split(",");
	            in.close();
	            return Integer.parseInt(tokens[1].substring(tokens[1].indexOf(":") + 1, tokens[1].length()));
	        }
	        catch (final Exception e)
	        {
	                LOGGER.warn("[VoteReward] Hopzone is offline or something is wrong in link");
	                Announcements.getInstance().gameAnnounceToAll("[VoteReward] HOPZONE is offline. We will check reward as it will be online again");
	        }
	        return -1;
	    }
	
	
	    protected int getTopZoneVotes()
	    {
	        InputStreamReader isr = null;
	        BufferedReader br = null;
	        try
	        {
	     	   URLConnection con = new URL(PowerPakConfig.VOTES_SITE_TOPZONE_URL).openConnection();
	                 con.addRequestProperty("User-Agent", "L2TopZone");
	                 con.setConnectTimeout(5000);
	                 isr = new InputStreamReader(con.getInputStream());
	                 br = new BufferedReader(isr);

	                 String line;
	                 while ((line = br.readLine()) != null)
	                 {
	                         
	                                 int votes = Integer.valueOf(line);
	                                 return votes;
	                       
	                 }
	                
	                 br.close();
	                 isr.close();
	         }
	        catch (Exception e)
	        {
	            if (_topzone)
	            	LOGGER.warn("TOPZONE is offline. We will check reward as it will be online again.");
	            Announcements.getInstance().gameAnnounceToAll("[VoteReward] TOPZONE is offline. We will check reward as it will be online again");
	        }
	        return -1;
	    }
	
	protected int getL2NetworkVotes()
    {
        InputStreamReader isr = null;
        BufferedReader br = null;
        try
        {
                URLConnection con = new URL(PowerPakConfig.VOTES_SITE_L2NETWORK_URL).openConnection();
                con.addRequestProperty("User-Agent", "Mozilla/5.0");
                con.setConnectTimeout(5000);
                isr = new InputStreamReader(con.getInputStream());
                br = new BufferedReader(isr);
               
                String line;
                while ((line = br.readLine()) != null)
                {
                        if (line.contains("<div class=\"tls-in-sts\"><b style"))
                        {
                                int votes = Integer.valueOf(line.split(">")[2].replace("</b", ""));
                                return votes;
                        }
                }
               
                br.close();
                isr.close();
        }
        catch (Exception e)
        {
            if (_l2network)
            	LOGGER.warn("NETWORK is offline. We will check reward as it will be online again.");
            Announcements.getInstance().gameAnnounceToAll("[VoteReward] L2NETWORK is offline. We will check reward as it will be online again");
        }
        return -1;
    }
	
	protected void setHopZoneVoteCount(final int voteCount)
	{
		_hopzoneVotesCount = voteCount;
	}
	
	protected int getHopZoneVoteCount()
	{
		return _hopzoneVotesCount;
	}
	
	protected void setTopZoneVoteCount(final int voteCount)
	{
		_topzoneVotesCount = voteCount;
	}
	
	protected int getTopZoneVoteCount()
	{
		return _topzoneVotesCount;
	}
	
	protected void setL2NetworkVoteCount(final int voteCount)
	{
		_l2networkVotesCount = voteCount;
	}
	
	protected int getL2NetworkVoteCount()
	{
		return _l2networkVotesCount;
	}
	
	public static AutoVoteRewardHandler getInstance()
	{
		Logger.getLogger("com.gargoylesoftware").setLevel(Level.OFF);
		
		if (PowerPakConfig.VOTES_SITE_HOPZONE_URL != null && !PowerPakConfig.VOTES_SITE_HOPZONE_URL.equals(""))
			_hopzone = true;
		
		if (PowerPakConfig.VOTES_SITE_TOPZONE_URL != null && !PowerPakConfig.VOTES_SITE_TOPZONE_URL.equals(""))
			_topzone = true;
		
		if (PowerPakConfig.VOTES_SITE_L2NETWORK_URL != null && !PowerPakConfig.VOTES_SITE_L2NETWORK_URL.equals(""))
			_l2network = true;
		
		if (_topzone || _hopzone || _l2network)
			return SingletonHolder._instance;
		
		return null;
	}
	
	@SuppressWarnings("synthetic-access")
	private static class SingletonHolder
	{
		protected static final AutoVoteRewardHandler _instance = new AutoVoteRewardHandler();
	}
}

Recommended Posts

  • 0
Posted (edited)

Nope, and it's my final answer. You can seek more about the subject on stackoverflow website, I guess. Put all ressources on the try, like that you don't have to care about closing them. Atm you got ressource leak (and if your eclipse was correctly setup-ed, it would show as warning).

 

Edit : if it's chinese, take your time and learn.

i appreciate that you changed your mind and also thanks for taking the time to write those LINES ..

Again thanks !

Edited by protoftw
  • 0
Posted

Gtfo, nobody in this community talk to me like that. You hurt my feelings, i would normally ask sweets to post another drama gif that represent my current damaged feelings but im sure he is crying in the kitchen right now eating cookies and getting weight. 

 

Ps. considered serious and helpful? As long as you lick us for help cause you're unable to do it on your own, we are adults, we are helpful and you're the kid who ask for the lolipop. Now go to your bed, you have school tomorrow.

I gave you fixed code. 

 OMG MATE JUST OMG...LOOK AT YOU ..WHAT IS WRONG WITH YOUR LIFE?

THOSE THOUGHTS AREN'T NORMAL AND THOSE WORDS ...JUST..JUST...

OK...

YOU NEED TO RELAX.....please consider taking a nap ..that's the first step..and stop replying for god shake..end of story :P

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...