00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 package com.realtime.crossfire.jxclient.main;
00023
00024 import com.realtime.crossfire.jxclient.guistate.GuiState;
00025 import com.realtime.crossfire.jxclient.guistate.GuiStateManager;
00026 import com.realtime.crossfire.jxclient.server.server.ServerConnection;
00027 import com.realtime.crossfire.jxclient.server.socket.ClientSocketListener;
00028 import com.realtime.crossfire.jxclient.window.GuiManager;
00029 import com.realtime.crossfire.jxclient.window.KeyHandlerListener;
00030 import java.nio.ByteBuffer;
00031 import org.jetbrains.annotations.NotNull;
00032
00038 public class DefaultKeyHandler implements KeyHandlerListener {
00039
00043 @NotNull
00044 private final Exiter exiter;
00045
00049 @NotNull
00050 private final GuiManager guiManager;
00051
00055 @NotNull
00056 private final GuiStateManager guiStateManager;
00057
00061 @NotNull
00062 private final Object semaphoreConnected = new Object();
00063
00067 private boolean connected = false;
00068
00073 @NotNull
00074 private final ClientSocketListener clientSocketListener = new ClientSocketListener() {
00075
00076 @Override
00077 public void connecting() {
00078 setConnected(true);
00079 }
00080
00081 @Override
00082 public void connected() {
00083
00084 }
00085
00086 @Override
00087 public void packetReceived(@NotNull final ByteBuffer packet) {
00088
00089 }
00090
00091 @Override
00092 public void packetSent(@NotNull final byte[] buf, final int len) {
00093
00094 }
00095
00096 @Override
00097 public void disconnecting(@NotNull final String reason, final boolean isError) {
00098
00099 }
00100
00101 @Override
00102 public void disconnected(@NotNull final String reason) {
00103 setConnected(false);
00104 }
00105
00106 };
00107
00115 public DefaultKeyHandler(@NotNull final Exiter exiter, @NotNull final GuiManager guiManager, @NotNull final ServerConnection server, @NotNull final GuiStateManager guiStateManager) {
00116 this.exiter = exiter;
00117 this.guiManager = guiManager;
00118 this.guiStateManager = guiStateManager;
00119 server.addClientSocketListener(clientSocketListener);
00120 }
00121
00125 @Override
00126 public void escPressed() {
00127 if (guiStateManager.getGuiState() == GuiState.CONNECT_FAILED) {
00128 guiStateManager.disconnect();
00129 return;
00130 }
00131
00132 switch (guiManager.escPressed(isConnected())) {
00133 case IGNORE:
00134 break;
00135
00136 case DISCONNECT:
00137 guiStateManager.disconnect();
00138 break;
00139
00140 case QUIT:
00141 exiter.terminate();
00142 break;
00143 }
00144 }
00145
00149 @Override
00150 public void keyReleased() {
00151 guiManager.closeKeybindDialog();
00152 }
00153
00158 private void setConnected(final boolean connected) {
00159 synchronized (semaphoreConnected) {
00160 this.connected = connected;
00161 }
00162 }
00163
00168 private boolean isConnected() {
00169 synchronized (semaphoreConnected) {
00170 return connected;
00171 }
00172 }
00173
00174 }