Crossfire JXClient, Trunk
GuiStateManager.java
Go to the documentation of this file.
1 /*
2  * This file is part of JXClient, the Fullscreen Java Crossfire Client.
3  *
4  * JXClient is free software; you can redistribute it and/or modify
5  * it under the terms of the GNU General Public License as published by
6  * the Free Software Foundation; either version 2 of the License, or
7  * (at your option) any later version.
8  *
9  * JXClient is distributed in the hope that it will be useful,
10  * but WITHOUT ANY WARRANTY; without even the implied warranty of
11  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  * GNU General Public License for more details.
13  *
14  * You should have received a copy of the GNU General Public License
15  * along with JXClient; if not, write to the Free Software
16  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
17  *
18  * Copyright (C) 2005-2008 Yann Chachkoff
19  * Copyright (C) 2006-2017,2019-2023 Andreas Kirschbaum
20  * Copyright (C) 2010-2012,2014-2018,2020-2023 Nicolas Weeger
21  */
22 
23 package com.realtime.crossfire.jxclient.guistate;
24 
26 import org.jetbrains.annotations.NotNull;
27 import org.jetbrains.annotations.Nullable;
28 
34 public abstract class GuiStateManager {
35 
39  @Nullable
40  private GuiState guiState;
41 
45  @NotNull
46  private final Object sync = new Object();
47 
51  @NotNull
53 
57  protected GuiStateManager() {
58  }
59 
64  public void changeGUI(@NotNull final GuiState guiState) {
65  synchronized (sync) {
66  if (this.guiState == guiState) {
67  return;
68  }
69 
70  this.guiState = guiState;
71  }
72 
73  doChangeGUI(() -> {
74  switch (guiState) {
75  case START:
76  for (GuiStateListener listener : guiStateListeners) {
77  listener.start();
78  }
79  break;
80 
81  case METASERVER:
82  for (GuiStateListener listener : guiStateListeners) {
83  listener.metaserver();
84  }
85  break;
86 
87  case CONNECTING:
88  throw new IllegalArgumentException("changeGUI() called in state CONNECTING");
89 
90  case CONNECTED:
91  for (GuiStateListener listener : guiStateListeners) {
92  listener.connected();
93  }
94  break;
95 
96  case CONNECT_FAILED:
97  throw new IllegalArgumentException("changeGUI() called in state CONNECT_FAILED");
98  }
99  });
100  }
101 
106  protected abstract void doChangeGUI(@NotNull final Runnable runnable);
107 
113  private void changeGUI(@NotNull final GuiState guiState, @NotNull final String param) {
114  synchronized (sync) {
115  if (this.guiState == guiState) {
116  return;
117  }
118 
119  this.guiState = guiState;
120 
121  switch (guiState) {
122  case START:
123  throw new IllegalArgumentException("changeGUI() called in state START");
124 
125  case METASERVER:
126  throw new IllegalArgumentException("changeGUI() called in state METASERVER");
127 
128  case CONNECTING:
129  for (GuiStateListener listener : guiStateListeners) {
130  listener.preConnecting(param);
131  }
132  for (GuiStateListener listener : guiStateListeners) {
133  listener.connecting(param);
134  }
135  break;
136 
137  case CONNECTED:
138  throw new IllegalArgumentException("changeGUI() called in state CONNECTED");
139 
140  case CONNECT_FAILED:
141  for (GuiStateListener listener : guiStateListeners) {
142  listener.connectFailed(param);
143  }
144  break;
145  }
146  }
147  }
148 
153  @Nullable
155  synchronized (sync) {
156  return guiState;
157  }
158  }
159 
164  public void addGuiStateListener(@NotNull final GuiStateListener listener) {
165  guiStateListeners.add(listener);
166  }
167 
172  public void removeGuiStateListener(@NotNull final GuiStateListener listener) {
173  guiStateListeners.remove(listener);
174  }
175 
180  public void connect(@NotNull final String serverInfo) {
181  changeGUI(GuiState.CONNECTING, serverInfo);
182  }
183 
187  public void disconnect() {
189  }
190 
197  public void setClientSocketState(@NotNull final ClientSocketState clientSocketState, @NotNull final String param) {
198  for (GuiStateListener listener : guiStateListeners) {
199  listener.connecting(clientSocketState, param);
200  }
201  if (clientSocketState == ClientSocketState.CONNECTED) {
203  }
204  }
205 
211  public void disconnecting(@NotNull final String reason, final boolean isError) {
212  synchronized (sync) {
213  if (guiState == GuiState.CONNECTING || (isError && guiState == GuiState.CONNECTED)) {
215  }
216  }
217  }
218 
222  public void disconnected() {
223  synchronized (sync) {
226  }
227  }
228  }
229 
230 }
com.realtime.crossfire.jxclient.guistate.GuiStateManager.disconnected
void disconnected()
Definition: GuiStateManager.java:222
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.guistate.GuiState.METASERVER
METASERVER
Definition: GuiState.java:39
com.realtime.crossfire.jxclient.guistate.GuiStateManager.removeGuiStateListener
void removeGuiStateListener(@NotNull final GuiStateListener listener)
Definition: GuiStateManager.java:172
com.realtime.crossfire.jxclient.guistate.ClientSocketState
Definition: ClientSocketState.java:30
com.realtime.crossfire.jxclient.guistate.GuiStateManager.changeGUI
void changeGUI(@NotNull final GuiState guiState, @NotNull final String param)
Definition: GuiStateManager.java:113
com.realtime.crossfire.jxclient.util.EventListenerList2
Definition: EventListenerList2.java:37
com.realtime.crossfire.jxclient.guistate.GuiStateManager.connect
void connect(@NotNull final String serverInfo)
Definition: GuiStateManager.java:180
com.realtime.crossfire.jxclient.guistate.GuiStateManager.GuiStateManager
GuiStateManager()
Definition: GuiStateManager.java:57
com.realtime.crossfire.jxclient.guistate.GuiStateManager
Definition: GuiStateManager.java:34
com.realtime.crossfire.jxclient.guistate.GuiState.CONNECTED
CONNECTED
Definition: GuiState.java:49
com.realtime.crossfire.jxclient.guistate.GuiStateManager.getGuiState
GuiState getGuiState()
Definition: GuiStateManager.java:154
com.realtime.crossfire.jxclient.guistate.GuiStateListener
Definition: GuiStateListener.java:32
com.realtime.crossfire.jxclient.guistate.GuiStateManager.guiStateListeners
final EventListenerList2< GuiStateListener > guiStateListeners
Definition: GuiStateManager.java:52
com.realtime.crossfire.jxclient.guistate.GuiStateManager.doChangeGUI
abstract void doChangeGUI(@NotNull final Runnable runnable)
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.guistate.GuiStateManager.disconnect
void disconnect()
Definition: GuiStateManager.java:187
com.realtime.crossfire.jxclient.guistate.GuiStateManager.disconnecting
void disconnecting(@NotNull final String reason, final boolean isError)
Definition: GuiStateManager.java:211
com.realtime.crossfire
com.realtime
com
com.realtime.crossfire.jxclient.guistate.ClientSocketState.CONNECTED
CONNECTED
Definition: ClientSocketState.java:65
com.realtime.crossfire.jxclient.guistate.GuiStateManager.sync
final Object sync
Definition: GuiStateManager.java:46
com.realtime.crossfire.jxclient.guistate.GuiStateManager.setClientSocketState
void setClientSocketState(@NotNull final ClientSocketState clientSocketState, @NotNull final String param)
Definition: GuiStateManager.java:197
com.realtime.crossfire.jxclient.guistate.GuiState.CONNECT_FAILED
CONNECT_FAILED
Definition: GuiState.java:54
com.realtime.crossfire.jxclient.guistate.GuiStateManager.changeGUI
void changeGUI(@NotNull final GuiState guiState)
Definition: GuiStateManager.java:64
com.realtime.crossfire.jxclient.guistate.GuiStateManager.addGuiStateListener
void addGuiStateListener(@NotNull final GuiStateListener listener)
Definition: GuiStateManager.java:164
com.realtime.crossfire.jxclient.guistate.GuiState
Definition: GuiState.java:29
com.realtime.crossfire.jxclient.guistate.GuiState.CONNECTING
CONNECTING
Definition: GuiState.java:44
com.realtime.crossfire.jxclient.guistate.GuiStateManager.guiState
GuiState guiState
Definition: GuiStateManager.java:40