building on statemachine
This commit is contained in:
parent
3c05a00c1a
commit
aa08f7e486
|
@ -0,0 +1,14 @@
|
||||||
|
<component name="libraryTable">
|
||||||
|
<library name="commons-codec-1.4">
|
||||||
|
<CLASSES>
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/commons-codec-1.4.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/commons-logging-1.1.1.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/httpclient-4.1.3.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/httpclient-cache-4.1.3.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/httpcore-4.1.4.jar!/" />
|
||||||
|
<root url="jar://$PROJECT_DIR$/libs/httpmime-4.1.3.jar!/" />
|
||||||
|
</CLASSES>
|
||||||
|
<JAVADOC />
|
||||||
|
<SOURCES />
|
||||||
|
</library>
|
||||||
|
</component>
|
|
@ -11,21 +11,5 @@
|
||||||
<output url="file://$PROJECT_DIR$/out" />
|
<output url="file://$PROJECT_DIR$/out" />
|
||||||
</component>
|
</component>
|
||||||
<component name="WebServicesPlugin" addRequiredLibraries="true" />
|
<component name="WebServicesPlugin" addRequiredLibraries="true" />
|
||||||
<component name="masterDetails">
|
|
||||||
<states>
|
|
||||||
<state key="ProjectJDKs.UI">
|
|
||||||
<settings>
|
|
||||||
<last-edited>1.6</last-edited>
|
|
||||||
<splitter-proportions>
|
|
||||||
<option name="proportions">
|
|
||||||
<list>
|
|
||||||
<option value="0.2" />
|
|
||||||
</list>
|
|
||||||
</option>
|
|
||||||
</splitter-proportions>
|
|
||||||
</settings>
|
|
||||||
</state>
|
|
||||||
</states>
|
|
||||||
</component>
|
|
||||||
</project>
|
</project>
|
||||||
|
|
||||||
|
|
|
@ -8,9 +8,6 @@
|
||||||
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
<item class="com.intellij.uiDesigner.VSpacer" tooltip-text="Vertical Spacer" icon="/com/intellij/uiDesigner/icons/vspacer.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
<default-constraints vsize-policy="6" hsize-policy="1" anchor="0" fill="2" />
|
||||||
</item>
|
</item>
|
||||||
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
|
||||||
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
|
||||||
</item>
|
|
||||||
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
<item class="javax.swing.JScrollPane" icon="/com/intellij/uiDesigner/icons/scrollPane.png" removable="false" auto-create-binding="false" can-attach-label="true">
|
||||||
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
<default-constraints vsize-policy="7" hsize-policy="7" anchor="0" fill="3" />
|
||||||
</item>
|
</item>
|
||||||
|
@ -26,6 +23,9 @@
|
||||||
<property name="text" value="RadioButton" />
|
<property name="text" value="RadioButton" />
|
||||||
</initial-values>
|
</initial-values>
|
||||||
</item>
|
</item>
|
||||||
|
<item class="javax.swing.JPanel" icon="/com/intellij/uiDesigner/icons/panel.png" removable="false" auto-create-binding="false" can-attach-label="false">
|
||||||
|
<default-constraints vsize-policy="3" hsize-policy="3" anchor="0" fill="3" />
|
||||||
|
</item>
|
||||||
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
<item class="javax.swing.JCheckBox" icon="/com/intellij/uiDesigner/icons/checkBox.png" removable="false" auto-create-binding="true" can-attach-label="false">
|
||||||
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
<default-constraints vsize-policy="0" hsize-policy="3" anchor="8" fill="0" />
|
||||||
<initial-values>
|
<initial-values>
|
||||||
|
|
|
@ -7,6 +7,8 @@
|
||||||
</content>
|
</content>
|
||||||
<orderEntry type="inheritedJdk" />
|
<orderEntry type="inheritedJdk" />
|
||||||
<orderEntry type="sourceFolder" forTests="false" />
|
<orderEntry type="sourceFolder" forTests="false" />
|
||||||
|
<orderEntry type="library" name="commons-codec-1.4" level="project" />
|
||||||
|
<orderEntry type="library" name="javampd-4.0" level="project" />
|
||||||
</component>
|
</component>
|
||||||
</module>
|
</module>
|
||||||
|
|
||||||
|
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
|
@ -0,0 +1,79 @@
|
||||||
|
package de.ctdo.crashtest;
|
||||||
|
|
||||||
|
import org.apache.http.HttpResponse;
|
||||||
|
import org.apache.http.client.ClientProtocolException;
|
||||||
|
import org.apache.http.client.HttpClient;
|
||||||
|
import org.apache.http.client.methods.HttpPost;
|
||||||
|
import org.apache.http.entity.StringEntity;
|
||||||
|
import org.apache.http.impl.client.DefaultHttpClient;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.UnsupportedEncodingException;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User: lpless
|
||||||
|
* Date: 10.05.12
|
||||||
|
* Time: 11:03
|
||||||
|
*/
|
||||||
|
public class BuntiClient {
|
||||||
|
String baseAddress;
|
||||||
|
HttpClient client = new DefaultHttpClient();
|
||||||
|
|
||||||
|
public BuntiClient(String server, int port) {
|
||||||
|
baseAddress = "http://" + server + ":" + port + "/";
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setPar56(int id, int red, int green, int blue) {
|
||||||
|
try {
|
||||||
|
HttpPost post = new HttpPost(baseAddress + "/control/devices");
|
||||||
|
post.addHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
StringEntity entity = new StringEntity(
|
||||||
|
"{ \"timeStamp\": 0, \"updates\": [ {\"deviceId\": "+id+", \"options\": { \"red\": "+
|
||||||
|
red+", \"green\": "+green+", \"blue\": "+blue+" } } ] }" ,
|
||||||
|
"UTF-8");
|
||||||
|
|
||||||
|
post.setEntity(entity);
|
||||||
|
|
||||||
|
HttpResponse response = client.execute(post);
|
||||||
|
System.out.println(response);
|
||||||
|
|
||||||
|
post.abort();
|
||||||
|
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ClientProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setLampel(boolean red, boolean yellow, boolean green) {
|
||||||
|
try {
|
||||||
|
HttpPost post = new HttpPost(baseAddress + "/control/devices");
|
||||||
|
post.addHeader("Content-Type", "application/json");
|
||||||
|
|
||||||
|
StringEntity entity = new StringEntity(
|
||||||
|
"{ \"timeStamp\": 0, \"updates\": [ {\"deviceId\": 4, \"options\": { \"red\": "+
|
||||||
|
red+", \"green\": "+green+", \"yellow\": "+yellow+" } } ] }" ,
|
||||||
|
"UTF-8");
|
||||||
|
|
||||||
|
post.setEntity(entity);
|
||||||
|
|
||||||
|
HttpResponse response = client.execute(post);
|
||||||
|
System.out.println(response);
|
||||||
|
|
||||||
|
post.abort();
|
||||||
|
|
||||||
|
} catch (UnsupportedEncodingException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (ClientProtocolException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,10 @@
|
||||||
|
package de.ctdo.crashtest;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* User: lpless
|
||||||
|
* Date: 10.05.12
|
||||||
|
* Time: 13:37
|
||||||
|
*/
|
||||||
|
public interface StateChangeListener {
|
||||||
|
void stateChanged(Statemachine.state newState);
|
||||||
|
}
|
|
@ -1,11 +1,21 @@
|
||||||
package de.ctdo.crashtest;
|
package de.ctdo.crashtest;
|
||||||
|
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
public class Statemachine {
|
public class Statemachine {
|
||||||
private final char BLUE_BUTTON = 'd';
|
private final char BLUE_BUTTON = 'd';
|
||||||
private final char LIGHT_BARRIER = 'k';
|
private final char LIGHT_BARRIER = 'k';
|
||||||
private final char TABLE_ONE = 'c';
|
private final char TABLE_ONE = 'c';
|
||||||
private final char TABLE_TWO = 'v';
|
private final char TABLE_TWO = 'v';
|
||||||
private final char TABLE_THREE = 'b';
|
private final char TABLE_THREE = 'b';
|
||||||
|
private long lastHandleInput = 0;
|
||||||
|
private final List<StateChangeListener> stateChangeListenerList = new ArrayList<StateChangeListener>();
|
||||||
|
private int stateChangeCounter = 0;
|
||||||
|
|
||||||
|
public void addStateChangedListener(StateChangeListener listener) {
|
||||||
|
stateChangeListenerList.add(listener);
|
||||||
|
}
|
||||||
|
|
||||||
public enum state {
|
public enum state {
|
||||||
IDLE,
|
IDLE,
|
||||||
|
@ -27,13 +37,64 @@ public class Statemachine {
|
||||||
return currentState;
|
return currentState;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getStateChangeCounter() {
|
||||||
|
return stateChangeCounter;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void reset() {
|
||||||
|
stateChangeCounter = 0;
|
||||||
|
currentState = state.IDLE;
|
||||||
|
}
|
||||||
|
|
||||||
public void handleInput(char input) {
|
public void handleInput(char input) {
|
||||||
|
if(System.currentTimeMillis() - lastHandleInput < 200 ) return;
|
||||||
|
|
||||||
state newState = getNewState(input);
|
state newState = getNewState(input);
|
||||||
|
|
||||||
System.out.println("newState = " + newState);
|
if( newState != currentState ) {
|
||||||
|
stateChangeCounter++;
|
||||||
|
System.out.println("newState = " + newState);
|
||||||
|
|
||||||
currentState = newState;
|
workForState(newState);
|
||||||
|
|
||||||
|
|
||||||
|
currentState = newState;
|
||||||
|
onStateChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
lastHandleInput = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void onStateChanged() {
|
||||||
|
for(StateChangeListener listener: stateChangeListenerList) {
|
||||||
|
listener.stateChanged(currentState);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void workForState(state newState) {
|
||||||
|
switch (newState) {
|
||||||
|
case IDLE:
|
||||||
|
break;
|
||||||
|
case ENTERED_ROOM:
|
||||||
|
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_ONE:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_TWO:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_THREE:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_FOUR:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_FIVE:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_SIX:
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_SEVEN:
|
||||||
|
break;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private state getNewState(char input) {
|
private state getNewState(char input) {
|
||||||
|
|
|
@ -1,29 +1,133 @@
|
||||||
package de.ctdo.crashtest;
|
package de.ctdo.crashtest;
|
||||||
|
|
||||||
|
import org.bff.javampd.MPD;
|
||||||
|
import org.bff.javampd.MPDPlayer;
|
||||||
|
import org.bff.javampd.exception.MPDConnectionException;
|
||||||
|
import org.bff.javampd.exception.MPDResponseException;
|
||||||
|
|
||||||
import javax.swing.*;
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
import java.awt.event.*;
|
import java.awt.event.*;
|
||||||
|
import java.net.UnknownHostException;
|
||||||
|
|
||||||
public class SteuerungFrame extends JFrame {
|
public class SteuerungFrame extends JFrame implements StateChangeListener {
|
||||||
|
private JPanel pnlRoot;
|
||||||
|
private JLabel lblState;
|
||||||
|
private char lastKey = ' ';
|
||||||
|
private MPD mpd;
|
||||||
|
private MPDPlayer player;
|
||||||
|
|
||||||
Statemachine machine = new Statemachine();
|
Statemachine machine = new Statemachine();
|
||||||
|
BuntiClient bunti = new BuntiClient("bunti.ctdo.de", 8080);
|
||||||
|
|
||||||
public SteuerungFrame() {
|
public SteuerungFrame() {
|
||||||
//setType(Type.UTILITY);
|
//setType(Type.UTILITY);
|
||||||
setBackground(Color.black);
|
setBackground(Color.black);
|
||||||
setBounds(200,200, 200, 200);
|
setBounds(200,200, 400, 200);
|
||||||
|
|
||||||
|
machine.addStateChangedListener(this);
|
||||||
|
|
||||||
|
initGui();
|
||||||
|
|
||||||
|
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
||||||
|
setVisible(true);
|
||||||
|
|
||||||
|
try {
|
||||||
|
mpd = new MPD("dampfradio.raum.chaostreff-dortmund.de", 6600);
|
||||||
|
player = mpd.getMPDPlayer();
|
||||||
|
|
||||||
|
} catch (UnknownHostException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
} catch (MPDConnectionException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
addKeyListener(new KeyAdapter() {
|
addKeyListener(new KeyAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void keyTyped(KeyEvent e) {
|
public void keyTyped(KeyEvent e) {
|
||||||
|
lastKey = e.getKeyChar();
|
||||||
//System.out.println(e.getKeyChar());
|
//System.out.println(e.getKeyChar());
|
||||||
machine.handleInput(e.getKeyChar());
|
machine.handleInput(e.getKeyChar());
|
||||||
|
//bunti.setPar56(1, 0xff, 0xff, 0xff);
|
||||||
|
|
||||||
|
updateGui();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
setDefaultCloseOperation(EXIT_ON_CLOSE);
|
addWindowStateListener(new WindowAdapter() {
|
||||||
setVisible(true);
|
@Override
|
||||||
|
public void windowClosing(WindowEvent e) {
|
||||||
|
try {
|
||||||
|
if(mpd != null) mpd.close();
|
||||||
|
} catch (MPDConnectionException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
} catch (MPDResponseException e1) {
|
||||||
|
e1.printStackTrace();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void stateChanged(Statemachine.state newState) {
|
||||||
|
updateGui();
|
||||||
|
|
||||||
|
switch (newState) {
|
||||||
|
case IDLE:
|
||||||
|
bunti.setPar56(0,0,0,0);
|
||||||
|
bunti.setPar56(1,0,0,0);
|
||||||
|
bunti.setPar56(2,0,0,0);
|
||||||
|
bunti.setPar56(3,0,0,0);
|
||||||
|
bunti.setLampel(false,false,false);
|
||||||
|
break;
|
||||||
|
case ENTERED_ROOM:
|
||||||
|
bunti.setLampel(true,false,false);
|
||||||
|
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_ONE:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_TWO:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_THREE:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_FOUR:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_FIVE:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_SIX:
|
||||||
|
bunti.setLampel(false,true,false);
|
||||||
|
break;
|
||||||
|
case TABLE_GAME_SEVEN:
|
||||||
|
bunti.setLampel(false,false,true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
private void initGui() {
|
||||||
|
Container pane = getContentPane();
|
||||||
|
|
||||||
|
pnlRoot = new JPanel(new FlowLayout());
|
||||||
|
lblState = new JLabel("", JLabel.LEFT);
|
||||||
|
pnlRoot.add(lblState);
|
||||||
|
|
||||||
|
pane.add(pnlRoot);
|
||||||
|
|
||||||
|
updateGui();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateGui() {
|
||||||
|
lblState.setText("<html>LastKey: " + lastKey + "<br>CurrentState: " +
|
||||||
|
machine.getCurrentState() + "<br>ChangeCounter: " +
|
||||||
|
machine.getStateChangeCounter() + "</html>");
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue