Merge pull request #421 from CharonInferar/vehicles

Exception handling for Harvester Service future executor handler
This commit is contained in:
CharonInferar
2014-04-13 14:41:10 +02:00
2 changed files with 38 additions and 7 deletions
+1 -2
View File
@@ -397,8 +397,7 @@ public class ObjectService implements INetworkDispatch {
float positionY = core.terrainService.getHeight(planet.getID(), position.x, position.z)-1f;
Point3D newpoint = new Point3D(position.x,positionY,position.z);
object = new HarvesterObject(objectID, planet, Template, newpoint, orientation);
core.harvesterService.addHarvester(object);
object = new HarvesterObject(objectID, planet, Template, newpoint, orientation);
} else {
return null;
+37 -5
View File
@@ -30,6 +30,7 @@ import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.Vector;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.ScheduledFuture;
@@ -149,14 +150,39 @@ public class HarvesterService implements INetworkDispatch {
}
}, 10, 5000, TimeUnit.MILLISECONDS);
ExecutionSurveillanceThread executionSurveillance = new ExecutionSurveillanceThread(task);
executionSurveillance.start();
}
class ExecutionSurveillanceThread extends Thread {
ScheduledFuture<?> task;
public ExecutionSurveillanceThread(ScheduledFuture<?> task) {
this.task = task;
}
public void run() {
try {
try {
task.get();
} catch (InterruptedException e1) {
System.err.println("InterruptedException IN HARVESTERSERVICE !!! " + e1.getMessage());
}
} catch (ExecutionException e2) {
System.err.println("EXCEPTION IN HARVESTERSERVICE !!! " + e2.getMessage());
System.err.println("EXCEPTION CAUSE : " + e2.getCause());
}
}
}
public void ServiceProcessing(){
synchronized(allHarvesters){
for (HarvesterObject harvester : allHarvesters){
updateHarvester(harvester);
if (harvester!=null)
updateHarvester(harvester);
}
allHarvesters.removeAll(Collections.singleton(null));
}
synchronized(allConstructors){
Vector<InstallationObject> removeConstructors = new Vector<InstallationObject>();
@@ -166,19 +192,22 @@ public class HarvesterService implements INetworkDispatch {
removeConstructors.add(constructor);
}
allConstructors.removeAll(removeConstructors);
allConstructors.removeAll(Collections.singleton(null));
}
}
public void addHarvester(SWGObject harvester){
synchronized(allHarvesters){
allHarvesters.add((HarvesterObject)harvester);
if (harvester!=null)
allHarvesters.add((HarvesterObject)harvester);
}
}
public void removeHarvester(SWGObject harvester){
synchronized(allHarvesters){
allHarvesters.remove((HarvesterObject)harvester);
if (harvester!=null)
allHarvesters.remove((HarvesterObject)harvester);
}
}
@@ -432,6 +461,7 @@ public class HarvesterService implements INetworkDispatch {
deed.setSurplusPower((int)harvester.getPowerLevel());
deed.setAttributes();
removeHarvester(harvester);
core.objectService.destroyObject(harvester.getObjectID());
SWGObject crafterInventory = owner.getSlottedObject("inventory");
@@ -969,6 +999,8 @@ public class HarvesterService implements INetworkDispatch {
float positionY = NGECore.getInstance().terrainService.getHeight(actor.getPlanetId(), object.getPosition().x, object.getPosition().z);
harvester.setPosition(new Point3D(object.getPosition().x,positionY, object.getPosition().z));
core.simulationService.add(harvester, harvester.getPosition().x, harvester.getPosition().z, true);
addHarvester(harvester);
PlayerObject player = (PlayerObject) actor.getSlottedObject("ghost");
WaypointObject constructionWaypoint = (WaypointObject)NGECore.getInstance().objectService.createObject("object/waypoint/shared_world_waypoint_blue.iff", actor.getPlanet(), harvester.getPosition().x, 0 ,harvester.getPosition().z);
String displayname = "@installation_n:"+harvester.getStfName();
@@ -1020,7 +1052,7 @@ public class HarvesterService implements INetworkDispatch {
public void enterStructurePlacementMode(SWGObject object, CreatureObject actor){
if (!core.terrainService.canBuildAtPosition(actor,actor.getPosition().x,actor.getPosition().z)){
if (!actor.getClient().isGM() && !core.terrainService.canBuildAtPosition(actor,actor.getPosition().x,actor.getPosition().z)){
actor.sendSystemMessage("@player_structure:not_permitted", (byte) 0);
return;
}