package com.voxeo.moho.sample; import java.net.URI; import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import com.voxeo.moho.Application; import com.voxeo.moho.ApplicationContext; import com.voxeo.moho.Endpoint; import com.voxeo.moho.State; import com.voxeo.moho.TextableEndpoint; import com.voxeo.moho.event.RegisterEvent; import com.voxeo.moho.event.TextEvent; import com.voxeo.moho.event.RegisterEvent.Contact; public class Echo implements Application { private Map<URI, Endpoint> addresses = new ConcurrentHashMap<URI, Endpoint>(); public void destroy() { } public void init(final ApplicationContext ctx) { } @State public void handleRegister(final RegisterEvent evt) { Contact contact = evt.getContacts()[0]; if (contact.getExpiration() > 0) { addresses.put(evt.getEndpoint().getURI(), contact.getEndpoint()); } else { addresses.remove(evt.getEndpoint().getURI()); } evt.accept(); } @State public void handleText(final TextEvent evt) throws Throwable { ((TextableEndpoint) addresses.get(evt.getFrom().getURI())).sendText(evt.getTo(), evt.getText(), evt.getTextType()); } }