Merge pull request #1262 from charithag/master

Geo fencing & notification fixes
revert-70aa11f8
Hasunie 6 years ago committed by GitHub
commit a3f8a10dfd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -49,7 +49,7 @@ public class SubscriptionEndpoint {
* *
* @param session - Users registered session. * @param session - Users registered session.
*/ */
public void onOpen(Session session) { void onOpen(Session session) {
if (log.isDebugEnabled()) { if (log.isDebugEnabled()) {
log.debug("WebSocket opened, for Session id: " + session.getId()); log.debug("WebSocket opened, for Session id: " + session.getId());
} }
@ -68,8 +68,7 @@ public class SubscriptionEndpoint {
endpoint += "/"; endpoint += "/";
} }
endpoint += session.getRequestURI().getSchemeSpecificPart().replace("secured-websocket-proxy",""); endpoint += session.getRequestURI().getSchemeSpecificPart().replace("secured-websocket-proxy","");
AnalyticsClient analyticsClient = new AnalyticsClient(session); AnalyticsClient analyticsClient = new AnalyticsClient(session, new URI(endpoint));
analyticsClient.connectClient(new URI(endpoint));
analyticsClients.add(analyticsClient); analyticsClients.add(analyticsClient);
} catch (URISyntaxException e) { } catch (URISyntaxException e) {
log.error("Unable to create URL from: " + endpoint, e); log.error("Unable to create URL from: " + endpoint, e);
@ -121,7 +120,7 @@ public class SubscriptionEndpoint {
* @param session - Users registered session. * @param session - Users registered session.
* @param message - Status code for web-socket close. * @param message - Status code for web-socket close.
*/ */
public void onMessage(Session session, String message) { void onMessage(Session session, String message) {
for (AnalyticsClient analyticsClient : analyticsClientsMap.get(session.getId())) { for (AnalyticsClient analyticsClient : analyticsClientsMap.get(session.getId())) {
if (analyticsClient != null) { if (analyticsClient != null) {
analyticsClient.sendMessage(message); analyticsClient.sendMessage(message);

@ -42,24 +42,18 @@ public class AnalyticsClient {
private static final Log log = LogFactory.getLog(AnalyticsClient.class); private static final Log log = LogFactory.getLog(AnalyticsClient.class);
private WebSocketContainer container; private final Session analyticsSession;
private Session analyticsSession = null; private final Session clientSession;
private Session clientSession;
/** /**
* Create {@link AnalyticsClient} instance. * Create {@link AnalyticsClient} instance.
*/ */
public AnalyticsClient(Session clientSession) { public AnalyticsClient(Session clientSession, URI endpointURI) throws WSProxyException {
container = ContainerProvider.getWebSocketContainer(); WebSocketContainer container = ContainerProvider.getWebSocketContainer();
this.clientSession = clientSession; this.clientSession = clientSession;
}
/**
* Create web socket client connection using {@link WebSocketContainer}.
*/
public void connectClient(URI endpointURI) throws WSProxyException {
try { try {
analyticsSession = container.connectToServer(this, endpointURI); this.analyticsSession = container.connectToServer(this, endpointURI);
} catch (DeploymentException | IOException e) { } catch (DeploymentException | IOException e) {
String msg = "Error occurred while connecting to remote endpoint " + endpointURI.toString(); String msg = "Error occurred while connecting to remote endpoint " + endpointURI.toString();
log.error(msg, e); log.error(msg, e);
@ -79,7 +73,6 @@ public class AnalyticsClient {
log.debug("Closing web socket session: '" + userSession.getId() + "'. Code: " + log.debug("Closing web socket session: '" + userSession.getId() + "'. Code: " +
reason.getCloseCode().toString() + " Reason: " + reason.getReasonPhrase()); reason.getCloseCode().toString() + " Reason: " + reason.getReasonPhrase());
} }
this.analyticsSession = null;
} }
/** /**
@ -91,7 +84,16 @@ public class AnalyticsClient {
*/ */
@OnMessage @OnMessage
public void onMessage(String message) { public void onMessage(String message) {
this.clientSession.getAsyncRemote().sendText(message); synchronized (this.clientSession) {
try {
this.clientSession.getBasicRemote().sendText(message);
} catch (IOException e) {
log.warn("Sending message to client failed due to " + e.getMessage());
if (log.isDebugEnabled()) {
log.debug("Full stack trace:", e);
}
}
}
} }
/** /**
@ -100,14 +102,23 @@ public class AnalyticsClient {
* @param message the message which is going to send. * @param message the message which is going to send.
*/ */
public void sendMessage(String message) { public void sendMessage(String message) {
this.analyticsSession.getAsyncRemote().sendText(message); synchronized (this.analyticsSession) {
try {
this.analyticsSession.getBasicRemote().sendText(message);
} catch (IOException e) {
log.warn("Sending message to analytics failed due to " + e.getMessage());
if (log.isDebugEnabled()) {
log.debug("Full stack trace:", e);
}
}
}
} }
/** /**
* Close current connection. * Close current connection.
*/ */
public void closeConnection(CloseReason closeReason) throws WSProxyException { public void closeConnection(CloseReason closeReason) throws WSProxyException {
if (this.analyticsSession != null) { if (this.analyticsSession.isOpen()) {
try { try {
this.analyticsSession.close(closeReason); this.analyticsSession.close(closeReason);
} catch (IOException e) { } catch (IOException e) {
@ -115,6 +126,8 @@ public class AnalyticsClient {
log.error(msg, e); log.error(msg, e);
throw new WSProxyException(msg, e); throw new WSProxyException(msg, e);
} }
} else {
log.warn("Analytics session '" + this.analyticsSession.getId() + "' is already closed");
} }
} }
} }

@ -251,7 +251,7 @@ public class OperationManagerImpl implements OperationManager {
} }
OperationManagementDAOFactory.commitTransaction(); OperationManagementDAOFactory.commitTransaction();
if (isScheduled) { if (!isScheduled) {
for (Device device : authorizedDevices) { for (Device device : authorizedDevices) {
this.sendNotification(operation, device); this.sendNotification(operation, device);
} }

@ -91,7 +91,7 @@ function initializeGeoLocation(geoFencingEnabled) {
InitSpatialObject(geoFencingEnabled); InitSpatialObject(geoFencingEnabled);
} else { } else {
noty({text: 'Invalid Access! No device information provided to track!', type: 'error'}); noty({text: 'Invalid Access! No device information provided to track!', type: 'error', timeout: 10000});
} }
} }
@ -493,7 +493,7 @@ GeoAreaObject.prototype.update = function (geoJSON) {
}; };
function notifyAlert(message) { function notifyAlert(message) {
noty({text: "Alert: " + message, type: 'warning'}); noty({text: "Alert: " + message, type: 'warning', timeout: 10000});
} }
function Alert(type, message, level) { function Alert(type, message, level) {
@ -505,7 +505,7 @@ function Alert(type, message, level) {
this.level = 'information'; this.level = 'information';
this.notify = function () { this.notify = function () {
noty({text: this.type + ' ' + this.message, type: level}); noty({text: this.type + ' ' + this.message, type: level, timeout: 10000});
} }
} }
@ -575,7 +575,7 @@ var webSocketOnAlertError = function (e) {
wsURL = wsURL.replace("wss://","https://"); wsURL = wsURL.replace("wss://","https://");
var uriParts = wsURL.split("/"); var uriParts = wsURL.split("/");
wsURL = uriParts[0] + "//" + uriParts[2]; wsURL = uriParts[0] + "//" + uriParts[2];
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error'}); noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error', timeout: 10000});
}; };
var webSocketSpatialOnOpen = function () { var webSocketSpatialOnOpen = function () {
@ -606,7 +606,7 @@ var webSocketSpatialOnError = function (err) {
wsURL = wsURL.replace("wss://","https://"); wsURL = wsURL.replace("wss://","https://");
var uriParts = wsURL.split("/"); var uriParts = wsURL.split("/");
wsURL = uriParts[0] + "//" + uriParts[2]; wsURL = uriParts[0] + "//" + uriParts[2];
noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error'}); noty({text: 'Something went wrong when trying to connect to <b>' + wsURL + '<b/>', type: 'error', timeout: 10000});
}; };

Loading…
Cancel
Save