package org.kevoree.library.com.skype; import com.skype.ChatMessage; import org.kevoree.annotation.*; import org.kevoree.framework.AbstractComponentType; import com.skype.Chat; import com.skype.ChatMessageListener; import com.skype.Skype; import com.skype.SkypeException; import java.util.logging.Level; import java.util.logging.Logger; import org.kevoree.framework.MessagePort; /** * This Kevoree component encapsulates Skype. It allows sending (chat and SMS) messages * using the Skype account currently running on the local host. It also receives the (chat) messages * sent to this account and forward them. * @author Olivier Barais and Brice Morin * @copyright INRIA and SINTEF IKT */ @Provides({ @ProvidedPort(name = "sendSMS", type = PortType.MESSAGE), @ProvidedPort(name = "sendChatMessage", type = PortType.MESSAGE) }) @Requires({ @RequiredPort(name = "forwardIncomingChatMessage", type = PortType.MESSAGE) }) @DictionaryType({ @DictionaryAttribute(name = "tel")}) @Library(name = "Kevoree::Chat") @ComponentType public class SkypeComponent extends AbstractComponentType { private SkypeChatListener chatListener; public SkypeComponent(){ try { chatListener = new SkypeChatListener(this); Skype.addChatMessageListener(chatListener); } catch (SkypeException ex) { Logger.getLogger(SkypeComponent.class.getName()).log(Level.SEVERE, null, ex); } } @Start public void start() { tel = (String) this.getDictionary().get("tel").toString(); } @Stop public void stop() { Skype.removeChatMessageListener(chatListener); } @Update public void update() { tel = (String) this.getDictionary().get("tel").toString(); } String tel; @Port(name = "sendSMS") public void sendSMS(Object message) { try { Skype.sendSMS(tel, message.toString()); } catch (SkypeException e) { Logger.getLogger(SkypeComponent.class.getName()).log(Level.SEVERE, "Error while sendind SMS. Please verify that Skype is running on the computer.", e); } } @Port(name = "sendChatMessage") public void sendChatMessage(Object message) { try { Chat c = Skype.chat(tel); if (c != null) { c.send(message.toString()); } } catch (SkypeException e) { Logger.getLogger(SkypeComponent.class.getName()).log(Level.SEVERE, "Error while sendind chat message. Please verify that Skype is running on the computer.", e); } } private void forward(String msg) { if (this.isPortBinded("forwardIncomingChatMessage")) { this.getPortByName("forwardIncomingChatMessage", MessagePort.class).process(msg); } } private class SkypeChatListener implements ChatMessageListener { SkypeComponent skype; public SkypeChatListener(SkypeComponent skype) { this.skype = skype; } @Override public void chatMessageReceived(ChatMessage cm) throws SkypeException { Logger.getLogger(SkypeChatListener.class.getName()).log(Level.INFO, "SkypeChatListener has received: "+cm.getContent()+" from "+cm.getSenderDisplayName()); skype.forward(cm.getContent()); } @Override public void chatMessageSent(ChatMessage cm) throws SkypeException { //throw new UnsupportedOperationException("Not supported yet."); } } }