Crossfire JXClient, Trunk
JXCConnection.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.window;
24 
36 import java.awt.Frame;
37 import java.util.Objects;
38 import org.jetbrains.annotations.NotNull;
39 import org.jetbrains.annotations.Nullable;
40 
41 public class JXCConnection {
42 
46  private static final int DEFAULT_CROSSFIRE_PORT = 13327;
47 
51  @NotNull
52  private static final String TITLE_PREFIX = "jxclient";
53 
57  @NotNull
59 
63  @NotNull
64  private final Shortcuts shortcuts;
65 
69  @NotNull
70  private final Settings settings;
71 
75  @Nullable
76  private Frame frame;
77 
81  @NotNull
82  private final Pickup characterPickup;
83 
88  @NotNull
90 
94  @NotNull
95  private final Logger logger;
96 
100  @Nullable
101  private String hostname;
102 
106  private int port;
107 
111  @Nullable
112  private String character;
113 
118  @NotNull
119  @SuppressWarnings("FieldCanBeLocal")
121 
122  @Override
123  public void start() {
124  disconnect("display start screen");
125  }
126 
127  @Override
128  public void metaserver() {
129  disconnect("display metaserver screen");
130  }
131 
132  @Override
133  public void preConnecting(@NotNull final String serverInfo) {
134  // ignore
135  }
136 
137  @Override
138  public void connecting(@NotNull final String serverInfo) {
139  connect();
140  }
141 
142  @Override
143  public void connecting(@NotNull final ClientSocketState clientSocketState, @NotNull final String param) {
144  // ignore
145  }
146 
147  @Override
148  public void connected() {
149  // ignore
150  }
151 
152  @Override
153  public void connectFailed(@NotNull final String reason) {
154  // ignore
155  }
156 
157  };
158 
162  @NotNull
164 
165  @Override
166  public void pickupChanged(final int pickupOptions) {
167  characterPickup.updatePickupMode(pickupOptions, false);
168  }
169 
170  };
171 
182  public JXCConnection(@NotNull final KeybindingsManager keybindingsManager, @NotNull final Shortcuts shortcuts, @NotNull final Settings settings, @NotNull final Pickup characterPickup, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final Logger logger) {
183  this.keybindingsManager = keybindingsManager;
184  this.shortcuts = shortcuts;
185  this.settings = settings;
186  this.characterPickup = characterPickup;
187  this.server = server;
188  this.logger = logger;
189  guiStateManager.addGuiStateListener(guiStateListener);
190  }
191 
196  public void setFrame(@Nullable final Frame frame) {
197  this.frame = frame;
198  updateTitle();
199  }
200 
205  @Nullable
206  public String getHostname() {
207  return hostname;
208  }
209 
214  public int getPort() {
215  return port;
216  }
217 
222  public void setCharacter(@Nullable final String character) {
223  if (Objects.equals(this.character, character)) {
224  return;
225  }
226 
228 
229  if (hostname != null && this.character != null) {
231  final long pickupMode = characterPickup.getPickupMode();
232  if (pickupMode == Pickup.PU_NOTHING) {
233  settings.remove("pickup_"+hostname+"_"+this.character);
234  } else {
235  settings.putLong(SettingsEntries.getPickupSettingsEntry(hostname, this.character), pickupMode);
236  }
237  }
238 
239  this.character = character;
240  updateTitle();
241 
242  if (hostname != null && character != null) {
244  assert hostname != null;
248  }
249  }
250 
254  private void updateTitle() {
255  if (frame == null) {
256  return;
257  }
258  final String title;
259  if (hostname == null) {
260  title = TITLE_PREFIX;
261  } else if (character == null) {
262  title = TITLE_PREFIX+" - "+hostname;
263  } else {
264  title = TITLE_PREFIX+" - "+hostname+" - "+character;
265  }
266  frame.setTitle(title);
267  }
268 
273  public void setHost(@Nullable final String serverInfo) {
274  @Nullable final String newHostname;
275  final int newPort;
276  if (serverInfo == null) {
277  newHostname = null;
278  newPort = 0;
279  } else {
281  final String[] tmp = serverInfo.split(":", 2);
282  newHostname = tmp[0];
283  newPort = tmp.length < 2 ? DEFAULT_CROSSFIRE_PORT : NumberParser.parseInt(tmp[1], DEFAULT_CROSSFIRE_PORT, 1, 65535);
284  }
285 
286  if (Objects.equals(hostname, newHostname) && port == newPort) {
287  return;
288  }
289 
290  setCharacter(null);
291  hostname = newHostname;
292  port = newPort;
293  updateTitle();
294  logger.setHostname(newHostname);
295  }
296 
301  private void disconnect(@NotNull final String reason) {
302  server.disconnect(reason);
303  setHost(null);
304  }
305 
309  private void connect() {
310  assert hostname != null;
312  }
313 
314 }
com.realtime.crossfire.jxclient
com.realtime.crossfire.jxclient.window.JXCConnection.DEFAULT_CROSSFIRE_PORT
static final int DEFAULT_CROSSFIRE_PORT
Definition: JXCConnection.java:46
com.realtime.crossfire.jxclient.shortcuts.Shortcuts
Definition: Shortcuts.java:43
com.realtime.crossfire.jxclient.server
com.realtime.crossfire.jxclient.guistate.ClientSocketState
Definition: ClientSocketState.java:30
com.realtime.crossfire.jxclient.window.Logger
Definition: Logger.java:43
com.realtime.crossfire.jxclient.window.JXCConnection.updateTitle
void updateTitle()
Definition: JXCConnection.java:254
com.realtime.crossfire.jxclient.server.server.ServerConnection.disconnect
void disconnect(@NotNull String reason)
com.realtime.crossfire.jxclient.window.JXCConnection.connect
void connect()
Definition: JXCConnection.java:309
com.realtime.crossfire.jxclient.window.JXCConnection.setCharacter
void setCharacter(@Nullable final String character)
Definition: JXCConnection.java:222
com.realtime.crossfire.jxclient.window.JXCConnection.TITLE_PREFIX
static final String TITLE_PREFIX
Definition: JXCConnection.java:52
com.realtime.crossfire.jxclient.settings.options.Pickup.getPickupMode
long getPickupMode()
Definition: Pickup.java:188
com.realtime.crossfire.jxclient.server.crossfire.CrossfirePickupListener
Definition: CrossfirePickupListener.java:31
com.realtime.crossfire.jxclient.settings.Settings.getLong
long getLong(@NotNull final SettingsEntry< Long > key)
Definition: Settings.java:120
com.realtime.crossfire.jxclient.window.JXCConnection
Definition: JXCConnection.java:41
com.realtime.crossfire.jxclient.window.JXCConnection.setHost
void setHost(@Nullable final String serverInfo)
Definition: JXCConnection.java:273
com.realtime.crossfire.jxclient.window.JXCConnection.port
int port
Definition: JXCConnection.java:106
com.realtime.crossfire.jxclient.settings.Settings.putString
void putString(@NotNull final SettingsEntry<?> key, @NotNull final String value)
Definition: Settings.java:129
com.realtime.crossfire.jxclient.settings.options.Pickup.updatePickupMode
void updatePickupMode(final long pickupMode, final boolean sendToServer)
Definition: Pickup.java:164
com.realtime.crossfire.jxclient.settings.SettingsEntries.SERVER
static final SettingsEntry< String > SERVER
Definition: SettingsEntries.java:38
com.realtime.crossfire.jxclient.gui.keybindings
Definition: InvalidKeyBindingException.java:23
com.realtime.crossfire.jxclient.window.JXCConnection.character
String character
Definition: JXCConnection.java:112
com.realtime.crossfire.jxclient.window.JXCConnection.server
final CrossfireServerConnection server
Definition: JXCConnection.java:89
com.realtime.crossfire.jxclient.settings
Definition: CommandHistory.java:23
com.realtime.crossfire.jxclient.window.JXCConnection.frame
Frame frame
Definition: JXCConnection.java:76
com.realtime.crossfire.jxclient.guistate.GuiStateManager
Definition: GuiStateManager.java:34
com.realtime.crossfire.jxclient.settings.SettingsEntries.getPickupSettingsEntry
static SettingsEntry< Long > getPickupSettingsEntry(@NotNull final String hostname, @NotNull final String characterName)
Definition: SettingsEntries.java:94
com.realtime.crossfire.jxclient.guistate
Definition: ClientSocketState.java:23
com.realtime.crossfire.jxclient.util.NumberParser.parseInt
static int parseInt(@NotNull final String string, final int defaultValue)
Definition: NumberParser.java:46
com.realtime.crossfire.jxclient.guistate.GuiStateListener
Definition: GuiStateListener.java:32
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection
Definition: CrossfireServerConnection.java:37
com.realtime.crossfire.jxclient.window.JXCConnection.logger
final Logger logger
Definition: JXCConnection.java:95
com.realtime.crossfire.jxclient.gui
com.realtime.crossfire.jxclient.settings.Settings
Definition: Settings.java:45
com.realtime.crossfire.jxclient.window.JXCConnection.crossfirePickupListener
final CrossfirePickupListener crossfirePickupListener
Definition: JXCConnection.java:163
com.realtime.crossfire.jxclient.window.JXCConnection.characterPickup
final Pickup characterPickup
Definition: JXCConnection.java:82
com.realtime.crossfire.jxclient.util
Definition: Codec.java:23
com.realtime.crossfire.jxclient.server.crossfire
Definition: AbstractCrossfireServerConnection.java:23
com.realtime.crossfire.jxclient.window.ShortcutsLoader.loadShortcuts
static void loadShortcuts(@NotNull final Shortcuts shortcuts, @NotNull final CharSequence hostname, @NotNull final CharSequence character)
Definition: ShortcutsLoader.java:56
com.realtime.crossfire.jxclient.settings.options.Pickup
Definition: Pickup.java:34
com.realtime.crossfire.jxclient.window.ShortcutsLoader
Definition: ShortcutsLoader.java:42
com.realtime.crossfire.jxclient.settings.Settings.putLong
void putLong(@NotNull final SettingsEntry< Long > key, final long value)
Definition: Settings.java:169
com.realtime.crossfire.jxclient.shortcuts
Definition: Shortcut.java:23
com.realtime.crossfire.jxclient.window.JXCConnection.getPort
int getPort()
Definition: JXCConnection.java:214
com.realtime.crossfire.jxclient.window.JXCConnection.getHostname
String getHostname()
Definition: JXCConnection.java:206
com.realtime.crossfire.jxclient.settings.Settings.remove
void remove(@NotNull final String key)
Definition: Settings.java:177
com.realtime.crossfire.jxclient.window.JXCConnection.setFrame
void setFrame(@Nullable final Frame frame)
Definition: JXCConnection.java:196
com.realtime.crossfire
com.realtime.crossfire.jxclient.window.JXCConnection.guiStateListener
final GuiStateListener guiStateListener
Definition: JXCConnection.java:120
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.removeCrossfirePickupListener
void removeCrossfirePickupListener(@NotNull CrossfirePickupListener listener)
com.realtime.crossfire.jxclient.settings.options
Definition: CheckBoxOption.java:23
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager.loadPerCharacterBindings
void loadPerCharacterBindings(@NotNull final CharSequence hostname, @NotNull final CharSequence character)
Definition: KeybindingsManager.java:175
com.realtime
com
com.realtime.crossfire.jxclient.window.JXCConnection.settings
final Settings settings
Definition: JXCConnection.java:70
com.realtime.crossfire.jxclient.window.Logger.setHostname
void setHostname(@Nullable final String hostname)
Definition: Logger.java:100
com.realtime.crossfire.jxclient.server.crossfire.CrossfireServerConnection.addCrossfirePickupListener
void addCrossfirePickupListener(@NotNull CrossfirePickupListener listener)
com.realtime.crossfire.jxclient.window.JXCConnection.shortcuts
final Shortcuts shortcuts
Definition: JXCConnection.java:64
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager.unloadPerCharacterBindings
void unloadPerCharacterBindings()
Definition: KeybindingsManager.java:191
com.realtime.crossfire.jxclient.util.NumberParser
Definition: NumberParser.java:32
com.realtime.crossfire.jxclient.window.JXCConnection.JXCConnection
JXCConnection(@NotNull final KeybindingsManager keybindingsManager, @NotNull final Shortcuts shortcuts, @NotNull final Settings settings, @NotNull final Pickup characterPickup, @NotNull final CrossfireServerConnection server, @NotNull final GuiStateManager guiStateManager, @NotNull final Logger logger)
Definition: JXCConnection.java:182
com.realtime.crossfire.jxclient.settings.options.Pickup.PU_NOTHING
static final long PU_NOTHING
Definition: Pickup.java:39
com.realtime.crossfire.jxclient.window.JXCConnection.hostname
String hostname
Definition: JXCConnection.java:101
com.realtime.crossfire.jxclient.server.server.ServerConnection.connect
void connect(@NotNull String hostname, int port)
com.realtime.crossfire.jxclient.window.JXCConnection.disconnect
void disconnect(@NotNull final String reason)
Definition: JXCConnection.java:301
com.realtime.crossfire.jxclient.settings.SettingsEntries
Definition: SettingsEntries.java:32
com.realtime.crossfire.jxclient.gui.keybindings.KeybindingsManager
Definition: KeybindingsManager.java:40
com.realtime.crossfire.jxclient.window.JXCConnection.keybindingsManager
final KeybindingsManager keybindingsManager
Definition: JXCConnection.java:58