|
@@ -1,4 +1,4 @@
|
|
|
-package connection.socket;
|
|
|
+package Connection.socket;
|
|
|
import java.net.*;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.List;
|
|
@@ -21,7 +21,8 @@ public class Server implements Runnable{
|
|
|
|
|
|
|
|
|
private HolonObject observed;
|
|
|
- private HolonObjectModel model;
|
|
|
+ private HolonObjectModel modelField;
|
|
|
+ private HolonObjectModel newModelField;
|
|
|
private Control control;
|
|
|
|
|
|
public Server(int port, ui.view.Console console, HolonObject observed, Control control) throws IOException {
|
|
@@ -33,8 +34,10 @@ public class Server implements Runnable{
|
|
|
//Wait for Connection
|
|
|
Thread serverThread = new Thread(this);
|
|
|
serverThread.start();
|
|
|
-
|
|
|
-
|
|
|
+ this.modelField = createModel();
|
|
|
+ this.newModelField = createModel();
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
public void stopServer() throws IOException {
|
|
@@ -63,7 +66,7 @@ public class Server implements Runnable{
|
|
|
out = new DataOutputStream(clientSocket.getOutputStream());
|
|
|
in = new DataInputStream(new BufferedInputStream(clientSocket.getInputStream()));
|
|
|
if(observed == null) stopConnection();
|
|
|
- createModel();
|
|
|
+ this.modelField = createModel();
|
|
|
Thread updateThread = new Thread(new UpdateLoop());
|
|
|
updateThread.start();
|
|
|
//InputLoop
|
|
@@ -95,6 +98,7 @@ public class Server implements Runnable{
|
|
|
console.println("Res: [" + inputByte + "] -> SetAmount");
|
|
|
int index = in.readInt();
|
|
|
int amount = in.readInt();
|
|
|
+ modelField.getElements().get(index).amount = amount;
|
|
|
observed.getElements().get(index).setAmount(amount);
|
|
|
|
|
|
}else if (inputByte == Command.SetEnable) {
|
|
@@ -102,11 +106,13 @@ public class Server implements Runnable{
|
|
|
console.println("Res: [" + inputByte + "] -> SetEnable");
|
|
|
int index = in.readInt();
|
|
|
boolean enabled = in.readBoolean();
|
|
|
+ modelField.getElements().get(index).enabled = enabled;
|
|
|
observed.getElements().get(index).setActive(enabled);
|
|
|
}else if (inputByte == Command.IncreaseAmount) {
|
|
|
if(observed == null) stopConnection();
|
|
|
console.println("Res: [" + inputByte + "] -> IncreaseAmount");
|
|
|
int index = in.readInt();
|
|
|
+ modelField.getElements().get(index).amount++;
|
|
|
HolonElement ele = observed.getElements().get(index);
|
|
|
ele.setAmount(ele.getAmount()+1);
|
|
|
|
|
@@ -114,6 +120,7 @@ public class Server implements Runnable{
|
|
|
if(observed == null) stopConnection();
|
|
|
console.println("Res: [" + inputByte + "] -> DecreaseAmount");
|
|
|
int index = in.readInt();
|
|
|
+ modelField.getElements().get(index).amount--;
|
|
|
HolonElement ele = observed.getElements().get(index);
|
|
|
ele.setAmount(ele.getAmount()-1);
|
|
|
|
|
@@ -127,12 +134,13 @@ public class Server implements Runnable{
|
|
|
}
|
|
|
|
|
|
|
|
|
- private void createModel() {
|
|
|
- model = new HolonObjectModel();
|
|
|
+ private HolonObjectModel createModel() {
|
|
|
+ HolonObjectModel model = new HolonObjectModel();
|
|
|
int index = 0;
|
|
|
for(HolonElement ele :observed.getElements()) {
|
|
|
model.add(ele, index++);
|
|
|
}
|
|
|
+ return model;
|
|
|
}
|
|
|
|
|
|
|
|
@@ -158,27 +166,34 @@ public class Server implements Runnable{
|
|
|
private void waitOneSecond() {
|
|
|
//wait one second
|
|
|
try {
|
|
|
- TimeUnit.SECONDS.sleep(5);
|
|
|
+ TimeUnit.SECONDS.sleep(1);
|
|
|
} catch (InterruptedException e) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
private boolean checkForUpdates() {
|
|
|
//TODO Delete And CheckforUpdatesReal
|
|
|
- //-->Test
|
|
|
- waitOneSecond();
|
|
|
- createModel();
|
|
|
- //<--Test
|
|
|
+ newModelField = createModel();
|
|
|
+ if(compareModels(modelField,newModelField)) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ modelField = newModelField;
|
|
|
return true;
|
|
|
+
|
|
|
}
|
|
|
-
|
|
|
+ /**
|
|
|
+ * Returns true if both are the same.
|
|
|
+ * @param modelField
|
|
|
+ * @param newModelField
|
|
|
+ * @return
|
|
|
+ */
|
|
|
private void sendUpdate() {
|
|
|
try {
|
|
|
if(observed == null) stopConnection();
|
|
|
console.println("Send: [" + Command.Update + "] -> Update");
|
|
|
out.writeByte(Command.Update);
|
|
|
- out.writeInt(model.size());
|
|
|
- for(HolonElementWrapper wrapper : model.getElements()) {
|
|
|
+ out.writeInt(modelField.size());
|
|
|
+ for(HolonElementWrapper wrapper : modelField.getElements()) {
|
|
|
out.writeUTF(wrapper.name);
|
|
|
out.writeInt(wrapper.amount);
|
|
|
out.writeFloat(wrapper.energy);
|
|
@@ -193,6 +208,20 @@ public class Server implements Runnable{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ private boolean compareModels(HolonObjectModel model, HolonObjectModel newModel) {
|
|
|
+ if(model.size() != newModel.size()) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ for(int i = 0; i < model.size(); i++) {
|
|
|
+ if(!model.getElements().get(i).equals(newModel.getElements().get(i))) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ return true;
|
|
|
+ }
|
|
|
+ public void setObserved(HolonObject observed) {
|
|
|
+ this.observed = observed;
|
|
|
+ }
|
|
|
|
|
|
public class Command {
|
|
|
//InputCommands
|
|
@@ -266,7 +295,10 @@ public class Server implements Runnable{
|
|
|
return false;
|
|
|
}
|
|
|
HolonElementWrapper element = (HolonElementWrapper) obj;
|
|
|
- return this.name == element.name &&
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return this.name.compareTo(element.name) == 0 &&
|
|
|
this.amount == element.amount &&
|
|
|
this.energy == element.energy &&
|
|
|
this.enabled == element.enabled;
|