diff --git a/.project b/.project
index 72f65b4..463409a 100644
--- a/.project
+++ b/.project
@@ -32,5 +32,6 @@
org.eclipse.wst.common.modulecore.ModuleCoreNature
org.eclipse.jem.workbench.JavaEMFNature
org.eclipse.buildship.core.gradleprojectnature
+ net.sf.eclipse.tomcat.tomcatnature
diff --git a/src/main/java/cactusServer/entities/Account.java b/src/main/java/cactusServer/entities/Account.java
index e5153d6..a075657 100644
--- a/src/main/java/cactusServer/entities/Account.java
+++ b/src/main/java/cactusServer/entities/Account.java
@@ -34,7 +34,7 @@
this.name = name;
}
- @JSONHint(ignore = true)
+ @JSONHint(ignore=true)
public String getPass() {
return pass;
}
@@ -43,7 +43,7 @@
this.pass = pass;
}
- @JSONHint(ignore = true)
+ @JSONHint(ignore=true)
public boolean isLogin() {
return login;
}
@@ -61,7 +61,7 @@
return token;
}
- @JSONHint(ignore = true)
+ @JSONHint(ignore=true)
public String getUniqueID() {
return uniqueID;
}
diff --git a/src/main/java/cactusServer/entities/Area.java b/src/main/java/cactusServer/entities/Area.java
index 3dc0ee4..20496b4 100644
--- a/src/main/java/cactusServer/entities/Area.java
+++ b/src/main/java/cactusServer/entities/Area.java
@@ -2,25 +2,30 @@
import java.util.HashSet;
-public class Area extends Entity{
+import framework.model3D.Position3D;
+import net.arnx.jsonic.JSONHint;
+
+public class Area extends Entity {
private String name;
private Plain[] region; // �C�ӌ̕��ʂ̕�����
private HashSet permissions; // �G���A���ʼn\�Ȃ��Ƃ̗���
+ @JSONHint(ignore = true)
+ public static final int UNIQUE_ID_LENGTH = 12;
private Area() {
// JSONDecode���̌Ăяo���p
}
-
+
public Area(String name, Plain[] region, HashSet permissions) {
setName(name);
setRegion(region);
setPermissions(permissions);
}
-
+
public String getName() {
return name;
}
-
+
public Plain[] getRegion() {
return region;
}
@@ -28,35 +33,47 @@
public Plain getRegion(int index) {
return region[index];
}
-
+
public HashSet getPermissions() {
return permissions;
}
-
+
public boolean isPermission(Allowed allowed) {
return permissions.contains(allowed);
}
+ public boolean isSurroundingPosition(Position3D position) {
+ for (Plain plain : region) {
+ // ������ Plain��a,b,c,d �� Character��x,y,z ��p����, �L�����N�^�[�����ʂ̗��ɂ��邩�ǂ����̔�����s��
+ double equation = (plain.getA() * position.getX()) + (plain.getB() * position.getY())
+ + (plain.getC() * position.getZ()) + plain.getD();
+ if (equation > 0) {
+ return false;
+ }
+ }
+ return true;
+ }
+
public void setName(String name) {
this.name = name;
}
-
+
public void setRegion(Plain[] region) {
this.region = region;
}
-
+
public void setPermissions(HashSet permissions) {
this.permissions = permissions;
}
-
+
public void addPermission(Allowed allowed) {
permissions.add(allowed);
}
-
+
public void removePermission(Allowed allowed) {
permissions.remove(allowed);
}
-
+
public static enum Allowed {
SHOOT, KILL;
}
diff --git a/src/main/java/cactusServer/entities/Character.java b/src/main/java/cactusServer/entities/Character.java
index f435a04..08c2516 100644
--- a/src/main/java/cactusServer/entities/Character.java
+++ b/src/main/java/cactusServer/entities/Character.java
@@ -1,43 +1,54 @@
package cactusServer.entities;
-import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import cactusServer.models.Instances;
import cactusServer.utils.RandomStringGenerator;
import framework.model3D.Position3D;
import net.arnx.jsonic.JSONHint;
-public class Character extends Entity{
+public class Character extends Entity {
private String accountURI;
private String name;
private Position3D position;
private Angle angle;
- private CharacterModel model;
+ private String model;
private String areaURI;
-
private HashMap itemMap = new HashMap<>();
- private static final int UNIQUE_ID_LENGTH = 12;
+ @JSONHint(ignore = true)
+ public static final int UNIQUE_ID_LENGTH = 12;
private Character() {
// JSONDecode���̌Ăяo���p
}
-
- public Character(String accountURI, String name, Position3D position, Angle angle, CharacterModel model) {
+
+ // public Character(String accountURI, String name, Position3D position, Angle
+ // angle, String model) {
+ // setAccountURI(accountURI);
+ // setName(name);
+ // setPosition(position);
+ // setAngle(angle);
+ // setModel(model);
+ // updateAreaURI();
+ // }
+
+ public Character(String instanceId, String accountURI, String name, Position3D position, Angle angle,
+ String model) {
setAccountURI(accountURI);
setName(name);
setPosition(position);
setAngle(angle);
setModel(model);
- updateAreaURI();
+ initAreaURI(instanceId);
}
public String getAccountURI() {
return accountURI;
}
-
+
public String getName() {
return name;
}
@@ -45,23 +56,25 @@
public Position3D getPosition() {
return position;
}
-
+
public Angle getAngle() {
return angle;
}
- public CharacterModel getModel() {
+ public String getModel() {
return model;
}
-
+
public String getAreaURI() {
return areaURI;
}
-
+
+ @JSONHint(ignore = true)
public Item getItem(String itemId) {
return itemMap.get(itemId);
}
-
+
+ @JSONHint(ignore = true)
public List- getItems() {
List
- itemList = new ArrayList<>();
for (Item item : itemMap.values()) {
@@ -73,7 +86,7 @@
public void setAccountURI(String accountURI) {
this.accountURI = accountURI;
}
-
+
public void setName(String name) {
this.name = name;
}
@@ -81,15 +94,15 @@
public void setPosition(Position3D position) {
this.position = position;
}
-
+
public void setAngle(Angle angle) {
this.angle = angle;
}
- public void setModel(CharacterModel model) {
+ public void setModel(String model) {
this.model = model;
}
-
+
public void setAreaURI(String areaURI) {
this.areaURI = areaURI;
}
@@ -97,13 +110,14 @@
public AddressedEntity createItem(String name, int amount) {
Item item = new Item(name, amount);
if (!hasItem(item)) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, itemMap.keySet());
+ String id = RandomStringGenerator.generateUniqueString(Item.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, itemMap.keySet());
itemMap.put(id, item);
return new IDAddressedEntity(id, item);
}
return null;
}
-
+
public boolean hasItem(Item item) {
for (Map.Entry entry : itemMap.entrySet()) {
if (entry.getValue().equals(item)) {
@@ -112,7 +126,7 @@
}
return false;
}
-
+
public Item changeAmountOfItem(String itemId, int amountOfChange) {
Item item = itemMap.get(itemId).changeAmount(amountOfChange);
if (item.isEmpty()) {
@@ -120,11 +134,51 @@
}
return item;
}
-
- private void updateAreaURI() {
- // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�肵�ē��Y�G���A��URI�ɍX�V����
+
+ private void initAreaURI(String instanceId) {
+ Instance instance = Instances.getInstance().getInstance(instanceId);
+ setAreaURI(findAreaURI(instance));
}
-
+
+ private String findAreaURI(Instance instance) {
+ // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�肵�ē��Y�G���A��URI�ɍX�V����
+ for (String areaId : instance.getAreaIdSet()) {
+ Area area = instance.getArea(areaId);
+ if (area.isSurroundingPosition(position)) {
+ int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH;
+ StringBuilder newAreaURI = new StringBuilder();
+ return newAreaURI.append(areaURI.substring(0, subStringEndIndex)).append(areaId).toString();
+ }
+ }
+ return "";
+ }
+
+ public void update(Position3D position, Angle angle, String model, String areaURI) {
+ setPosition(position);
+ setAngle(angle);
+ if (model != null) {
+ setModel(model);
+ }
+ if (areaURI != null) {
+ setAreaURI(areaURI);
+ } else {
+ updateAreaURI();
+ }
+ }
+
+ private void updateAreaURI() {
+ String[] areaURISplit = areaURI.split("/"); // �c�c/instances/{instanceId}/areas/{areaId}
+ int splitSize = areaURISplit.length;
+ String instanceId = areaURISplit[splitSize - 3];
+ String previousAreaId = areaURISplit[splitSize - 1];
+ Instance instance = Instances.getInstance().getInstance(instanceId);
+ Area previousArea = instance.getArea(previousAreaId);
+ if (!previousArea.isSurroundingPosition(position)) {
+ // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�肵�ē��Y�G���A��URI�ɍX�V����
+ setAreaURI(findAreaURI(instance));
+ }
+ }
+
public Item destroyItem(String itemId) {
return itemMap.remove(itemId);
}
diff --git a/src/main/java/cactusServer/entities/Instance.java b/src/main/java/cactusServer/entities/Instance.java
index 650f494..e8860ad 100644
--- a/src/main/java/cactusServer/entities/Instance.java
+++ b/src/main/java/cactusServer/entities/Instance.java
@@ -1,18 +1,15 @@
package cactusServer.entities;
-import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
-import java.util.Map;
import java.util.Set;
import cactusServer.entities.Entity;
import cactusServer.entities.Object;
import cactusServer.entities.Area.Allowed;
import cactusServer.entities.Object.Attribute;
-import cactusServer.models.Instances;
import cactusServer.utils.RandomStringGenerator;
import cactusServer.entities.Character;
import framework.model3D.Position3D;
@@ -22,28 +19,31 @@
/**
* �C���X�^���X
- * @author ryo isitani
+ *
+ * @author r-isitani
*
*/
public class Instance extends Entity {
private String name;
private State state;
- private StageModel stage;
-
+ private String stage;
private HashMap areaMap = new HashMap<>();
private HashMap objMap = new HashMap<>();
private HashMap characterMap = new HashMap<>();
- private static final int UNIQUE_ID_LENGTH = 12;
+ @JSONHint(ignore = true)
+ public static final int UNIQUE_ID_LENGTH = 12;
private Instance() {
// JSONDecode���̌Ăяo���p
}
-
+
/**
* (�����͌����_�ł̉��̂���)
- * @param name �C���X�^���X��
+ *
+ * @param name
+ * �C���X�^���X��
*/
- public Instance(String name, State state, StageModel stageModel) {
+ public Instance(String name, State state, String stageModel) {
setName(name);
setState(state);
setStage(stageModel);
@@ -52,12 +52,12 @@
public String getName() {
return name;
}
-
+
public State getState() {
return state;
}
-
- public StageModel getStage() {
+
+ public String getStage() {
return stage;
}
@@ -65,89 +65,100 @@
public Set getAreaIdSet() {
return areaMap.keySet();
}
-
+
@JSONHint(ignore = true)
public Area getArea(String areaId) {
return areaMap.get(areaId);
}
-
+
@JSONHint(ignore = true)
public Set getObjIdSet() {
return objMap.keySet();
}
-
+
@JSONHint(ignore = true)
public Object getObject(String objId) {
return objMap.get(objId);
}
-
+
@JSONHint(ignore = true)
public List getCharacters() {
- List characters = new ArrayList<>();
- for (Character character : characterMap.values()) {
- characters.add(character);
- }
- return characters;
+ return new ArrayList(characterMap.values());
}
@JSONHint(ignore = true)
public Character getCharacter(String characterId) {
return characterMap.get(characterId);
}
-
+
public void setName(String name) {
this.name = name;
}
-
+
public void setState(State state) {
this.state = state;
}
-
- public void setStage(StageModel stage) {
+
+ public void setStage(String stage) {
this.stage = stage;
}
public IDAddressedEntity createArea(String name, Plain[] region, HashSet permissions) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, areaMap.keySet());
+ String id = RandomStringGenerator.generateUniqueString(Area.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, areaMap.keySet());
Area area = new Area(name, region, permissions);
areaMap.put(id, area);
return new IDAddressedEntity(id, area);
}
-
- public IDAddressedEntity createObject(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Angle angle, Attribute attribute, ObjectModel model) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, objMap.keySet());
+
+ public IDAddressedEntity createObject(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity,
+ Angle angle, Attribute attribute, String model) {
+ String id = RandomStringGenerator.generateUniqueString(Object.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, objMap.keySet());
Object object = new Object(position, velocity, angularVelocity, angle, attribute, model);
objMap.put(id, object);
return new IDAddressedEntity(id, object);
}
- public IDAddressedEntity createCharacter(String accountURI, String name, Position3D position, Angle angle, CharacterModel model) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, characterMap.keySet());
- Character character = new Character(accountURI, name, position, angle, model);
+ /**
+ * InstancesRest�Ƃ̃G���[�����p (��ŏ���)
+ */
+ public IDAddressedEntity createObject(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity,
+ Angle angle, Attribute attribute, ObjectModel model) {
+ String id = RandomStringGenerator.generateUniqueString(Object.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, objMap.keySet());
+ Object object = new Object(position, velocity, angularVelocity, angle, attribute, "");
+ objMap.put(id, object);
+ return new IDAddressedEntity(id, object);
+ }
+
+ public IDAddressedEntity createCharacter(String instanceId, String accountURI, String name, Position3D position,
+ Angle angle, String model) {
+ String id = RandomStringGenerator.generateUniqueString(Character.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, characterMap.keySet());
+ Character character = new Character(instanceId, accountURI, name, position, angle, model);
characterMap.put(id, character);
return new IDAddressedEntity(id, character);
}
- public Character updateCharacter(String characterId, Position3D position, Angle angle, CharacterModel model) {
+ public Character updateCharacter(String characterId, Position3D position, Angle angle, String model) {
Character character = characterMap.get(characterId);
- character.setPosition(position);
- character.setAngle(angle);
- character.setModel(model);
+ character.update(position, angle, model, null); // areaURI(��4����)�̍X�V�͌Ăяo����Ŏ����ōs����
return character;
}
-
+
public Character destroyCharacter(String characterId) {
return characterMap.remove(characterId);
}
-
+
public Area destroyArea(String areaId) {
return areaMap.remove(areaId);
}
-
+
public Object destroyObject(String objId) {
return objMap.remove(objId);
}
-
+
public static enum State {
AVAILABLE, MAINTENANCE;
}
diff --git a/src/main/java/cactusServer/entities/Item.java b/src/main/java/cactusServer/entities/Item.java
index 88533bb..0055397 100644
--- a/src/main/java/cactusServer/entities/Item.java
+++ b/src/main/java/cactusServer/entities/Item.java
@@ -1,8 +1,11 @@
package cactusServer.entities;
+import net.arnx.jsonic.JSONHint;
+
public class Item extends Entity{
private String name;
private int amount;
+ @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12;
private Item() {
// JSONDecode���̌Ăяo���p
diff --git a/src/main/java/cactusServer/entities/Object.java b/src/main/java/cactusServer/entities/Object.java
index 19f55f1..d73a8f9 100644
--- a/src/main/java/cactusServer/entities/Object.java
+++ b/src/main/java/cactusServer/entities/Object.java
@@ -1,24 +1,25 @@
package cactusServer.entities;
-import java.util.HashMap;
-
import framework.model3D.Position3D;
import framework.physics.AngularVelocity3D;
import framework.physics.Velocity3D;
+import net.arnx.jsonic.JSONHint;
-public class Object extends Entity{
+public class Object extends Entity {
private Position3D position;
private Velocity3D velocity;
private AngularVelocity3D angularVelocity;
private Angle angle;
private Attribute attribute;
- private ObjectModel model;
+ private String model;
+ @JSONHint(ignore = true) public static final int UNIQUE_ID_LENGTH = 12;
private Object() {
// JSONDecode���̌Ăяo���p
}
-
- public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Angle angle, Attribute attribute, ObjectModel model) {
+
+ public Object(Position3D position, Velocity3D velocity, AngularVelocity3D angularVelocity, Angle angle,
+ Attribute attribute, String model) {
setPosition(position);
setVelocity(velocity);
setAngularVelocity(angularVelocity);
@@ -26,19 +27,19 @@
setAttribute(attribute);
setModel(model);
}
-
+
public Position3D getPosition() {
return position;
}
-
+
public Velocity3D getVelocity() {
return velocity;
}
-
+
public AngularVelocity3D getAngularVelocity() {
return angularVelocity;
}
-
+
public Angle getAngle() {
return angle;
}
@@ -47,22 +48,22 @@
return attribute;
}
- public ObjectModel getModel() {
+ public String getModel() {
return model;
}
-
+
public void setPosition(Position3D position) {
this.position = position;
}
-
+
public void setVelocity(Velocity3D velocity) {
this.velocity = velocity;
}
-
+
public void setAngularVelocity(AngularVelocity3D angularVelocity) {
this.angularVelocity = angularVelocity;
}
-
+
public void setAngle(Angle angle) {
this.angle = angle;
}
@@ -71,27 +72,27 @@
this.attribute = attribute;
}
- public void setModel(ObjectModel model) {
+ public void setModel(String model) {
this.model = model;
}
-
+
public static class Attribute {
private boolean moveable; // ��
private double cof; // ���C�W��
-
+
public Attribute(boolean moveable, double cof) {
setMoveable(moveable);
setCof(cof);
}
-
+
public boolean isMoveable() {
return moveable;
}
-
+
public double getCof() {
return cof;
}
-
+
public void setMoveable(boolean moveable) {
this.moveable = moveable;
}
diff --git a/src/main/java/cactusServer/entities/Plain.java b/src/main/java/cactusServer/entities/Plain.java
index fbe7603..cdbad6c 100644
--- a/src/main/java/cactusServer/entities/Plain.java
+++ b/src/main/java/cactusServer/entities/Plain.java
@@ -1,7 +1,5 @@
package cactusServer.entities;
-import java.util.List;
-
public class Plain {
private double a; // ���ʂ̕����� ax+by+cz+d ��a
private double b; // ���ʂ̕����� ax+by+cz+d ��b
@@ -11,30 +9,30 @@
private Plain() {
// JSONDecode���̌Ăяo���p
}
-
+
public Plain(double a, double b, double c, double d) {
setA(a);
setB(b);
setC(c);
setD(d);
}
-
+
public double getA() {
return a;
}
-
+
public double getB() {
return b;
}
-
+
public double getC() {
return c;
}
-
+
public double getD() {
return d;
}
-
+
public void setA(double a) {
this.a = a;
}
diff --git a/src/main/java/cactusServer/entities/Player.java b/src/main/java/cactusServer/entities/Player.java
index f2c59d4..4d1ce8e 100644
--- a/src/main/java/cactusServer/entities/Player.java
+++ b/src/main/java/cactusServer/entities/Player.java
@@ -2,8 +2,9 @@
import cactusServer.models.Instances;
import framework.model3D.Position3D;
+import net.arnx.jsonic.JSONHint;
-public class Player extends Entity{
+public class Player extends Entity {
private String instanceURI;
private String characterURI;
private String areaURI;
@@ -11,22 +12,41 @@
private Angle angle;
private CameraState cameraState;
private EmoteState emoteState;
+ @JSONHint(ignore = true)
+ public static final int UNIQUE_ID_LENGTH = 12;
private Player() {
// JSONDecode���̌Ăяo���p
}
-
- public Player(String instanceURI, String characterURI, CameraState cameraState, EmoteState.EmoteType animationClassToStart) {
+
+ public Player(String instanceURI, String characterURI, CameraState cameraState,
+ EmoteState.EmoteType animationClassToStart) {
setInstanceURI(instanceURI);
setCharacterURI(characterURI);
setCameraState(cameraState);
- setEmoteState(new EmoteState(animationClassToStart));
+ setAnimationClassToStart(animationClassToStart);
+ readCharacterData(characterURI);
+ }
+
+ private Character getCharacter(String characterURI) {
+ String[] characterURISplit = characterURI.split("/"); // �c�c/instances/{instanceId}/characters/{characterId}
+ int splitSize = characterURISplit.length;
+ String characterId = characterURISplit[splitSize - 1];
+ String instanceId = characterURISplit[splitSize - 3];
+ return Instances.getInstance().getInstance(instanceId).getCharacter(characterId);
+ }
+
+ private void readCharacterData(String characterURI) {
+ Character character = getCharacter(characterURI);
+ setPosition(character.getPosition());
+ setAngle(character.getAngle());
+ setAreaURI(character.getAreaURI());
}
public String getInstanceURI() {
return instanceURI;
}
-
+
public String getCharacterURI() {
return characterURI;
}
@@ -38,7 +58,7 @@
public Position3D getPosition() {
return position;
}
-
+
public Angle getAngle() {
return angle;
}
@@ -50,7 +70,7 @@
public EmoteState getEmoteState() {
return emoteState;
}
-
+
public void setInstanceURI(String instanceURI) {
this.instanceURI = instanceURI;
}
@@ -59,6 +79,10 @@
this.characterURI = characterURI;
}
+ public void setAreaURI(String areaURI) {
+ this.areaURI = areaURI;
+ }
+
public void setPosition(Position3D position) {
this.position = position;
}
@@ -70,16 +94,62 @@
public void setCameraState(CameraState cameraState) {
this.cameraState = cameraState;
}
-
+
public void setEmoteState(EmoteState emoteState) {
this.emoteState = emoteState;
}
-
- public void setanimationClassToStart(EmoteState.EmoteType animationClassToStart) {
+
+ public void setAnimationClassToStart(EmoteState.EmoteType animationClassToStart) {
setEmoteState(new EmoteState(animationClassToStart));
}
-
- public void updateEmoteType(EmoteState.EmoteType animationClassToStart) {
+
+ public Player update(String characterURI, Position3D position, Angle angle, CameraState cameraState,
+ EmoteState.EmoteType animationClassToStart) {
+ setCharacterURI(characterURI);
+ setPosition(position);
+ setAngle(angle);
+ setCameraState(cameraState);
+ updateEmoteType(animationClassToStart);
+ updateAreaURI();
+ return this;
+ }
+
+ private void updateAreaURI() {
+ String[] areaURISplit = areaURI.split("/"); // �c�c/instances/{instanceId}/areas/{areaId}
+ int splitSize = areaURISplit.length;
+ String instanceId = areaURISplit[splitSize - 3];
+ String previousAreaId = areaURISplit[splitSize - 1];
+ Instance instance = Instances.getInstance().getInstance(instanceId);
+ Area previousArea = instance.getArea(previousAreaId);
+ if (!previousArea.isSurroundingPosition(position)) {
+ // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�肵�ē��Y�G���A��URI�ɍX�V����
+ setAreaURI(findAreaURI(instance));
+ }
+ }
+
+ private String findAreaURI(Instance instance) {
+ // �L�����N�^�[�̃|�W�V������p���Ăǂ̃G���A���ɂ��邩�肵�ē��Y�G���A��URI�ɍX�V����
+ for (String areaId : instance.getAreaIdSet()) {
+ Area area = instance.getArea(areaId);
+ if (area.isSurroundingPosition(position)) {
+ int subStringEndIndex = areaURI.length() - Area.UNIQUE_ID_LENGTH;
+ StringBuilder newAreaURI = new StringBuilder();
+ return newAreaURI.append(areaURI.substring(0, subStringEndIndex)).append(areaId).toString();
+ }
+ }
+ return "";
+ }
+
+ private void updateEmoteType(EmoteState.EmoteType animationClassToStart) {
this.emoteState.setEmoteType(animationClassToStart);
}
+
+ public void destroyPlayer() {
+ writeCharacterData(characterURI);
+ }
+
+ private void writeCharacterData(String characterURI) {
+ Character character = getCharacter(characterURI);
+ character.update(position, angle, null, areaURI); // model(��3����)�̍X�V�͏o���Ȃ�
+ }
}
diff --git a/src/main/java/cactusServer/entities/Session.java b/src/main/java/cactusServer/entities/Session.java
deleted file mode 100644
index 5e4b171..0000000
--- a/src/main/java/cactusServer/entities/Session.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package cactusServer.entities;
-
-import java.net.URI;
-
-import cactusServer.entities.Account;
-
-public class Session extends URIAddressedEntity{
- public Session(Account account, URI accountURI) {
- super(accountURI, account);
- }
-
- public Account getAccount() {
- return (Account)getBody();
- }
-
- public void setAccount(Account account) {
- setBody(account);
- }
-
- public URI getAccountURI() {
- return getUri();
- }
-
- public void setAccountURI(URI accountURI) {
- setUri(accountURI);
- }
-}
diff --git a/src/main/java/cactusServer/entities/URIAddressedEntity.java b/src/main/java/cactusServer/entities/URIAddressedEntity.java
index bd5e264..864c840 100644
--- a/src/main/java/cactusServer/entities/URIAddressedEntity.java
+++ b/src/main/java/cactusServer/entities/URIAddressedEntity.java
@@ -2,20 +2,21 @@
import java.net.URI;
-public class URIAddressedEntity extends AddressedEntity{
+public class URIAddressedEntity{
private URI uri;
+ private Entity body;
private URIAddressedEntity() {
// JSONDecode���̌Ăяo���p
}
public URIAddressedEntity(URI uri, Entity body) {
- super(body);
+ setBody(body);
setUri(uri);
}
public URIAddressedEntity(String str, Entity body) {
- super(body);
+ setBody(body);
setUri(URI.create(str));
}
@@ -26,4 +27,12 @@
public void setUri(URI uri) {
this.uri = uri;
}
+
+ public Entity getBody() {
+ return body;
+ }
+
+ public void setBody(Entity body) {
+ this.body = body;
+ }
}
diff --git a/src/main/java/cactusServer/models/Accounts.java b/src/main/java/cactusServer/models/Accounts.java
index ee05a49..ca25106 100644
--- a/src/main/java/cactusServer/models/Accounts.java
+++ b/src/main/java/cactusServer/models/Accounts.java
@@ -5,16 +5,16 @@
import cactusServer.entities.*;
import cactusServer.utils.RandomStringGenerator;
-import java.net.URI;
import java.util.*;
@Singleton
public class Accounts {
+ public static final int ACCOUNT_NUM_MAX = 10000;
private static Accounts theInstance = null;
- private ArrayList accounts = new ArrayList<>(10000);
- private HashSet userIDSet = new HashSet<>(10000);
- private HashSet uniqueIDSet = new HashSet<>(10000);
- private Session session;
+ private ArrayList accounts = new ArrayList<>(ACCOUNT_NUM_MAX);
+ private HashSet userIDSet = new HashSet<>(ACCOUNT_NUM_MAX);
+ private HashSet uniqueIDSet = new HashSet<>(ACCOUNT_NUM_MAX);
+ private URIAddressedEntity session;
private Accounts() {
@@ -27,7 +27,7 @@
return theInstance;
}
- public Session createAcount(String userID, String userName, String userPass) {
+ public URIAddressedEntity createAcount(String userID, String userName, String userPass) {
if (!userIDSet.add(userID))
return null;
String uniqueID = RandomStringGenerator.generateUniqueString(12, RandomStringGenerator.ALPHA_NUMERIC,
@@ -35,7 +35,7 @@
uniqueIDSet.add(uniqueID);
Account newAccount = new Account(userID, userName, userPass, uniqueID);
accounts.add(newAccount);
- session = new Session(newAccount, URI.create("/CactusServer/rest/accounts/" + uniqueID));
+ session = new URIAddressedEntity("/CactusServer/rest/accounts/" + uniqueID, newAccount);
return session;
}
@@ -84,12 +84,13 @@
return null;
}
- public Session loginAccount(String userID, String userPass) {
- if (getAccountByID(userID).getPass().equals(userPass)) {
+ public URIAddressedEntity loginAccount(String userID, String userPass) {
+ if (getAccountByID(userID) != null && getAccountByID(userID).getPass().equals(userPass)) {
Accounts.getInstance().getAccountByID(userID).setLogin(true);
Accounts.getInstance().getAccountByID(userID).formToken();
- session = new Session(Accounts.getInstance().getAccountByID(userID), URI.create(
- "/CactusServer/rest/accounts/" + Accounts.getInstance().getAccountByID(userID).getUniqueID()));
+ session = new URIAddressedEntity(
+ "/CactusServer/rest/accounts/" + Accounts.getInstance().getAccountByID(userID).getUniqueID(),
+ Accounts.getInstance().getAccountByID(userID));
return session;
} else {
return null;
@@ -102,7 +103,10 @@
}
public Account deleteAccount(String uniqueID) {
- Account edit = Accounts.getInstance().getAccountToken(uniqueID);
+ Account edit = Accounts.getInstance().getAccountByuniqueID(uniqueID);
+ if (edit == null) {
+ return edit;
+ }
userIDSet.remove(edit.getId());
uniqueIDSet.remove(edit.getUniqueID());
accounts.remove(edit);
diff --git a/src/main/java/cactusServer/models/Instances.java b/src/main/java/cactusServer/models/Instances.java
index d57dd01..4d3bc6d 100644
--- a/src/main/java/cactusServer/models/Instances.java
+++ b/src/main/java/cactusServer/models/Instances.java
@@ -1,22 +1,17 @@
package cactusServer.models;
-import java.net.URI;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
-import java.util.Map;
-import org.apache.commons.lang3.RandomStringUtils;
-
-import cactusServer.entities.AddressedEntity;
+import cactusServer.entities.Angle;
import cactusServer.entities.CameraState;
import cactusServer.entities.EmoteState;
import cactusServer.entities.IDAddressedEntity;
import cactusServer.entities.Instance;
import cactusServer.entities.Player;
-import cactusServer.entities.StageModel;
import cactusServer.utils.RandomStringGenerator;
-import net.arnx.jsonic.JSONHint;
+import framework.model3D.Position3D;
/**
* �C���X�^���X���Ǘ�����N���X
@@ -28,8 +23,7 @@
private static Instances theInstance = null;
private HashMap instanceMap = new HashMap<>(); // instance��ID�Ǝ��̂��Ǘ�
private HashMap playerMap = new HashMap<>();
- private static final int UNIQUE_ID_LENGTH = 12;
-
+
private Instances() {
}
@@ -45,23 +39,27 @@
}
return theInstance;
}
-
+
/**
* �V����Instance�N���X���쐬����Map�ɒlj�����
+ *
* @param name
* @param state
* @param stageModel
* @return
*/
- public IDAddressedEntity createInstance(String name, Instance.State state, StageModel stageModel) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet());
+ public IDAddressedEntity createInstance(String name, Instance.State state, String stageModel) {
+ String id = RandomStringGenerator.generateUniqueString(Instance.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, instanceMap.keySet());
Instance instance = new Instance(name, state, stageModel);
instanceMap.put(id, instance);
return new IDAddressedEntity(id, instance);
}
-
- public IDAddressedEntity createPlayer(String instanceURI, String characterURI, CameraState cameraState, EmoteState.EmoteType animationClassToStart) {
- String id = RandomStringGenerator.generateUniqueString(UNIQUE_ID_LENGTH, RandomStringGenerator.ALPHA_NUMERIC, playerMap.keySet());
+
+ public IDAddressedEntity createPlayer(String instanceURI, String characterURI, CameraState cameraState,
+ EmoteState.EmoteType animationClassToStart) {
+ String id = RandomStringGenerator.generateUniqueString(Player.UNIQUE_ID_LENGTH,
+ RandomStringGenerator.ALPHA_NUMERIC, playerMap.keySet());
Player player = new Player(instanceURI, characterURI, cameraState, animationClassToStart);
playerMap.put(id, player);
return new IDAddressedEntity(id, player);
@@ -77,19 +75,22 @@
public Instance getInstance(String instanceId) {
return instanceMap.get(instanceId);
}
-
-// public List getPlayers() {
-// //playerMap.values().toArray()
-//// List players = new ArrayList<>();
-//// for (Player player : playerMap.values().) {
-//// //players.
-//// }
-// }
-
+
+ public List getPlayers() {
+ return new ArrayList(playerMap.values());
+ }
+
public Player getPlayer(String playerId) {
return playerMap.get(playerId);
}
+ public Player updatePlayer(String playerId, String characterURI, Position3D position, Angle angle,
+ CameraState cameraState, EmoteState.EmoteType animationClassToStart) {
+ Player player = playerMap.get(playerId);
+ player.update(characterURI, position, angle, cameraState, animationClassToStart);
+ return player;
+ }
+
/**
* ID�ɑΉ�����Instance��Map����폜���ĕԂ�
*
@@ -100,7 +101,7 @@
public Instance destroyInstance(String instanceId) {
return instanceMap.remove(instanceId);
}
-
+
public Player destroyPlayer(String playerId) {
return playerMap.remove(playerId);
}
diff --git a/src/main/java/cactusServer/resources/AccountsRest.java b/src/main/java/cactusServer/resources/AccountsRest.java
index aa51dc9..cb3371c 100644
--- a/src/main/java/cactusServer/resources/AccountsRest.java
+++ b/src/main/java/cactusServer/resources/AccountsRest.java
@@ -1,6 +1,7 @@
package cactusServer.resources;
-import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@@ -9,12 +10,15 @@
@Path("/accounts")
public class AccountsRest {
- private HttpServletResponse response;
-
@PUT
@Produces(MediaType.APPLICATION_JSON)
- public Session loginAccount(@FormParam("userID") String userID, @FormParam("userPass") String userPass) {
- return Accounts.getInstance().loginAccount(userID, userPass);
+ public URIAddressedEntity loginAccount(@FormParam("userID") String userID, @FormParam("userPass") String userPass) {
+ URIAddressedEntity session = Accounts.getInstance().loginAccount(userID, userPass);
+ if (session != null) {
+ return session;
+ } else {
+ throw new WebApplicationException(400);
+ }
}
@POST
@@ -26,9 +30,14 @@
@POST
@Produces(MediaType.APPLICATION_JSON)
- public Session createAccount(@FormParam("userID") String userID, @FormParam("userName") String userName,
+ public URIAddressedEntity createAccount(@FormParam("userID") String userID, @FormParam("userName") String userName,
@FormParam("userPass") String userPass) {
- return Accounts.getInstance().createAcount(userID, userName, userPass);
+ URIAddressedEntity editAccount = Accounts.getInstance().createAcount(userID, userName, userPass);
+ if(editAccount != null) {
+ return editAccount;
+ }else {
+ throw new WebApplicationException(409);
+ }
}
@GET
@@ -37,12 +46,22 @@
public Account getAccount(@PathParam("uniqueID") String uniqueID) {
return Accounts.getInstance().getAccountByuniqueID(uniqueID);
}
-
+
@DELETE
+ @Path("/{uniqueID}")
@Produces(MediaType.APPLICATION_JSON)
- public Account deleteAccount(@FormParam("token") String token) {
- return Accounts.getInstance().deleteAccount(token);
+ public Account deleteAccount(@PathParam("uniqueID") String uniqueID) {
+ if (Accounts.getInstance().getAccountByuniqueID(uniqueID) != null) {
+ return Accounts.getInstance().deleteAccount(uniqueID);
+ } else {
+ throw new WebApplicationException(400);
+ }
}
-
+
+ @GET
+ @Produces(MediaType.APPLICATION_JSON)
+ public ArrayList getAccounts() {
+ return Accounts.getInstance().getAccounts();
+ }
}
diff --git a/src/main/java/cactusServer/resources/InstancesRest.java b/src/main/java/cactusServer/resources/InstancesRest.java
index 62c4060..e38a0f5 100644
--- a/src/main/java/cactusServer/resources/InstancesRest.java
+++ b/src/main/java/cactusServer/resources/InstancesRest.java
@@ -16,6 +16,8 @@
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;
+import org.glassfish.jersey.process.internal.RequestScoped;
+
import cactusServer.entities.AddressedEntity;
import cactusServer.entities.Angle;
import cactusServer.entities.Area;
@@ -39,6 +41,7 @@
@Path("/instances")
+@RequestScoped
public class InstancesRest {
public static final String INSTANCES_URI = "/CactusServer/rest/instances";
public InstancesRest() {
@@ -106,11 +109,11 @@
@POST
@Produces(MediaType.APPLICATION_JSON)
- public URIAddressedEntity create(@FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") StageModel stageModel) {
+ public URIAddressedEntity create(@FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") String stageModel) {
IDAddressedEntity ae = Instances.getInstance().createInstance(name, state, stageModel);
return new URIAddressedEntity((INSTANCES_URI + "/" + ae.getId()), ae.getBody());
}
-
+
@Path("/{instanceId}/areas")
@POST
@Produces(MediaType.APPLICATION_JSON)
@@ -126,7 +129,7 @@
@Produces(MediaType.APPLICATION_JSON)
public URIAddressedEntity createObject(@PathParam("instanceId") String instanceId, @FormParam("position") Position3D position,
@FormParam("velocity") Velocity3D velocity, @FormParam("angularVelocity") AngularVelocity3D angularVelocity,
- @FormParam("angle") Angle angle, @FormParam("attribute") Attribute attribute, @FormParam("model") ObjectModel model) {
+ @FormParam("angle") Angle angle, @FormParam("attribute") Attribute attribute, @FormParam("model") String model) {
Instance instance = Instances.getInstance().getInstance(instanceId);
IDAddressedEntity ae = instance.createObject(position, velocity, angularVelocity, angle, attribute, model);
return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/objects/" + ae.getId()), ae.getBody());
@@ -137,9 +140,9 @@
@Produces(MediaType.APPLICATION_JSON)
public URIAddressedEntity createCharacter(@PathParam("instanceId") String instanceId, @FormParam("accountURI") String accountURI,
@FormParam("name") String name, @FormParam("position") Position3D position, @FormParam("angle") Angle angle,
- @FormParam("model") CharacterModel model) {
+ @FormParam("model") String model) {
Instance instance = Instances.getInstance().getInstance(instanceId);
- IDAddressedEntity ae = instance.createCharacter(accountURI, name, position, angle, model);
+ IDAddressedEntity ae = instance.createCharacter(instanceId, accountURI, name, position, angle, model);
return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/characters/" + ae.getId()), ae.getBody());
}
@@ -153,9 +156,6 @@
return new URIAddressedEntity((INSTANCES_URI + "/" + instanceURI + "/players/" + ae.getId()), ae.getBody());
}
-
-
-
// @Path("/players/{playerId}")
// @PUT
// @Produces(MediaType.APPLICATION_JSON)
diff --git a/src/main/java/cactusServer/utils/JSONConsumer.java b/src/main/java/cactusServer/utils/JSONConsumer.java
index c3b4d23..c61d8a2 100644
--- a/src/main/java/cactusServer/utils/JSONConsumer.java
+++ b/src/main/java/cactusServer/utils/JSONConsumer.java
@@ -2,6 +2,7 @@
import java.io.IOException;
import java.io.InputStream;
+import java.io.InputStreamReader;
import java.lang.annotation.Annotation;
import java.lang.reflect.Type;
@@ -16,30 +17,30 @@
import net.arnx.jsonic.JSON;
import net.arnx.jsonic.JSONException;
-@Provider
-@Consumes(MediaType.APPLICATION_JSON)
-public class JSONConsumer implements MessageBodyReader {
-
- public boolean isReadable(java.lang.Class type,
- java.lang.reflect.Type genericType, java.lang.annotation.Annotation[]
- annotations, MediaType mediaType) {
- return true;
+/**
+ * �����g�p���Ȃ��Ȃ�Ǝv��
+ * @author student
+ *
+ */
+//@Provider
+//@Consumes(MediaType.APPLICATION_JSON)
+public class JSONConsumer implements MessageBodyReader