package MyBot; import java.text.SimpleDateFormat; import java.util.Date; import java.net.*; import java.io.*; import net.sf.jml.Email; import net.sf.jml.MsnContact; import net.sf.jml.MsnList; import net.sf.jml.MsnMessenger; import net.sf.jml.MsnProtocol; import net.sf.jml.MsnSwitchboard; import net.sf.jml.MsnUserStatus; import net.sf.jml.event.MsnAdapter; import net.sf.jml.impl.MsnContactImpl; import net.sf.jml.impl.MsnMessengerFactory; import net.sf.jml.message.MsnControlMessage; import net.sf.jml.message.MsnDatacastMessage; import net.sf.jml.message.MsnInstantMessage; import net.sf.jml.message.MsnSystemMessage; import net.sf.jml.message.MsnUnknownMessage; import net.sf.jml.protocol.MsnOutgoingMessage; /** * @author tanghf * @version 1.3 * @since 2011/5/10 **/ public class ChatBot extends MsnAdapter { private String email; private String password; private MsnMessenger messenger=null; private int timeout=1000; public static final int PORT = 8088; SimpleDateFormat sdf = new SimpleDateFormat( " MM-dd HH:mm " ); PrintWriter out; public ChatBot() throws IOException{ } public static void main(String [] args) throws java.lang.ClassNotFoundException, java.lang.InstantiationException, java.lang.IllegalAccessException { String email,password; ChatBot chatbot=(ChatBot) Class.forName( "MyBot.ChatBot" ).newInstance(); if(args.length==2){ email = args[0]; password = args[1]; }else{ email = "ask_answer2011@hotmail.com"; password = "chatbot"; } chatbot.set(email,password); chatbot.start(); } public void start() { messenger = MsnMessengerFactory.createMsnMessenger(email, password); messenger.setSupportedProtocol(new MsnProtocol[]{MsnProtocol.MSNP12}); messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE); messenger.addListener( this ); messenger.login(); } public void loginCompleted(MsnMessenger messenger){ System.out.println(messenger+sdf.format(new Date())+" login complete" ); messenger.getOwner().setDisplayName("I am bot"); String content= messenger+" login complete"; String fileName="login.log"; try{ writeFile(fileName,content); }catch (Exception e){ e.printStackTrace(); System.out.println(content+"cannot be write to"+fileName); } } public void instantMessageReceived(MsnSwitchboard switchboard, MsnInstantMessage message, MsnContact contact) { System.out.println("message received"); //String tobox=sdf.format( new Date())+"#"+contact.getEmail().getEmailAddress()+"#"+message.getContent(); String XMLstring; XMLstring = XMLDisposal.XmlBuild("TVs", sdf.format(new Date()).toString(), contact.getEmail().getEmailAddress().toString(), message.getContent().toString()); String emailstring=XMLDisposal.GetUser(XMLstring); Email con=Email.parseStr(emailstring); messenger.sendText(con, "I have login"); Socket socket=null; try{ socket=new Socket("localhost",PORT); System.out.println("socket:"+socket); DataInputStream in = new DataInputStream(socket.getInputStream()); DataOutputStream out = new DataOutputStream(socket.getOutputStream()); socket.setSoTimeout(timeout); //BufferedReader in=new BufferedReader(new InputStreamReader( //socket.getInputStream())); //PrintWriter out=new PrintWriter(new BufferedWriter( //new OutputStreamWriter(socket.getOutputStream())),true); //out.println(tobox); //String touser=in.readLine(); out.writeUTF(XMLstring); String touser; try{ touser = in.readUTF(); }catch (Exception e){ System.out.println(e); touser = "problem occurs, please resend latter"; } System.out.println(touser); message.setContent(touser); switchboard.sendMessage(message); }catch(Exception e){ System.out.println("Exception"+e); System.out.println("database cannot be connect,check it!"); String err = "problem occurs, please resend latter"; message.setContent(err); switchboard.sendMessage(message); }finally{ try{ socket.close(); }catch(Exception e){ System.out.println("Exception"+e); } } } public void set(String email, String password){ this.email=email; this.password=password; } public void systemMessageReceived(MsnMessenger messenger,MsnSystemMessage message){ } public void controlMessageReceived(MsnSwitchboard switchboard,MsnControlMessage message, MsnContact contact){ switchboard.sendMessage(message,false); } public void datacastMessageReceived(MsnSwitchboard switchboard,MsnDatacastMessage message, MsnContact friend){ switchboard.sendMessage(message,false); } public void unknownMessageReceived(MsnSwitchboard switchboard,MsnUnknownMessage message, MsnContact friend){ } public void contactListInitCompleted(MsnMessenger messenger){ MsnContact [] mycontact = messenger.getContactList().getContactsInList(MsnList.AL); String fileName="login.log"; String content = "I have "+ mycontact.length+ "contacts"; ListContact(messenger); try{ writeFile(fileName,content); }catch (Exception e){ e.printStackTrace(); System.out.println(content+"cannot be write to"+fileName); } } public void ListContact(MsnMessenger messenger){ MsnContact [] mycontact = messenger.getContactList().getContactsInList(MsnList.AL); for(int i=0;i