Untitled
unknown
plain_text
3 years ago
8.8 kB
9
Indexable
package ballistickemu.Types;
import ballistickemu.Lobby.LobbyServer;
import ballistickemu.Main;
import ballistickemu.Tools.DatabaseTools;
import java.io.PrintStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock.ReadLock;
public class StickRoom
{
private StickClientRegistry CR;
private String Name;
private String MapID;
private int CycleMode;
private Boolean isPrivate;
private int RoundTime;
private int StorageKey;
private String MapCycleList;
private Boolean requiresPass;
private LinkedHashMap<String, StickClient> VIPs;
public ReentrantReadWriteLock VIPLock;
private String CreatorName;
public StickRoom()
{
this.CR = new StickClientRegistry(Boolean.valueOf(false));
}
public StickRoom(String paramString1, String paramString2, int paramInt, Boolean paramBoolean1, LinkedHashMap<String, StickClient> paramLinkedHashMap, Boolean paramBoolean2, String paramString3)
{
this.Name = paramString1;
this.MapID = paramString2;
this.CycleMode = paramInt;
this.isPrivate = paramBoolean1;
this.RoundTime = 330;
this.CR = new StickClientRegistry(Boolean.valueOf(false));
this.VIPs = paramLinkedHashMap;
this.requiresPass = paramBoolean2;
this.VIPLock = new ReentrantReadWriteLock();
this.CreatorName = paramString3;
Main.getLobbyServer().getRoomRegistry().scheduleRoomTimer(new OnTimedEvent());
}
public void BroadcastToRoom(StickPacket paramStickPacket)
{
ArrayList localArrayList = new ArrayList();
this.CR.ClientsLock.readLock().lock();
StickClient localStickClient;
try {
for (localIterator = this.CR.getAllClients().iterator(); localIterator.hasNext();) { localStickClient = (StickClient)localIterator.next();
try
{
if (!localStickClient.getLobbyStatus().booleanValue()) {
localStickClient.write(paramStickPacket);
}
}
catch (Exception localException) {
localException.printStackTrace();
localArrayList.add(localStickClient);
}
}
} finally {
this.CR.ClientsLock.readLock().unlock();
}
for (Iterator localIterator = localArrayList.iterator(); localIterator.hasNext();) { localStickClient = (StickClient)localIterator.next();
this.CR.deregisterClient(localStickClient);
}
localArrayList.removeAll(localArrayList);
}
public StickClientRegistry GetCR()
{
return this.CR;
}
public void setName(String paramString)
{
this.Name = paramString;
}
public void setCreatorName(String paramString)
{
this.Name = paramString;
}
public void setMapID(String paramString)
{
this.MapID = paramString;
}
public void setCycleMode(int paramInt)
{
this.CycleMode = paramInt;
}
public void setPrivacy(Boolean paramBoolean)
{
this.isPrivate = paramBoolean;
}
public void setRoundTime(int paramInt)
{
this.RoundTime = paramInt;
}
public void setMapCycleList(String paramString) {
this.MapCycleList = paramString;
}
public String getName()
{
return this.Name;
}
public String getCreatorName()
{
return this.CreatorName;
}
public String getMapID()
{
return this.MapID;
}
public int getCycleMode()
{
return this.CycleMode;
}
public Boolean getPrivacy()
{
return this.isPrivate;
}
public Boolean getNeedsPass()
{
return this.requiresPass;
}
public int getCurrentRoundTime()
{
return this.RoundTime;
}
public int getStorageKey()
{
return this.StorageKey;
}
public String getMapCycleList()
{
if (this.MapCycleList != null)
return this.MapCycleList;
return null;
}
public void setStorageKey(int paramInt) {
this.StorageKey = paramInt;
}
public void setNeedsPass(Boolean paramBoolean)
{
this.requiresPass = paramBoolean;
}
public void killRoom()
{
this.CR.ClientsLock.writeLock().lock();
try
{
for (StickClient SC : this.CR.getAllClients())
{
SC.getIoSession().close(false);
}
Main.getLobbyServer().getRoomRegistry().deRegisterRoom(Main.getLobbyServer().getRoomRegistry().GetRoomFromName(Name));
}
finally {
this.CR.ClientsLock.writeLock().unlock();
}
}
public LinkedHashMap<String, StickClient> getVIPs()
{
return this.VIPs;
}
class OnTimedEvent
implements Runnable
{
OnTimedEvent() {}
public void run()
{
if (StickRoom.this.CR.getAllClients().size() == 0)
{
Main.getLobbyServer().getRoomRegistry().deRegisterRoom(Main.getLobbyServer().getRoomRegistry().GetRoomFromName(StickRoom.this.Name));
try
{
StickRoom localStickRoom = Main.getLobbyServer().getRoomRegistry().GetRoomFromName(StickRoom.this.Name);
if (localStickRoom != null)
Main.getLobbyServer().getRoomRegistry().GetRoomFromName(StickRoom.this.Name).finalize();
finalize();
} catch (Throwable localThrowable) {
System.out.println("There was an error deleting room " + StickRoom.this.Name);
localThrowable.printStackTrace();
}
return;
}
if (StickRoom.this.RoundTime > 0) {
StickRoom.this.RoundTime = (StickRoom.this.RoundTime - 1);
} else
StickRoom.this.RoundTime = 330;
if (StickRoom.this.RoundTime == 31)
{
updateStats(getWinner());
}
}
private StickClient getWinner()
{
int i = -1;
Object localObject1 = null;
StickRoom.this.CR.ClientsLock.readLock().lock();
try
{
for (StickClient localStickClient : StickRoom.this.CR.getAllClients())
{
if (i == -1)
{
localObject1 = localStickClient;
i = localStickClient.getGameKills();
}
else if ((localStickClient != null) && (localStickClient.getGameKills() > i))
{
localObject1 = localStickClient;
i = localStickClient.getGameKills();
}
}
} finally {
StickRoom.this.CR.ClientsLock.readLock().unlock();
}
if (localObject1 == null)
{
System.out.println("Winner was null - setting winner as blank client");
return new StickClient();
}
((StickClient)localObject1).incrementGameWins();
return (StickClient)localObject1;
}
private void updateStats(StickClient paramStickClient)
{
StickRoom.this.CR.ClientsLock.readLock().lock();
try
{
for (StickClient localStickClient : StickRoom.this.CR.getAllClients())
{
try
{
if ((!localStickClient.getQuickplayStatus().booleanValue()) && (localStickClient.getDbID() != -1))
{
int i = 0;
if (localStickClient.equals(paramStickClient))
i = 1;
PreparedStatement localPreparedStatement = DatabaseTools.getDbConnection().prepareStatement("UPDATE `users` SET `rounds` = `rounds` + 1, `kills` = `kills` + ?, `deaths` = `deaths` + ?, `wins` = `wins` + ? WHERE `UID` = ?");
localPreparedStatement.setInt(1, localStickClient.getGameKills());
localPreparedStatement.setInt(2, localStickClient.getGameDeaths());
localPreparedStatement.setInt(3, i);
localPreparedStatement.setInt(4, localStickClient.getDbID());
localPreparedStatement.executeUpdate();
localStickClient.setGameKills(0);
localStickClient.setGameDeaths(0);
System.out.println("Updated stats for user: " + localStickClient.getName());
}
}
catch (Exception localException)
{
System.out.println("There was an error updating round stats for user " + localStickClient.getName());
localException.printStackTrace();
}
}
}
finally
{
StickRoom.this.CR.ClientsLock.readLock().unlock();
}
}
}
public void finalize() throws Throwable
{
super.finalize();
}
}Editor is loading...