public class XMPPAuction implements Auction { private Chat chat; public static final String JOIN_COMMAND_FORMAT = "SOLVersion: 1.1; Command: JOIN;"; public static final String BID_COMMAND_FORMAT = "SOLVersion: 1.1; Command: BID; Price: %d"; static final String AUCTION_RESOURCE = "Auction"; private static final String ITEM_ID_AS_LOGIN = "******"; private static final String AUCTION_ID_FORMAT = ITEM_ID_AS_LOGIN + "@%s/" + XMPPAuction.AUCTION_RESOURCE; private final Announcer<AuctionEventListener> auctionEventListeners = Announcer.to(AuctionEventListener.class); public XMPPAuction(XMPPConnection connection, String itemId) { AuctionMessageTranslator translator = translatorFor(connection); chat = connection.getChatManager().createChat(auctionId(itemId, connection), translator); addAuctionEventListener(chatDisconnectorFor(translator)); } public static String auctionId(String itemId, XMPPConnection connection) { return String.format(AUCTION_ID_FORMAT, itemId, connection.getServiceName()); } public void bid(int amount) { sendMessage(String.format(BID_COMMAND_FORMAT, amount)); } public void join() { sendMessage(JOIN_COMMAND_FORMAT); } private void sendMessage(String message) { try { chat.sendMessage(message); } catch (XMPPException e) { e.printStackTrace(); } } public void addAuctionEventListener(AuctionEventListener listener) { auctionEventListeners.addListener(listener); } private AuctionMessageTranslator translatorFor(XMPPConnection connection) { // TODO: treaba asta cu announce() care returneaza un AuctionEventListener n-o prea pricep return new AuctionMessageTranslator(connection.getUser(), auctionEventListeners.announce()); } private AuctionEventListener chatDisconnectorFor(final AuctionMessageTranslator translator) { return new AuctionEventListener() { @Override public void auctionClosed() {} @Override public void currentPrice(int price, int increment, PriceSource source) {} @Override public void auctionFailed() { chat.removeMessageListener(translator); } }; } }