diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java index 4120783..82b391f 100644 --- a/src/main/java/cactusServer/entities/Player.java +++ b/src/main/java/cactusServer/entities/Player.java @@ -17,7 +17,7 @@ private Quaternion3D angle; private CameraState cameraState; private EmoteState emoteState; - private long lastOperateTime = System.nanoTime(); + private long lastUpdateTime = System.nanoTime(); @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12; @JSONHint(ignore = true) @@ -42,7 +42,7 @@ setEmoteState(new EmoteState()); } Character character = getCharacter(); - readCharacterData(); + readCharacterData(character); initPlaceable(character.getModelID()); } @@ -85,8 +85,8 @@ } @JSONHint(ignore = true) - public long getLastOperateTime() { - return lastOperateTime; + public long getLastUpdateTime() { + return lastUpdateTime; } public void setInstanceID(String instanceID) { @@ -122,15 +122,17 @@ } @JSONHint(ignore = true) - public void setLastOperateTime(long lastOperateTime) { - this.lastOperateTime = lastOperateTime; + public void setLastUpdateTime(long lastUpdateTime) { + this.lastUpdateTime = lastUpdateTime; } public Player update(String characterID, Position3D position, Quaternion3D angle, CameraState cameraState, EmoteState.EmoteType animationClassToStart) { - setCharacterID(characterID); setPosition(position); setAngle(angle); + if (!this.characterID.equals(characterID)) { + changeCharacter(characterID); + } setCameraState(cameraState); updateEmoteType(animationClassToStart); // updateAreaURI(); @@ -169,7 +171,9 @@ public void changeCharacter(String characterID) { writeCharacterData(); setCharacterID(characterID); - readCharacterData(); + Character character = getCharacter(); + readCharacterData(character); + initPlaceable(character.getModelID()); } public void destroy() { @@ -186,13 +190,14 @@ setAreaURI(character.getAreaURI()); } - private void readCharacterData() { - Character character = getCharacter(); - readCharacterData(character); - } +// private void readCharacterData() { +// Character character = getCharacter(); +// readCharacterData(character); +// } private void writeCharacterData() { Character character = getCharacter(); +// if (character == null) return; character.update(position, angle, areaURI); } } diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java index 32c7785..3f99c4a 100644 --- a/src/main/java/cactusServer/models/Instances.java +++ b/src/main/java/cactusServer/models/Instances.java @@ -113,9 +113,9 @@ } public Player updatePlayer(String playerId, String characterID, Position3D position, Quaternion3D angle, - CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastOperateTime) { + CameraState cameraState, EmoteState.EmoteType animationClassToStart, long lastUpdateTime) { Player player = updatePlayer(playerId, characterID, position, angle, cameraState, animationClassToStart); - player.setLastOperateTime(lastOperateTime); + player.setLastUpdateTime(lastUpdateTime); return player; } diff --git a/src/main/java/cactusServer/resources/PlayersRest.java b/src/main/java/cactusServer/resources/PlayersRest.java index 0fadd0f..1e0352a 100644 --- a/src/main/java/cactusServer/resources/PlayersRest.java +++ b/src/main/java/cactusServer/resources/PlayersRest.java @@ -29,14 +29,13 @@ // @Produces(MediaType.APPLICATION_JSON) @Produces(MediaType.TEXT_PLAIN) public String createPlayer(@FormParam("instanceID") String instanceID, - @FormParam("characterID") String characterID/*, @FormParam("cameraState") CameraState cameraState, - @FormParam("animationClassToStart") EmoteState.EmoteType animationClassToStart*/) { + @FormParam("characterID") String characterID) { Instances instances = Instances.getInstance(); HashMap idMap = instances.createPlayer(instanceID, characterID, null, null); HashMap uriMap = new HashMap<>(); for (String id : idMap.keySet()) { - String uri = (InstancesRest.INSTANCES_URI + "/" + "/players/") + id; + String uri = (InstancesRest.INSTANCES_URI + "/players/") + id; uriMap.put(uri, idMap.get(id)); } return JSON.encode(uriMap); diff --git a/src/main/java/cactusServer/utils/App.java b/src/main/java/cactusServer/utils/App.java index 1858f1e..83b3126 100644 --- a/src/main/java/cactusServer/utils/App.java +++ b/src/main/java/cactusServer/utils/App.java @@ -59,7 +59,7 @@ // } // } // } - deletePlayerOfExceedTimeLimit(); + removeInactivePlayers(); } public void start(int interval) { @@ -95,25 +95,33 @@ // �_�~�[�I�u�W�F�N�g Instances.getInstance().getInstance("test1").createObject(new Position3D(0, 0, 0), new Velocity3D(), new AngularVelocity3D(), new Quaternion3D(), new Attribute(true,1), 0); - // �m�F�p - // String player1Encode = JSON.encode(player1, true); - // String player2Encode = JSON.encode(player2, true); - // Player player1Decode = JSON.decode(player1Encode, Player.class); - // Player player2Decode = JSON.decode(player2Encode, Player.class); - // System.out.println(JSON.encode(player1Decode, true)); - // System.out.println(JSON.encode(player2Decode, true)); +// // �m�F�p +// String player1Encode = JSON.encode(player1, true); +// String player2Encode = JSON.encode(player2, true); +// Player player1Decode = JSON.decode(player1Encode, Player.class); +// Player player2Decode = JSON.decode(player2Encode, Player.class); +// System.out.println(JSON.encode(player1Decode, true)); +// System.out.println(JSON.encode(player2Decode, true)); + +// JSON json = new JSON(); +// String characterId = player1.getCharacterID(); +// String encodeCharacterId = json.encode(characterId); +// System.out.println(characterId); +// System.out.println(encodeCharacterId); +// String position = json.encode(player1.getPosition()); +// System.out.println(position); } - private void deletePlayerOfExceedTimeLimit() { + private void removeInactivePlayers() { long currentTime = System.nanoTime(); Iterator> 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)) { + long lastUpdateTime = player.getLastUpdateTime(); + System.out.println(currentTime + ", " + (lastUpdateTime + Player.STOP_TIME_LIMIT) + " // playerId: " + playerId); + if (currentTime > (lastUpdateTime + Player.STOP_TIME_LIMIT)) { System.out.println("delete started (playerId: " + playerId + ")"); player.destroy(); Instance instance = Instances.getInstance().getInstance(player.getInstanceID());