class PartyInfoBroadcaster implements Runnable {

    @Override
    public void run() {
        LOGGER.info("Started PartyInfo polling round");

        partyStore.loadFromConfigIfEmpty();

        final NodeInfo nodeInfo = discovery.getCurrent();

        final NodeUri ourUrl = NodeUri.create(nodeInfo.getUrl());

        final PartyInfo partyInfo =
            PartyInfoBuilder.create()
                .withUri(nodeInfo.getUrl())
                .withRecipients(nodeInfo.getRecipientsAsMap())
                .build();

        final byte[] encodedPartyInfo = partyInfoParser.to(partyInfo);

        LOGGER.debug("Contacting following peers with PartyInfo: {}", partyInfo.getParties());

        LOGGER.debug("Sending party info {}", nodeInfo);
        partyStore.getParties().stream()
            .map(NodeUri::create)
            .filter(url -> !ourUrl.equals(url))
            .forEach(url -> pollSingleParty(url.asString(), encodedPartyInfo));

        LOGGER.info("Finished PartyInfo polling round");
    }

    public  PartyInfoBroadcaster(final P2pClient p2pClient);
    public  PartyInfoBroadcaster(
        final Discovery discovery,
        final PartyInfoParser partyInfoParser,
        final P2pClient p2pClient,
        final Executor executor,
        final PartyStore partyStore);

}