rendered paste body/*
* Copyright 2004-2005 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package jwm.msn;
import java.io.UnsupportedEncodingException;
import java.util.*;
import jwm.*;
import jwm.vo.*;
import net.sf.jml.*;
import net.sf.jml.event.*;
import net.sf.jml.message.*;
/**
* @author Roy Tsang
*
*/
public class MyListener extends MsnAdapter
{
private ImEvent eventListener;
@SuppressWarnings("unused")
private String jwmVersion=Utility.getSystemParameterString("jwm.version");
private MsnClient msnClient;
private ImEventVO imEventVO;
private boolean isPrintLog=Utility.getSystemParameterBoolean("jwm.printJWMDebugLog");
/**
* Event listener contructor
* @param ie Im Event Listener
*/
public MyListener(ImEvent ie)
{
super();
try{
System.setOut(new java.io.PrintStream(System.out,true,"Big5"));
this.eventListener=ie;
}catch (Exception er) {
er.printStackTrace();
}
}
/**
* set Msn Client
* @param m msnClient
*/
public void setMsnClient(MsnClient m)
{
this.msnClient=m;
}
/**
* A contact you requested to be added has been added to the server.
* @param messenger msn messenger
* @param contact msn contact
*/
public void contactAddCompleted(MsnMessenger messenger, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" contact added completed:"+contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTADDCOMPLETED);
Vector eventDetail=new Vector();
eventDetail.add(messenger);
eventDetail.add(contact);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
this.msnClient.initContactList();
}
/**
* Some one add current login user to his contact list.
* @param messenger msn messenger
* @param contact msn contact
*/
public void contactAddedMe(MsnMessenger messenger, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" contact added me:"+contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTADDEDME);
Vector eventDetail=new Vector();
eventDetail.add(messenger);
eventDetail.add(contact);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* A contact join switchboard.
* @param switchboard Msn Switchboard
* @param contact msn contact
*/
public void contactJoinSwitchboard(MsnSwitchboard switchboard, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" contact join switchboard:"+contact);
if (switchboard.getAttachment() instanceof Vector)
{
Vector attachment=(Vector) switchboard.getAttachment();
switch (attachment.size())
{
case 2:
MsnDatacastMessage nudgeMessage=new MsnDatacastMessage();
nudgeMessage.setId(1);
switchboard.sendMessage(nudgeMessage);
break;
case 3:
MsnControlMessage typingMessage = new MsnControlMessage();
typingMessage.setTypingUser(switchboard.getMessenger().getOwner().getDisplayName());
switchboard.sendMessage(typingMessage);
MsnInstantMessage message =(MsnInstantMessage) attachment.elementAt(2);
switchboard.sendMessage(message);
break;
}
this.msnClient.addSwitchBoard(contact.getId(), switchboard);
}
}
/**
* A contact leave switchboard.
* @param switchboard Msn Switchboard
* @param contact msn contact
*/
public void contactLeaveSwitchboard(MsnSwitchboard switchboard, MsnContact contact)
{
if (isPrintLog)
{
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" contact leave switchboard:"+contact.toString());
}
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTLEAVESWITCHBOARD);
Vector eventDetail=new Vector();
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Contact list init completed.
* @param messenger Msn Messenger
*
*/
public void contactListInitCompleted(MsnMessenger messenger)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" contact list init completed.");
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTLISTINITCOMPLETED);
Vector eventDetail=new Vector();
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
this.msnClient.initContactList();
}
/**
* Contact list synchronize completed. (non-Javadoc)
* @see net.sf.jml.event.MsnAdapter#contactListSyncCompleted(net.sf.jml.MsnMessenger)
*/
public void contactListSyncCompleted(MsnMessenger messenger)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" contact list sync completed.");
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTLISTSYNCCOMPLETED);
Vector eventDetail=new Vector();
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* A contact you requested to be removed has been removed from the server.
* @param messenger msn messenger
* @param contact msn contact
*/
public void contactRemoveCompleted(MsnMessenger messenger, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" remove contact "+contact+" completed.");
Vector eventDetail=new Vector();
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTREMOVECOMPLETED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Some one remove current login user from his contact list.
* @param messenger msn messenger
* @param contact msn contact
*/
public void contactRemovedMe(MsnMessenger messenger, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+contact+" remove me ("+messenger.getOwner().getDisplayName()+") completed.");
Vector eventDetail=new Vector();
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTREMOVEDME);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Contact status changed such as online and offline or friend changed his display name.
* @param messenger msn messenger
* @param contact msn contact
*/
public void contactStatusChanged(MsnMessenger messenger, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" friend:"+contact+" status changed.");
Vector eventDetail=new Vector();
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTACTSTATUSCHANGED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
if (this.msnClient.getBuddy(contact.getId())==null)
{
this.msnClient.initContactList();
}
}
/**
* Received control message, such as typing text or recording voice clip.
* @param message Msn Control Message
* @param contact msn contact
* @param switchboard Msn Switchboard
*/
public void controlMessageReceived(MsnSwitchboard switchboard, MsnControlMessage message, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" control message recevied:"+contact+",message:"+message);
Vector eventDetail=new Vector();
eventDetail.add(message);
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.CONTROLMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Received datacast message.
* @param switchboard Msn Switchboard
* @param message Msn Data Cast Message
* @param contact msn contact
*/
public void datacastMessageReceived(MsnSwitchboard switchboard, MsnDatacastMessage message, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" datacast message received:"+contact+",message:"+message);
Vector eventDetail=new Vector();
eventDetail.add(message);
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.DATACASTMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Caught exception.
* @param messenger Msn Messenger
* @param throwable Throwable
*/
public void exceptionCaught(MsnMessenger messenger, Throwable throwable)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" exception catch:"+messenger.getOwner().getDisplayName());
throwable.printStackTrace();
Vector eventDetail=new Vector();
if (throwable!=null)
{
eventDetail.add(throwable);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.EXCEPTIONCAUGHT);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
}
/**
* A group you requested to be added has been added to the server.
* @param messenger Msn Messenger
* @param group Msn Group
*/
public void groupAddCompleted(MsnMessenger messenger, MsnGroup group)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" added group completed.");
Vector eventDetail=new Vector();
eventDetail.add(group);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.GROUPADDCOMPLETED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* A group you requested to be removed has been removed from the server.
* @param messenger Msn Messenger
* @param group Msn Group
*/
public void groupRemoveCompleted(MsnMessenger messenger, MsnGroup group)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" removed group completed.");
Vector eventDetail=new Vector();
eventDetail.add(group);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.GROUPREMOVECOMPLETED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Received text message.
* @param switchboard Msn Switchboard
* @param message Msn Instant Message
* @param contact Msn Contact
*/
public void instantMessageReceived(MsnSwitchboard switchboard, MsnInstantMessage message, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" friend"+contact+" send an message "+message+" to "+switchboard.getMessenger());
if (this.msnClient.getBuddy(contact.getId())!=null)
{
Vector eventDetail=new Vector();
eventDetail.add(message);
eventDetail.add(contact);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.INSTANTMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
}
/*
* (non-Javadoc)
* @see net.sf.jml.event.MsnAdapter#offlineMessageReceived(java.lang.String, java.lang.String, java.lang.String, net.sf.jml.MsnContact)
*/
public void offlineMessageReceived(String body,
String contentType,
String encoding,
MsnContact contact,
String receivedDate)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" retreiving offline message "+body+" that sent from contact"+contact);
Vector eventDetail=new Vector();
try {
eventDetail.add(new String(body.getBytes(encoding),"utf-8"));
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
eventDetail.add(contact);
eventDetail.add(receivedDate);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.OFFLINEMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Login completed.
* @param messenger Msn Messenger
*/
public void loginCompleted(MsnMessenger messenger)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" login completed");
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.LOGINCOMPLETED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Logout.
* @param messenger Msn Messenger
*/
public void logout(MsnMessenger messenger)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" logout completed");
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.LOGOUT);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Owner status changed or name changed or profile changed.
* @param messenger Msn Messenger
*/
public void ownerStatusChanged(MsnMessenger messenger)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" status changed");
Vector eventDetail=new Vector();
eventDetail.add(messenger);
imEventVO=new ImEventVO();
imEventVO.setEventType(MsnEvent.OWNERSTATUSCHANGED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Switchboard closed.
* @param switchboard Msn Switchboard
*/
public void switchboardClosed(MsnSwitchboard switchboard)
{
if (switchboard.getAttachment() instanceof Vector)
{
Vector attachment=(Vector)switchboard.getAttachment();
if (isPrintLog)
{ String temp=new String();
if (switchboard!=null)
temp=switchboard.toString();
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" switchboard closed."+temp);
}
if ((attachment!=null) && (attachment.size()==2))
{
MsnContact contact=(MsnContact) attachment.elementAt(0);
String id=contact.getId();
this.msnClient.removeSwitchBoard(id);
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
eventDetail.add("switchboard closed,id="+id);
imEventVO.setEventType(MsnEvent.SWITCHBOARDCLOSED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
}
}
/**
* Switchboard started.
* @param switchBoard Msn Switchboard
*/
public void switchboardStarted(MsnSwitchboard switchBoard)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" switchboard started"+switchBoard);
if (switchBoard.getAttachment() instanceof Vector)
{
Vector attachment=(Vector) switchBoard.getAttachment();
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
if (attachment!=null)
{
switch (attachment.size())
{
case 2:
case 3:
MsnContact contact=(MsnContact) attachment.elementAt(1);
switchBoard.inviteContact(contact.getEmail());
eventDetail.add(contact);
break;
}
}
imEventVO.setEventType(MsnEvent.SWITCHBOARDSTARTED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
}
/**
* Received system message.
* @param messenger Msn Messenger
* @param message Msn SystemMessage
*/
public void systemMessageReceived(MsnMessenger messenger, MsnSystemMessage message)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" "+messenger.getOwner().getDisplayName()+" system message recevied,message:"+message);
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
eventDetail.add(message);
imEventVO.setEventType(MsnEvent.SYSTEMMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* Received unknown message.
* @param switchboard Msn Switchboard
* @param message Msn Unknown Message
* @param contact Msn Contact
*/
public void unknownMessageReceived(MsnSwitchboard switchboard, MsnUnknownMessage message, MsnContact contact)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" friends:"+contact+" unknow message recevied,message:"+message);
Vector eventDetail=new Vector();
imEventVO=new ImEventVO();
eventDetail.add(message);
imEventVO.setEventType(MsnEvent.UNKNOWNMESSAGERECEIVED);
imEventVO.setEventDetail(eventDetail);
this.eventListener.writeToEventList(imEventVO);
}
/**
* File transfer finished.
* @param transfer Msn File Transfer
*/
public void fileTransferFinished(MsnFileTransfer transfer)
{
}
/**
* File transfer process.
* @param transfer Msn File Transfer
*/
public void fileTransferProcess(MsnFileTransfer transfer)
{
}
/**
* Received file transfer request.
* @param transfer Msn File Transfer
*/
public void fileTransferRequestReceived(MsnFileTransfer transfer)
{
transfer.cancel();
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" file transfer request received.");
}
/**
* File transfer started.
* @param transfer Msn File Transfer
*/
public void fileTransferStarted(MsnFileTransfer transfer)
{
if (isPrintLog)
System.out.println(jwmVersion+","+this.msnClient.getDisplayName()+","+Utility.getDate()+" "+Utility.getTime()+" file transfer started");
}
}