diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java index 8db7788..4120783 100644 --- a/src/main/java/cactusServer/entities/Player.java +++ b/src/main/java/cactusServer/entities/Player.java @@ -17,8 +17,11 @@ private Quaternion3D angle; private CameraState cameraState; private EmoteState emoteState; + private long lastOperateTime = System.nanoTime(); @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; + @JSONHint(ignore = true) + public static final long STOP_TIME_LIMIT = (long)(30 * Math.pow(10, 9)); private Player() { // JSONDecode���̌Ăяo���p @@ -80,6 +83,11 @@ public EmoteState getEmoteState() { return emoteState; } + + @JSONHint(ignore = true) + public long getLastOperateTime() { + return lastOperateTime; + } public void setInstanceID(String instanceID) { this.instanceID = instanceID; @@ -112,6 +120,11 @@ public void setAnimationClassToStart(EmoteState.EmoteType animationClassToStart) { setEmoteState(new EmoteState(animationClassToStart)); } + + @JSONHint(ignore = true) + public void setLastOperateTime(long lastOperateTime) { + this.lastOperateTime = lastOperateTime; + } public Player update(String characterID, Position3D position, Quaternion3D angle, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java index 7e669eb..32c7785 100644 --- a/src/main/java/cactusServer/models/Instances.java +++ b/src/main/java/cactusServer/models/Instances.java @@ -111,6 +111,13 @@ player.update(characterID, position, angle, cameraState, animationClassToStart); return player; } + + public Player updatePlayer(String playerId, String characterID, Position3D position, Quaternion3D angle, + CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastOperateTime) { + Player player = updatePlayer(playerId, characterID, position, angle, cameraState, animationClassToStart); + player.setLastOperateTime(lastOperateTime); + return player; + } public Instance destroyInstance(String instanceId) { return instanceMap.remove(instanceId); @@ -122,6 +129,8 @@ return null; } player.destroy(); + Instance instance = Instances.getInstance().getInstance(player.getInstanceID()); + instance.getUniverse().displace(player.getPlaceable()); return playerMap.remove(playerId); } } diff --git a/src/main/java/cactusServer/resources/PlayersRest.java b/src/main/java/cactusServer/resources/PlayersRest.java index 9c92d33..0fadd0f 100644 --- a/src/main/java/cactusServer/resources/PlayersRest.java +++ b/src/main/java/cactusServer/resources/PlayersRest.java @@ -20,6 +20,7 @@ import cactusServer.entities.EmoteState; import cactusServer.entities.Player; import cactusServer.models.Instances; +import cactusServer.utils.App; import net.arnx.jsonic.JSON; @Path("/instances/players") @@ -64,8 +65,11 @@ @FormParam("position") Position3D position, @FormParam("angle") Quaternion3D angle, @FormParam("cameraState") CameraState cameraState, @FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart) { - return JSON.encode(Instances.getInstance().updatePlayer(playerId, characterID, position, angle, cameraState, - animationClassToStart)); + Player player = Instances.getInstance().updatePlayer(playerId, characterID, position, angle, cameraState, + animationClassToStart, System.nanoTime()); + return JSON.encode(player); +// return JSON.encode(Instances.getInstance().updatePlayer(playerId, characterID, position, angle, cameraState, +// animationClassToStart)); } @Path("/{playerId}") diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index 0e7f785..1858f1e 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -1,5 +1,7 @@ package cactusServer.utils; +import java.util.Iterator; +import java.util.Map; import java.util.Timer; import java.util.concurrent.ScheduledThreadPoolExecutor; import java.util.concurrent.TimeUnit; @@ -39,24 +41,25 @@ Instances.getInstance(); Accounts.getInstance(); initDummy(); - start(1); + start(1000); System.out.println("pass"); } @Override public void run() { - //System.out.println("�^�X�N�����s"); - instancesSize = Instances.getInstance().getInstances().size(); - for(int i=0;i> it = Instances.getInstance().getPlayers().entrySet().iterator(); + while (it.hasNext()) { + Map.Entry entry = it.next(); + String playerId = entry.getKey(); + Player player = entry.getValue(); + long lastOperateTime = player.getLastOperateTime(); + System.out.println(currentTime + ", " + (lastOperateTime + Player.STOP_TIME_LIMIT) + " // playerId: " + playerId); + if (currentTime > (lastOperateTime + Player.STOP_TIME_LIMIT)) { + System.out.println("delete started (playerId: " + playerId + ")"); + player.destroy(); + Instance instance = Instances.getInstance().getInstance(player.getInstanceID()); + instance.getUniverse().displace(player.getPlaceable()); + it.remove(); + System.out.println("delete finished (playerId: " + playerId + ")"); + } + } + System.out.println(); + } } \ No newline at end of file