Update presence server interface to match new API.
We now use a different port for the presence server and the proxy, each set in the config file
This commit is contained in:
parent
20e341c190
commit
2929211c85
6 changed files with 77 additions and 29 deletions
|
@ -2,6 +2,10 @@
|
|||
"serveur": {
|
||||
"actif": 1,
|
||||
"uri": "test",
|
||||
"type": "INSA"
|
||||
"type": "INSA",
|
||||
"ports": {
|
||||
"presence": 123456789,
|
||||
"proxy": 987654321
|
||||
}
|
||||
}
|
||||
}
|
|
@ -25,7 +25,6 @@ public class Config {
|
|||
return serverConfig;
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("FieldCanBeLocal")
|
||||
public static class ServerConfig {
|
||||
|
||||
|
@ -34,10 +33,15 @@ public class Config {
|
|||
private boolean enabled;
|
||||
private String uri;
|
||||
private PresenceType type;
|
||||
private int presencePort;
|
||||
private int proxyPort;
|
||||
|
||||
private final String ENABLED_KEY = "actif";
|
||||
private final String URI_KEY = "uri";
|
||||
private final String TYPE_KEY = "type";
|
||||
private final String PORTS_KEY = "ports";
|
||||
private final String PORT_PRESENCE_KEY = "presence";
|
||||
private final String PORT_PROXY_KEY = "proxy";
|
||||
|
||||
/**
|
||||
* Basic constructor setting the default server configuration
|
||||
|
@ -63,6 +67,7 @@ public class Config {
|
|||
enabled = false;
|
||||
} else {
|
||||
readServerType();
|
||||
readServerPorts();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -103,6 +108,17 @@ public class Config {
|
|||
}
|
||||
}
|
||||
|
||||
private void readServerPorts() {
|
||||
try {
|
||||
JSONObject portsObj = obj.getJSONObject(PORTS_KEY);
|
||||
presencePort = portsObj.getInt(PORT_PRESENCE_KEY);
|
||||
proxyPort = portsObj.getInt(PORT_PROXY_KEY);
|
||||
} catch (JSONException e) {
|
||||
presencePort = 30000; // TODO set default ports
|
||||
proxyPort = 300001;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Checks if the presence server is enabled.
|
||||
* If this returns false, all other data returned by this object can be ignored.
|
||||
|
@ -120,5 +136,13 @@ public class Config {
|
|||
public PresenceType getType() {
|
||||
return type;
|
||||
}
|
||||
|
||||
public int getPresencePort() {
|
||||
return presencePort;
|
||||
}
|
||||
|
||||
public int getProxyPort() {
|
||||
return proxyPort;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,14 +1,35 @@
|
|||
package fr.insa.clavardator.server;
|
||||
|
||||
import fr.insa.clavardator.network.PeerConnection;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
/**
|
||||
* Handles connection to the default INSA Clavardator presence server.
|
||||
* <br/>
|
||||
* This server does not uses HTTP, everything is done using sockets.
|
||||
* The presence server and the proxy each live on a different port.
|
||||
* <br/>
|
||||
* The client needs to initiate a TCP connection on each port.
|
||||
* <br/>
|
||||
* On the presence server port, the client will be able to send presence messages
|
||||
* such as subscribe, unsubscribe, publish, and receive notifications.
|
||||
* <br/>
|
||||
* On the proxy port, the client will be able to send regular
|
||||
* {@link fr.insa.clavardator.chat.Message messages} like on the local network.
|
||||
* The proxy will forward the message to the appropriate recipient using the provided id.
|
||||
*/
|
||||
public class InsaPresence implements Presence {
|
||||
|
||||
private final String path;
|
||||
private final int presencePort;
|
||||
private final int proxyPort;
|
||||
|
||||
public InsaPresence(String path) {
|
||||
public InsaPresence(String path, int presencePort, int proxyPort) {
|
||||
this.path = path;
|
||||
this.presencePort = presencePort;
|
||||
this.proxyPort = proxyPort;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -16,23 +37,18 @@ public class InsaPresence implements Presence {
|
|||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void unsubscribe() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void publish(boolean connected) {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void acceptNotifications() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void stopNotifications() {
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public InetAddress getInetAddress() {
|
||||
public PeerConnection getProxyConnection() {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,5 +1,7 @@
|
|||
package fr.insa.clavardator.server;
|
||||
|
||||
import fr.insa.clavardator.network.PeerConnection;
|
||||
|
||||
import java.net.InetAddress;
|
||||
import java.util.ArrayList;
|
||||
|
||||
|
@ -13,6 +15,12 @@ public interface Presence {
|
|||
*/
|
||||
ArrayList<String> subscribe();
|
||||
|
||||
/**
|
||||
* Stops subscription to the presence server.
|
||||
* This will stop notifications.
|
||||
*/
|
||||
void unsubscribe();
|
||||
|
||||
/**
|
||||
* Updates the current user state on the server.
|
||||
* This function must be called on app exit,
|
||||
|
@ -22,20 +30,14 @@ public interface Presence {
|
|||
*/
|
||||
void publish(boolean connected);
|
||||
|
||||
/**
|
||||
* Starts listening to presence server update notifications.
|
||||
*/
|
||||
void acceptNotifications();
|
||||
|
||||
/**
|
||||
* Stops listening to presence server update notifications.
|
||||
*/
|
||||
void stopNotifications();
|
||||
|
||||
/**
|
||||
* Gets the presence server InetAddress
|
||||
* Gets a connection to the proxy.
|
||||
* This can be used to initialize a
|
||||
* {@link fr.insa.clavardator.users.PeerUser Peeruser}
|
||||
* and send messages like on a local network.
|
||||
*
|
||||
* @return The server address
|
||||
*/
|
||||
InetAddress getInetAddress();
|
||||
PeerConnection getProxyConnection();
|
||||
}
|
||||
|
|
|
@ -1,10 +1,10 @@
|
|||
package fr.insa.clavardator.server;
|
||||
|
||||
public class PresenceFactory {
|
||||
public static Presence create(PresenceType type, String uri) throws UnknownPresenceException {
|
||||
public static Presence create(PresenceType type, String uri, int serverPort, int proxyPort) throws UnknownPresenceException {
|
||||
switch (type) {
|
||||
case INSA:
|
||||
return new InsaPresence(uri);
|
||||
return new InsaPresence(uri, serverPort, proxyPort);
|
||||
default:
|
||||
throw new UnknownPresenceException();
|
||||
}
|
||||
|
|
|
@ -270,8 +270,10 @@ public class MainController implements Initializable {
|
|||
try {
|
||||
final PresenceType type = serverConfig.getType();
|
||||
final String uri = serverConfig.getUri();
|
||||
presenceServer = PresenceFactory.create(type, uri);
|
||||
Log.v("INIT", "Presence server support enabled: " + type + " @ " + uri);
|
||||
final int presencePort = serverConfig.getPresencePort();
|
||||
final int proxyPort = serverConfig.getProxyPort();
|
||||
presenceServer = PresenceFactory.create(type, uri, presencePort, proxyPort);
|
||||
Log.v("INIT", "Presence server support enabled: " + type + "@" + uri + ':' + presencePort + " / proxy:" + proxyPort);
|
||||
} catch (UnknownPresenceException e) {
|
||||
Log.e("INIT", "Presence server type not found", e);
|
||||
presenceServer = null;
|
||||
|
|
Loading…
Reference in a new issue