Browse Source

Allow configuring local network

Can disable/enable local network and set port
Arnaud Vergnet 3 years ago
parent
commit
298e01d09c

+ 5
- 1
client/config.json View File

@@ -1,11 +1,15 @@
1 1
 {
2 2
   "serveur": {
3
-    "actif": 1,
3
+    "actif": 0,
4 4
     "uri": "localhost",
5 5
     "type": "INSA",
6 6
     "ports": {
7 7
       "presence": 35650,
8 8
       "proxy": 35750
9 9
     }
10
+  },
11
+  "local": {
12
+    "actif": 1,
13
+    "port": 31590
10 14
   }
11 15
 }

+ 82
- 2
client/src/main/java/fr/insa/clavardator/client/config/Config.java View File

@@ -8,10 +8,13 @@ import org.json.JSONObject;
8 8
 public class Config {
9 9
 
10 10
 	private ServerConfig serverConfig;
11
+	private LocalConfig localConfig;
11 12
 	private final String SERVER_KEY = "serveur";
13
+	private final String LOCAL_KEY = "local";
12 14
 
13 15
 	public Config() {
14 16
 		serverConfig = new ServerConfig();
17
+		localConfig = new LocalConfig();
15 18
 	}
16 19
 
17 20
 	public Config(JSONObject obj) {
@@ -19,14 +22,22 @@ public class Config {
19 22
 		if (obj.has(SERVER_KEY)) {
20 23
 			this.serverConfig = new ServerConfig(obj.getJSONObject(SERVER_KEY));
21 24
 		}
25
+		if (obj.has(LOCAL_KEY)) {
26
+			this.localConfig = new LocalConfig(obj.getJSONObject(LOCAL_KEY));
27
+		}
22 28
 	}
23 29
 
24 30
 	public ServerConfig getServerConfig() {
25 31
 		return serverConfig;
26 32
 	}
33
+	public LocalConfig getLocalConfig() {
34
+		return localConfig;
35
+	}
27 36
 
28 37
 	@SuppressWarnings("FieldCanBeLocal")
29 38
 	public static class ServerConfig {
39
+		public static final int DEFAULT_PRESENCE_PORT = 35650;
40
+		public static final int DEFAULT_PROXY_PORT = 35750;
30 41
 
31 42
 		private JSONObject obj;
32 43
 
@@ -114,8 +125,8 @@ public class Config {
114 125
 				presencePort = portsObj.getInt(PORT_PRESENCE_KEY);
115 126
 				proxyPort = portsObj.getInt(PORT_PROXY_KEY);
116 127
 			} catch (JSONException e) {
117
-				presencePort = 30000; // TODO set default ports
118
-				proxyPort = 300001;
128
+				presencePort = DEFAULT_PRESENCE_PORT;
129
+				proxyPort = DEFAULT_PROXY_PORT;
119 130
 			}
120 131
 		}
121 132
 
@@ -145,4 +156,73 @@ public class Config {
145 156
 			return proxyPort;
146 157
 		}
147 158
 	}
159
+
160
+	@SuppressWarnings("FieldCanBeLocal")
161
+	public static class LocalConfig {
162
+		public static final int DEFAULT_TCP_PORT = 31598;
163
+
164
+		private JSONObject obj;
165
+
166
+		private boolean enabled;
167
+		private int port;
168
+
169
+		private final String ENABLED_KEY = "actif";
170
+		private final String PORT_KEY = "port";
171
+
172
+		/**
173
+		 * Basic constructor setting the default local configuration
174
+		 */
175
+		public LocalConfig() {
176
+			enabled = true;
177
+			port = DEFAULT_TCP_PORT;
178
+		}
179
+
180
+		/**
181
+		 * Tries to read the given JSON object to extract custom user configuration
182
+		 *
183
+		 * @param obj THe JSON object to read config from
184
+		 */
185
+		public LocalConfig(JSONObject obj) {
186
+			this();
187
+			this.obj = obj;
188
+			readEnabled();
189
+			if (enabled) {
190
+				readServerPort();
191
+			}
192
+		}
193
+
194
+		/**
195
+		 * Reads if local mode is enabled.
196
+		 * Uses true by default.
197
+		 */
198
+		private void readEnabled() {
199
+			try {
200
+				enabled = obj.getInt(ENABLED_KEY) == 1;
201
+			} catch (JSONException e) {
202
+				enabled = true;
203
+			}
204
+		}
205
+
206
+		private void readServerPort() {
207
+			try {
208
+				port = obj.getInt(PORT_KEY);
209
+			} catch (JSONException e) {
210
+				port = DEFAULT_TCP_PORT;
211
+			}
212
+		}
213
+
214
+		/**
215
+		 * Checks if the local mode is enabled.
216
+		 * If this returns false, all other data returned by this object can be ignored.
217
+		 *
218
+		 * @return True if enabled, false otherwise.
219
+		 */
220
+		public boolean isEnabled() {
221
+			return enabled;
222
+		}
223
+
224
+		public int getPort() {
225
+			return port;
226
+		}
227
+	}
148 228
 }

+ 2
- 1
client/src/main/java/fr/insa/clavardator/client/network/PeerHandshake.java View File

@@ -15,12 +15,13 @@ public class PeerHandshake {
15 15
 	private TcpConnection connection;
16 16
 	private UserInformation userInformation;
17 17
 
18
-	public void createConnection(InetAddress ipAddr, UserConnectedCallback callback, ErrorCallback errorCallback) {
18
+	public void createConnection(InetAddress ipAddr, int port, UserConnectedCallback callback, ErrorCallback errorCallback) {
19 19
 		closeConnection();
20 20
 		Log.v(this.getClass().getSimpleName(), "Creating new TCP connection ");
21 21
 
22 22
 		connection = new TcpConnection(
23 23
 				ipAddr,
24
+				port,
24 25
 				(thisConnection) -> init(thisConnection,
25 26
 						false,
26 27
 						callback,

+ 35
- 14
client/src/main/java/fr/insa/clavardator/client/ui/MainController.java View File

@@ -56,6 +56,11 @@ public class MainController implements Initializable {
56 56
 	private Presence presenceServer;
57 57
 	private boolean online;
58 58
 
59
+	private final int DEFAULT_PORT = 31598;
60
+
61
+	private int port = DEFAULT_PORT;
62
+	private boolean localEnabled = true;
63
+
59 64
 	public MainController() {
60 65
 		online = false;
61 66
 		currentUser = CurrentUser.getInstance();
@@ -168,8 +173,10 @@ public class MainController implements Initializable {
168 173
 	 * If any error happens, disconnect the user from chat and ask for reconnection.
169 174
 	 */
170 175
 	private void discoverActiveUsers() {
171
-		if (userList != null && online) {
172
-			userList.discoverActiveUsers((e) -> {
176
+		if (userList != null && online && localEnabled) {
177
+			userList.discoverActiveUsers(
178
+					port,
179
+					(e) -> {
173 180
 				Log.e(this.getClass().getSimpleName(), "Error discovering users", e);
174 181
 				CurrentUser.getInstance().setState(CurrentUser.State.INVALID);
175 182
 			});
@@ -181,9 +188,11 @@ public class MainController implements Initializable {
181 188
 	 * If any error happens, disconnect the user from chat and ask for reconnection.
182 189
 	 */
183 190
 	private void startListening() {
184
-		if (userList != null) {
191
+		if (userList != null && online && localEnabled) {
185 192
 			userList.startDiscoveryListening();
186
-			userList.startUserListening((e) -> {
193
+			userList.startUserListening(
194
+					port,
195
+					(e) -> {
187 196
 				Log.e(this.getClass().getSimpleName(), "Error listening to users", e);
188 197
 				CurrentUser.getInstance().setState(CurrentUser.State.INVALID);
189 198
 			});
@@ -268,22 +277,34 @@ public class MainController implements Initializable {
268 277
 	 */
269 278
 	private void initBackend() {
270 279
 		ConfigLoader.load(
271
-				(Config config) -> new DatabaseController().initTables(
272
-						() -> userList.retrievedPreviousUsers(
273
-								() -> currentUser.init(
274
-										() -> initPresenceServer(config),
275
-										this::onInitError),
276
-								this::onInitError
277
-						), this::onInitError));
280
+				(Config config) -> {
281
+					initLocalNetwork(config.getLocalConfig());
282
+					new DatabaseController().initTables(
283
+							() -> userList.retrievedPreviousUsers(
284
+									() -> currentUser.init(
285
+											() -> initPresenceServer(config.getServerConfig()),
286
+											this::onInitError),
287
+									this::onInitError
288
+							), this::onInitError);
289
+				});
290
+	}
291
+
292
+	private void initLocalNetwork(Config.LocalConfig localConfig) {
293
+		port = localConfig.getPort();
294
+		localEnabled = localConfig.isEnabled();
295
+		if (localEnabled) {
296
+			Log.v(getClass().getSimpleName(), "Local network support enabled on port: " + port);
297
+		} else {
298
+			Log.v(getClass().getSimpleName(), "Local network support disabled");
299
+		}
278 300
 	}
279 301
 
280 302
 	/**
281 303
 	 * Initializes the presence server based on user config
282 304
 	 *
283
-	 * @param config The user config
305
+	 * @param serverConfig The server config
284 306
 	 */
285
-	public void initPresenceServer(Config config) {
286
-		final Config.ServerConfig serverConfig = config.getServerConfig();
307
+	private void initPresenceServer(Config.ServerConfig serverConfig) {
287 308
 		if (serverConfig.isEnabled()) {
288 309
 			try {
289 310
 				final PresenceType type = serverConfig.getType();

+ 4
- 2
client/src/main/java/fr/insa/clavardator/client/users/UserList.java View File

@@ -38,11 +38,12 @@ public class UserList {
38 38
 	 *
39 39
 	 * @param errorCallback The function to call on error
40 40
 	 */
41
-	public void discoverActiveUsers(ErrorCallback errorCallback) {
41
+	public void discoverActiveUsers(int port, ErrorCallback errorCallback) {
42 42
 		netDiscoverer.discoverActiveUsers("CLAVARDATOR_BROADCAST", (ipAddr, data) -> {
43 43
 			Log.v(this.getClass().getSimpleName(), "Discovered new user: " + data);
44 44
 			new PeerHandshake().createConnection(
45 45
 					ipAddr,
46
+					port,
46 47
 					this::onUserConnectionSuccess,
47 48
 					errorCallback);
48 49
 		}, errorCallback);
@@ -111,8 +112,9 @@ public class UserList {
111 112
 	 *
112 113
 	 * @param errorCallback Callback on error
113 114
 	 */
114
-	public void startUserListening(ErrorCallback errorCallback) {
115
+	public void startUserListening(int port, ErrorCallback errorCallback) {
115 116
 		tcpListener.acceptConnection(
117
+				port,
116 118
 				(clientSocket) -> {
117 119
 					Log.v(this.getClass().getSimpleName(),
118 120
 							"new connection from user at address: " + clientSocket.getInetAddress().toString());

+ 0
- 12
lib/src/main/java/fr/insa/clavardator/lib/network/TcpConnection.java View File

@@ -13,7 +13,6 @@ import java.net.InetAddress;
13 13
 import java.net.Socket;
14 14
 
15 15
 public class TcpConnection {
16
-	public static final int TCP_PORT = 31598;
17 16
 
18 17
 	private Socket socket;
19 18
 	private ObjectOutputStream outputStream;
@@ -29,17 +28,6 @@ public class TcpConnection {
29 28
 	 * @param callback      The function to call when connected
30 29
 	 * @param errorCallback The function to call on error
31 30
 	 */
32
-	public TcpConnection(InetAddress ipAddr, SocketConnectedCallback callback, ErrorCallback errorCallback) {
33
-		this(ipAddr, TCP_PORT, callback, errorCallback);
34
-	}
35
-
36
-	/**
37
-	 * Creates a new connection, and connects to the peer
38
-	 *
39
-	 * @param ipAddr        The IP address of the peer
40
-	 * @param callback      The function to call when connected
41
-	 * @param errorCallback The function to call on error
42
-	 */
43 31
 	public TcpConnection(InetAddress ipAddr, int port, SocketConnectedCallback callback, ErrorCallback errorCallback) {
44 32
 		this.port = port;
45 33
 		Connector connector = new Connector(ipAddr, callback, errorCallback);

+ 1
- 15
lib/src/main/java/fr/insa/clavardator/lib/network/TcpListener.java View File

@@ -6,27 +6,13 @@ import java.io.IOException;
6 6
 import java.net.ServerSocket;
7 7
 import java.net.Socket;
8 8
 
9
-import static fr.insa.clavardator.lib.network.TcpConnection.TCP_PORT;
10
-
11 9
 public class TcpListener {
12 10
 	Acceptor acceptor = null;
13
-	int port = TCP_PORT;
14 11
 
15 12
 	public TcpListener() {
16 13
 	}
17 14
 
18
-	public TcpListener(int port) {
19
-		this.port = port;
20
-	}
21
-
22
-
23
-	/**
24
-	 * Start accepting incoming connections
25
-	 *
26
-	 * @param callback      The function to call when a user connects
27
-	 * @param errorCallback The function to call on error
28
-	 */
29
-	public void acceptConnection(NewConnectionCallback callback, ErrorCallback errorCallback) {
15
+	public void acceptConnection(int port, NewConnectionCallback callback, ErrorCallback errorCallback) {
30 16
 		if (acceptor != null) {
31 17
 			acceptor.stopAccepting();
32 18
 		}

+ 4
- 2
server/src/main/java/fr/insa/clavardator/server/Presence.java View File

@@ -22,8 +22,10 @@ public class Presence {
22 22
 	private final TcpListener presenceListener;
23 23
 
24 24
 	public Presence() {
25
-		presenceListener = new TcpListener(PRESENCE_PORT);
26
-		presenceListener.acceptConnection(this::subscribe,
25
+		presenceListener = new TcpListener();
26
+		presenceListener.acceptConnection(
27
+				PRESENCE_PORT,
28
+				this::subscribe,
27 29
 				e -> Log.e(getClass().getSimpleName(), "Error while registering a user", e));
28 30
 	}
29 31
 

+ 4
- 2
server/src/main/java/fr/insa/clavardator/server/Proxy.java View File

@@ -17,8 +17,10 @@ public class Proxy {
17 17
 	private final TcpListener proxyListener;
18 18
 
19 19
 	public Proxy() {
20
-		proxyListener = new TcpListener(PROXY_PORT);
21
-		proxyListener.acceptConnection(clientSocket -> {
20
+		proxyListener = new TcpListener();
21
+		proxyListener.acceptConnection(
22
+				PROXY_PORT,
23
+				clientSocket -> {
22 24
 
23 25
 					Log.v(getClass().getSimpleName(), "Accepting a new user");
24 26
 					TcpConnection connection = new TcpConnection(clientSocket);

Loading…
Cancel
Save