Send Sametime from Notes

I had to piece this together from other posts/examples but now I am able to send IM messages from lotusScript to a user or group. The first bit of code is a simple lotusScript Agent that uses the STAgent.java class i included below.

'// Paste this into a Notes Agent

Option Public

Use “STAgent”

Uselsx “*javacon”

Sub Initialize

Set JavaSession = New JavaSession

Dim STAgent As JavaClass

Dim mySTAgent As JavaObject

Set STAgent = JavaSession.GetClass(“STAgent”)

Set mySTAgent = STAgent.CreateObject

Call mySTAgent.stLogin(“sametime.xx.com”, “username”, “password”)

Call mySTAgent.stSendMessage(“bettita”, "The current time is " & Now)

Call mySTAgent.stLogout()

End Sub

'// End Notes Agent

//

//Paste this into a Java Script Library and save as STAgent

//Don’t forget to import STComm.jar - Edit Project button in Java Script Library

/*

  • STAgent.java

  • Created on July 3, 2006, 10:31 AM

  • To change this template, choose Tools | Template Manager

  • and open the template in the editor.

*/

//package userstatus;

//import lotus.domino.*;

import com.lotus.sametime.announcement.*;

import com.lotus.sametime.awareness.*;

import com.lotus.sametime.community.*;

import com.lotus.sametime.core.comparch.*;

import com.lotus.sametime.core.constants.*;

import com.lotus.sametime.core.types.*;

import com.lotus.sametime.lookup.*;

/**

  • @author BETTITA

*/

public class STAgent implements LoginListener , StatusListener, ResolveListener {

private STSession m_session;

private CommunityService m_communityService;

private LookupService m_lookupService;

private AnnouncementService m_announcementService;

private AwarenessService m_awarenessService;

private Resolver m_resolver;

private WatchList m_watchList;

private STObject m_requestedName;

private String m_strUserName;

private String m_strAnnouncement;

private short m_shAnnouncementStatus;

private boolean m_bSetup;

private boolean m_bResolved;

private boolean m_bFinished;

private String servername;

private String userid;

private String password;

/** Creates a new instance of STAgentNew */

public STAgent() {

}

public short stSendMessage(String User, String Announcement) {

m_strUserName = User;

m_strAnnouncement = Announcement;

stResolve();

return m_shAnnouncementStatus;

}

public void stLogout() {

try {

Thread.sleep(2000);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

m_watchList.removeStatusListener(this);

m_watchList.close();

m_communityService.logout();

boolean logoutExpired = false;

int logoutAttempts = 0;

do

{

if(++logoutAttempts > 1000) {

logoutExpired = true;

}

try {

Thread.sleep(5);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

while (isLoggedIn() == true && logoutExpired == false);

m_session.stop();

m_session.unloadSession();

}

public short stLogin(String servername, String userid, String password) {

// m_strUserName = User;

// m_strAnnouncement = Announcement;

this.servername = servername;

this.userid = userid;

this.password = password;

m_bSetup = false;

try {

m_session = new STSession(“AnouncementSender” + this);

} catch (DuplicateObjectException doe) {

doe.printStackTrace();

return -1;

}

m_session.loadSemanticComponents();

m_session.start();

m_communityService = (CommunityService) m_session.getCompApi(CommunityService.COMP_NAME);

m_lookupService = (LookupService) m_session.getCompApi(LookupService.COMP_NAME);

login();

int setupAttempts = 0;

do

{

if(++setupAttempts > 5000) {

System.err.println(“Setup attempt timed out”);

m_bSetup = true;

}

try {

Thread.sleep(5);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

while (m_bSetup == false);

if(isLoggedIn() == false) {

System.err.println(“Error: cannot login to Sametime server”);

return -1;

}

// resolve();

return m_shAnnouncementStatus;

}

private void login() {

m_communityService.addLoginListener(this);

m_communityService.loginByPassword(servername, userid, password);

int loginAttempts = 0;

boolean loginExpired = false;

do

{

if (++loginAttempts > 10000) {

loginExpired = true;

}

try {

Thread.sleep(5);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

while (isLoggedIn() == false && loginExpired == false);

if(isLoggedIn() == false) {

m_session.stop();

m_session.unloadSession();

m_bSetup = true;

}

}

private boolean isLoggedIn() {

if(m_communityService == null) {

return false;

}

return m_communityService.isLoggedIn();

}

public void loggedIn(LoginEvent event) {

//System.out.println(“loggedIn()”);

m_resolver = m_lookupService.createResolver(false, false, true, true);

m_awarenessService = (AwarenessService) m_session.getCompApi(AwarenessService.COMP_NAME);

m_watchList = m_awarenessService.createWatchList();

m_watchList.addStatusListener(this);

m_announcementService = (AnnouncementService) m_session.getCompApi(AnnouncementService.COMP_NAME);

m_bSetup = true;

}

public void loggedOut(LoginEvent event) {

//System.err.println("UserStatus loggedOut: " + event.getReason());

}

private void stResolve() {

m_bResolved = false;

m_bFinished = false;

m_resolver.addResolveListener(this);

m_resolver.resolve(m_strUserName);

int resolveAttempts = 0;

do

{

if(++resolveAttempts > 1000) {

m_bResolved = true;

}

try {

Thread.sleep(5);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

while (m_bResolved == false);

m_resolver.removeResolveListener(this);

int finishAttempts = 0;

do

{

if(++finishAttempts > 1000) {

m_bFinished = true;

}

try {

Thread.sleep(5);

} catch (InterruptedException ie) {

ie.printStackTrace();

}

}

while (m_bFinished == false);

}

public void resolved(ResolveEvent event) {

System.out.println(“resolved()”);

if(event.getName().compareTo(m_strUserName) == 0) {

m_bResolved = true;

m_requestedName = event.getResolved();

STObject stObject = {m_requestedName};

m_announcementService.sendAnnouncement(stObject, false, m_strAnnouncement);

m_shAnnouncementStatus = 0;

m_bFinished = true;

}

}

public void resolveConflict(ResolveEvent event) {

System.out.println(“resolveConflict()”);

if(event.getName().compareTo(m_strUserName) == 0) {

m_bResolved = true;

m_shAnnouncementStatus = -1;

m_bFinished = true;

}

}

public void resolveFailed(ResolveEvent event) {

System.out.println(“resolveFailed()”);

String failedNames = event.getFailedNames();

System.out.println(event.getReason());

if(failedNames[0].compareTo(m_strUserName) == 0) {

m_bResolved = true;

m_shAnnouncementStatus = -1;

m_bFinished = true;

}

}

public void groupCleared(StatusEvent event) {

}

public void userStatusChanged(StatusEvent event) {

System.out.println(“userStatusChanged()”);

// STWatchedUser watchedUser = event.getWatchedUsers();

// short userStatus = watchedUser[0].getStatus().getStatusType();

// if(userStatus == 32) {

STObject stObject = {m_requestedName};

m_announcementService.sendAnnouncement(stObject, false, m_strAnnouncement);

m_shAnnouncementStatus = 0;

m_bFinished = true;

// } else {

// m_shAnnouncementStatus = -1;

//m_bFinished = true;

// }

}

}