@Override public void onLoad(CoapResponse response) { if (response.getCode() == ResponseCode.NOT_FOUND) { CoapObserveRelation cor; synchronized (relationStorage) { if (!testdump.get()) { testdump.set(true); System.out.println("Used Memory: " + (Runtime.getRuntime().totalMemory() - Runtime.getRuntime().freeMemory()) / 1024 + "kb (" + relationStorage.size() + " clients)."); } if ((cor = relationStorage.get(new InetSocketAddress(response.advanced().getSource(), response.advanced().getSourcePort()))) != null) { cor.reactiveCancel(); relationStorage.remove(new InetSocketAddress(response.advanced().getSource(), response.advanced().getSourcePort())); cor = null; } if (relationStorage.size() == 0) testdump.set(false); } return; } } @Override public void onError() { }
try { Thread.sleep(6*1000); } catch (InterruptedException e) { } System.out.println("---------------\nCancel Observe"); relation1.reactiveCancel(); try { Thread.sleep(6*1000); } catch (InterruptedException e) { }
if (countDown == 0) { LOGGER.log(Level.FINE, "Client forgets observe relation"); relation.reactiveCancel();
obs1.reactiveCancel(); resource.changed(); Thread.sleep(50);
@Test public void testObserveClient() throws Exception { final AtomicInteger resetCounter = new AtomicInteger(0); server.getEndpoints().get(0).addInterceptor(new ServerMessageInterceptor(resetCounter)); resourceX.setObserveType(Type.NON); int repeat = 3; CoapClient client = new CoapClient(uriX); CountingHandler handler = new CountingHandler(); CoapObserveRelation rel = client.observeAndWait(handler); // onLoad is called asynchronous to returning the response // therefore wait for one onLoad assertTrue(handler.waitForLoadCalls(1, 1000, TimeUnit.MILLISECONDS)); assertFalse("Response not received", rel.isCanceled()); assertNotNull("Response not received", rel.getCurrent()); assertEquals("\"resX says hi for the 1 time\"", rel.getCurrent().getResponseText()); rel.reactiveCancel(); System.out.println(uriX + " reactive canceled"); for (int i = 0; i < repeat; ++i) { resourceX.changed("client"); Thread.sleep(50); } // still only one notification (the response) is received assertFalse(handler.waitForLoadCalls(2, 1000, TimeUnit.MILLISECONDS)); assertEquals(repeat, resetCounter.get()); // repeat RST received // no RST delivered (interceptor) assertEquals(1, resourceX.getObserverCount()); }
obs1.reactiveCancel(); Thread.sleep(100); resource.changed();