@Override public boolean apply(@Nullable CommUser input) { final Optional<Point> pos = user.getPosition(); verify(pos.isPresent()); final Optional<Point> otherPos = verifyNotNull(input).getPosition(); if (otherPos.isPresent()) { return Point.distance(pos.get(), otherPos.get()) <= range; } return false; } }
@Override public boolean register(CommUser commUser) { checkArgument(!contains(commUser), "%s is already registered.", commUser); if (unregisteredUsersDevices.containsKey(commUser)) { // re-register, reuse already created device final CommDevice dev = unregisteredUsersDevices.remove(commUser); dev.register(); addDevice(dev, commUser); } else { final CommDeviceBuilder builder = CommDevice.builder(this, commUser) .setReliability(defaultReliability); commUser.setCommDevice(builder); checkState( builder.isUsed(), "%s is not implemented correctly, a CommDevice must be constructed in" + " setCommDevice()", commUser); } return true; }
void sendMessages() { if (!getMaxRange().isPresent() || user.getPosition().isPresent()) { for (final Message msg : outbox) { model.send(msg, reliability); } clearOutbox(); } }
void update(GC gc, ViewPort vp, long time) { final Optional<com.github.rinde.rinsim.geom.Point> maybe = user.getPosition(); if (!maybe.isPresent()) { return;
@Test public void testBroadcastRangeWithoutMaxRange() { when(COMMUSERS[0].getPosition()).thenReturn(Optional.of(new Point(0, 0))); when(COMMUSERS[1].getPosition()).thenReturn(Optional.of(new Point(5, 0))); when(COMMUSERS[2].getPosition()).thenReturn(Optional.of(new Point(10, 0))); final CommDevice device1 = builders[0].build(); final CommDevice device2 = builders[1].build(); final CommDevice device3 = builders[2].build(); assertEquals(0, device2.getReceivedCount()); assertEquals(0, device3.getReceivedCount()); device1.broadcast(mock(MessageContents.class), 7); device1.sendMessages(); assertEquals(1, device2.getReceivedCount()); assertEquals(0, device3.getReceivedCount()); }