private synchronized void handler(final IMessageHandler h) { onDispose.add( new Runnable() { @Override public void run() { mc.removeMessageHandler(h); } }); mc.addMessageHandler(h); }
public synchronized void dispose() { try { if (mc != null) { sendStatus(mc.getChannel(), "unavailable", "Shutdown"); for (Runnable r : onDispose) { r.run(); } } mc = null; } catch (Exception e) { e.printStackTrace(); } }
private void sendStatus(String user, String status, String error) { try { JSONObject msg = new JSONObject(); msg.put("username", user); msg.put("service", serviceTypeId); msg.put("status", status); if (error != null) { msg.put("error", error); } mc.send(SERVICE_STATUS_CHANGE, msg); } catch (Exception e) { e.printStackTrace(); } }
public ServiceDiscoveryConnector( IMessagingConnector messagingConnector, String serviceTypeId, boolean keepAlive) { this.mc = messagingConnector; this.serviceTypeId = serviceTypeId; this.mc.addChannelListener(channelListener); String userChannel = mc.getChannel(); if (userChannel != null) { sendStatus(userChannel, "ready"); } handler( new AbstractMessageHandler(DISCOVER_SERVICE_REQUEST) { @Override public void handleMessage(String messageType, JSONObject message) { String user = mc.getChannel(); try { if (forMe(message) && (message.get("username").equals(user) || Constants.SUPER_USER.equals(user))) { JSONObject response = new JSONObject(message, COPY_PROPS); response.put( "status", message.get("username").equals(user) ? "ready" : "available"); mc.send(DISCOVER_SERVICE_RESPONSE, response); } } catch (Exception e) { throw new Error(e); } } }); this.mc.addMessageHandler( new AbstractMessageHandler(START_SERVICE_REQUEST) { @Override public void handleMessage(String messageType, JSONObject message) { mc.removeMessageHandler(this); try { String user = message.getString("username"); JSONObject serviceStartedMessage = new JSONObject(message, COPY_PROPS); mc.send(START_SERVICE_RESPONSE, serviceStartedMessage); sendStatus(user, "starting"); mc.connectChannel(user); } catch (JSONException e) { e.printStackTrace(); } } }); }
@Override public void disconnected(String userChannel) { if (mc != null && mc.isConnected()) { sendStatus(userChannel, "unavailable", "Disconnected"); } }