X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=cloud%2Finterface%2Fsrc%2Fmain%2Fjava%2Forg%2Fiotivity%2Fcloud%2Fciserver%2Fresources%2FKeepAliveResource.java;h=8e89806bc949148da8c1e6131caac3186ab5cd10;hb=7c1dd4e9bbdb5f0b6c39bec9f51515bd22aa379a;hp=7f0ccc5fe2729cd5b0ebdc4ec9cc310201adf7c8;hpb=eade4560ff85f569db98da502a26ab603592682f;p=platform%2Fupstream%2Fiotivity.git diff --git a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/KeepAliveResource.java b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/KeepAliveResource.java index 7f0ccc5..8e89806 100644 --- a/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/KeepAliveResource.java +++ b/cloud/interface/src/main/java/org/iotivity/cloud/ciserver/resources/KeepAliveResource.java @@ -25,9 +25,8 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.HashMap; -import java.util.Iterator; +import java.util.List; import java.util.Map; -import java.util.Set; import java.util.Timer; import java.util.TimerTask; @@ -50,10 +49,10 @@ import org.iotivity.cloud.util.Cbor; * */ public class KeepAliveResource extends Resource { - private int[] mIntervals = null; - private Timer mTimer = new Timer(); - private Cbor> mCbor = new Cbor<>(); - private HashMap mConnectionPool = new HashMap<>(); + private int[] mIntervals = null; + private Timer mTimer = new Timer(); + private Cbor> mCbor = new Cbor<>(); + private HashMap mConnectionPool = new HashMap<>(); public KeepAliveResource(int[] intervals) { super(Arrays.asList(Constants.PREFIX_OIC, Constants.KEEP_ALIVE_URI)); @@ -68,13 +67,12 @@ public class KeepAliveResource extends Resource { switch (request.getMethod()) { case GET: - response = handleGetPingConfig(request); - mConnectionPool.put(srcDevice, System.currentTimeMillis() - + (mIntervals[0] * (long) 60000)); + response = handlePingConfig(request); break; case PUT: - response = handlePutPingConfig(srcDevice, request); + case POST: + response = handlePingConfig(srcDevice, request); break; default: @@ -85,8 +83,8 @@ public class KeepAliveResource extends Resource { srcDevice.sendResponse(response); } - public void startSessionChecker() { - mTimer.schedule(new KeepAliveTask(), 30000, 60000); + public void startSessionChecker(int startTime, int intervalTime) { + mTimer.schedule(new KeepAliveTask(), startTime, intervalTime); } public void stopSessionChecker() { @@ -99,26 +97,28 @@ public class KeepAliveResource extends Resource { * @param request * ChannelHandlerContext of request message */ - private IResponse handleGetPingConfig(IRequest request) { + private IResponse handlePingConfig(IRequest request) { HashMap payloadData = new HashMap<>(); - payloadData.put("inarray", mIntervals); + payloadData.put(Constants.REQ_PING_ARRAY, mIntervals); return MessageBuilder.createResponse(request, ResponseStatus.CONTENT, ContentFormat.APPLICATION_CBOR, mCbor.encodingPayloadToCbor(payloadData)); } - private IResponse handlePutPingConfig(Device srcDevice, IRequest request) { + private IResponse handlePingConfig(Device srcDevice, IRequest request) { - HashMap payloadData = mCbor + HashMap payloadData = mCbor .parsePayloadFromCbor(request.getPayload(), HashMap.class); - if (payloadData != null) { - if (payloadData.containsKey("in")) { - mConnectionPool.put(srcDevice, System.currentTimeMillis() - + (payloadData.get("in") * (long) 60000)); - } - } + + checkPayloadException(Constants.REQ_PING, payloadData); + + Long pingTime = Integer.valueOf( + payloadData.get(Constants.REQ_PING).toString()) * (long) 60000; + Long connectionTime = System.currentTimeMillis() + pingTime; + mConnectionPool.put(srcDevice, connectionTime); + return MessageBuilder.createResponse(request, ResponseStatus.VALID); } @@ -131,35 +131,23 @@ public class KeepAliveResource extends Resource { public void run() { Map map = Collections .synchronizedMap(mConnectionPool); - Set keySet = map.keySet(); - ArrayList deleteList = new ArrayList<>(); - Iterator iterator = null; + + List deleteList = new ArrayList<>(); + synchronized (map) { - iterator = keySet.iterator(); Long currentTime = System.currentTimeMillis(); - // check interval - while (iterator.hasNext()) { - Device key = iterator.next(); - if (map.containsKey(key)) { - if (map.get(key) != null) { - Long lifeTime = (Long) map.get(key); - if (lifeTime != null) { - if (lifeTime < currentTime) { - deleteList.add(key); - } - } - } + for (Device device : map.keySet()) { + Long lifeTime = (Long) map.get(device); + if (lifeTime != null && lifeTime < currentTime) { + deleteList.add(device); } } - } - iterator = deleteList.iterator(); - // remove session - while (iterator.hasNext()) { - Device key = iterator.next(); - mConnectionPool.remove(key); - key.getCtx().fireChannelInactive(); - key.getCtx().close(); + + for (Device device : deleteList) { + mConnectionPool.remove(device); + device.getCtx().fireChannelInactive(); + device.getCtx().close(); } } }