package org.kalipo.web.websocket; import com.fasterxml.jackson.databind.ObjectMapper; import org.atmosphere.config.service.Disconnect; import org.atmosphere.config.service.ManagedService; import org.atmosphere.config.service.Message; import org.atmosphere.cpr.AtmosphereRequest; import org.atmosphere.cpr.AtmosphereResource; import org.atmosphere.cpr.AtmosphereResourceEvent; import org.atmosphere.cpr.BroadcasterFactory; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.kalipo.web.websocket.dto.ActivityDTO; import org.kalipo.web.websocket.dto.ActivityDTOJacksonDecoder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import javax.inject.Inject; import java.io.IOException; import java.util.Calendar; @ManagedService( path = "/websocket/activity") public class ActivityService { private static final Logger log = LoggerFactory.getLogger(ActivityService.class); @Inject private BroadcasterFactory broadcasterFactory; private DateTimeFormatter dateTimeFormatter = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss"); private ObjectMapper jsonMapper = new ObjectMapper(); @Disconnect public void onDisconnect(AtmosphereResourceEvent event) throws IOException { log.debug("Browser {} disconnected", event.getResource().uuid()); ActivityDTO activityDTO = new ActivityDTO(); activityDTO.setUuid(event.getResource().uuid()); activityDTO.setPage("logout"); String json = jsonMapper.writeValueAsString(activityDTO); // broadcasterFactory.lookup("/websocket/tracker", true).broadcast(json); } @Message(decoders = {ActivityDTOJacksonDecoder.class}) public void onMessage(AtmosphereResource atmosphereResource, ActivityDTO activityDTO) throws IOException { AtmosphereRequest request = atmosphereResource.getRequest(); activityDTO.setUuid(atmosphereResource.uuid()); activityDTO.setIpAddress(request.getRemoteAddr()); activityDTO.setTime(dateTimeFormatter.print(Calendar.getInstance().getTimeInMillis())); String json = jsonMapper.writeValueAsString(activityDTO); log.debug("Sending user tracking data {}", json); // broadcasterFactory.lookup("/websocket/tracker", true).broadcast(json); } }