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/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/models/Accounts.java b/src/main/java/cactusServer/models/Accounts.java
index 12b953d..ca25106 100644
--- a/src/main/java/cactusServer/models/Accounts.java
+++ b/src/main/java/cactusServer/models/Accounts.java
@@ -85,7 +85,7 @@
}
public URIAddressedEntity loginAccount(String userID, String userPass) {
- if (getAccountByID(userID).getPass().equals(userPass)) {
+ if (getAccountByID(userID) != null && getAccountByID(userID).getPass().equals(userPass)) {
Accounts.getInstance().getAccountByID(userID).setLogin(true);
Accounts.getInstance().getAccountByID(userID).formToken();
session = new URIAddressedEntity(
@@ -104,7 +104,7 @@
public Account deleteAccount(String uniqueID) {
Account edit = Accounts.getInstance().getAccountByuniqueID(uniqueID);
- if(edit == null) {
+ if (edit == null) {
return edit;
}
userIDSet.remove(edit.getId());
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 c4abff3..cb3371c 100644
--- a/src/main/java/cactusServer/resources/AccountsRest.java
+++ b/src/main/java/cactusServer/resources/AccountsRest.java
@@ -2,7 +2,6 @@
import java.util.ArrayList;
-import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
@@ -11,23 +10,16 @@
@Path("/accounts")
public class AccountsRest {
- private HttpServletResponse response;
-
@PUT
@Produces(MediaType.APPLICATION_JSON)
public URIAddressedEntity loginAccount(@FormParam("userID") String userID, @FormParam("userPass") String userPass) {
URIAddressedEntity session = Accounts.getInstance().loginAccount(userID, userPass);
- if(session != null) {
+ if (session != null) {
return session;
+ } else {
+ throw new WebApplicationException(400);
}
- else {
- int status = 400;
- return null;
- }
-
}
-
-
@POST
@Path("/logout")
@@ -40,7 +32,12 @@
@Produces(MediaType.APPLICATION_JSON)
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
@@ -49,17 +46,21 @@
public Account getAccount(@PathParam("uniqueID") String uniqueID) {
return Accounts.getInstance().getAccountByuniqueID(uniqueID);
}
-
+
@DELETE
@Path("/{uniqueID}")
@Produces(MediaType.APPLICATION_JSON)
- public Account deleteAccount(@FormParam("uniqueID") String uniqueID) {
- return Accounts.getInstance().deleteAccount(uniqueID);
+ 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(){
+ 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 38e6427..ebd3de6 100644
--- a/src/main/java/cactusServer/resources/InstancesRest.java
+++ b/src/main/java/cactusServer/resources/InstancesRest.java
@@ -3,6 +3,9 @@
import java.util.HashSet;
import java.util.Map;
+import javax.validation.Valid;
+import javax.ws.rs.BeanParam;
+import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
@@ -14,6 +17,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;
@@ -32,6 +37,7 @@
@Path("/instances")
+@RequestScoped
public class InstancesRest {
public static final String INSTANCES_URI = "/CactusServer/rest/instances";
public InstancesRest() {
@@ -91,34 +97,35 @@
-// @POST
-// @Produces(MediaType.APPLICATION_JSON)
-// public URIAddressedEntity create(@FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") StageModel 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)
-// public URIAddressedEntity create(@PathParam("instanceId") String instanceId, @FormParam("name") String name,
-// @FormParam("region") Plain[] region, @FormParam("permissions") HashSet permissions) {
-// Instance instance = Instances.getInstance().getInstance(instanceId);
-// IDAddressedEntity ae = instance.createArea(name, region, permissions);
-// return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/areas/" + ae.getId()), ae.getBody());
-// }
-//
-// @Path("/{instanceId}/objects")
-// @POST
-// @Produces(MediaType.APPLICATION_JSON)
-// public URIAddressedEntity create(@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) {
-// 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());
-// }
-//
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public URIAddressedEntity create(@FormParam("int") int a, @FormParam("name") String name, @FormParam("state") Instance.State state, @FormParam("stageModel") String stageModel) {
+ System.out.println(a);
+ IDAddressedEntity ae = Instances.getInstance().createInstance(name, Instance.State.AVAILABLE, "11111");
+ return new URIAddressedEntity((INSTANCES_URI + "/" + ae.getId()), ae.getBody());
+ }
+
+ @Path("/{instanceId}/areas")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public URIAddressedEntity createArea(@PathParam("instanceId") String instanceId, @FormParam("name") String name,
+ @FormParam("region") Plain[] region, @FormParam("permissions") HashSet permissions) {
+ Instance instance = Instances.getInstance().getInstance(instanceId);
+ IDAddressedEntity ae = instance.createArea(name, region, permissions);
+ return new URIAddressedEntity((INSTANCES_URI + "/" + instanceId + "/areas/" + ae.getId()), ae.getBody());
+ }
+
+ @Path("/{instanceId}/objects")
+ @POST
+ @Produces(MediaType.APPLICATION_JSON)
+ public URIAddressedEntity create(@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) {
+ 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());
+ }
+
// @DELETE
// @Path("/destroyInstance")
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