Hi,
I am using the accjbot.java file from accsdk_win32_1_8_2 and have modified it for my purpose.
In order to know the status of the IM sent to a user, I am checking AccResult in the OnImSendResult method. When trying to send IM to user not on a bot's buddy list (deliberately for testing), the bot program seems to go in an infinite loop logging the error message in logs (when AccResult object's value matches ACC_E_CANNOT_INITIATE_SESSION).
How to prevent the bot from going into loop in this case and make it log the error message (or take any other action on ACC_E_CANNOT_INITIATE_SESSION exception) only once? What is the recommended way to handle success and error codes for sending IMs using AIM Custom Client?
Sending message to users not on buddylist
| Login to post | Page: « < 1 of 1 > » |
| 04 Aug 2009 - 05:08 | 4740 |
| akshayukey | Sending message to users not on buddylist |
| 04 Aug 2009 - 13:59 | 4745 |
| akshayukey | Sending message to users not on buddylist Any thoughts anyone? |
| 04 Aug 2009 - 18:58 | 4750 |
| openaimsupport | Sending message to users not on buddylist Can I see the code snippet that logs the error in the OnImSendResult
method? This should not be happening. |
| 05 Aug 2009 - 01:24 | 4752 |
| akshayukey | Sending message to users not on buddylist Here is the OnImSendResult method:
public void OnImSendResult(AccSession arg0, AccImSession arg1, AccParticipant arg2, AccIm arg3, AccResult arg4) {
if("ACC_S_OK".equals(arg4.name())){
try {
LOG.log(Level.INFO, "sent instant message of type: "+arg1.getSessionType().name()+" to: "
+arg2.getName()+" msg: "+arg3.getText());
} catch (AccException e) {
e.printStackTrace();
}
}
if("ACC_E_CANNOT_INITIATE_SESSION".equals(arg4.name())) {
try {
LOG.log(Level.SEVERE, "Failed to send IM to "+arg2.getName());
} catch (AccException e) {
e.printStackTrace();
}
}
}
|
| 05 Aug 2009 - 02:36 | 4753 |
| akshayukey | Hi,
Probably the bot tries to send IM again and again. Is there a way to configure the bot to stop from retrying? Thanks. |
| 05 Aug 2009 - 12:50 | 4755 |
| openaimsupport | Sending message to users not on buddylist Can you send me your code to send the IM to the buddy not on your buddylist? |
| 06 Aug 2009 - 03:45 | 4758 |
| akshayukey | Hi,
The code is as below:
package com.aol.notify.aim;
import com.aol.acc.*;
import com.aol.pubt.forc.cfg.PropertyBag;
import java.util.Date;
import java.util.Vector;
import java.util.logging.Level;
import java.util.logging.Logger;
import java.util.regex.PatternSyntaxException;
public class AimSender implements AccEvents {
AccSession session;
static boolean running = true;
String signOffPassword = "please1234";
Vector<String> regexps = new Vector<String>();
AccClientInfo info;
AccPreferences prefs;
long start = new Date().getTime();
private static final Logger LOG = Logger.getLogger(AimSender.class.getName());
public static void main(String[] args) {
if(args.length != 2) {
System.out.print("usage: java AimSender username password");
return;
}
try {
AimSender a = new AimSender(args[0], args[1]);
a.msgPump();
a.info = null;
a.session = null;
a.prefs = null;
System.gc();
System.runFinalization();
} catch (AccException e) {
System.out.println("Main AccException, hr: "+e.errorCode);
e.printStackTrace();
}
}
public AimSender(String username, String password) throws AccException
{
// Create main session object
session = new AccSession();
// Add event listener
session.setEventListener(this);
//read key
String key = AimSender.class.getName() + " " + PropertyBag.getProperty("aim.customclient.dev.key");
// set key
info = session.getClientInfo();
info.setDescription(key);
// set screen name
session.setIdentity(username);
// setup prefs so anyone can IM us, but not chats or DIMs
session.setPrefsHook(new Prefs());
prefs = session.getPrefs();
prefs.setValue("aimcc.im.chat.permissions.buddies", AccPermissions.RejectAll);
prefs.setValue("aimcc.im.chat.permissions.nonBuddies", AccPermissions.RejectAll);
prefs.setValue("aimcc.im.direct.permissions.buddies", AccPermissions.RejectAll);
prefs.setValue("aimcc.im.direct.permissions.nonBuddies", AccPermissions.RejectAll);
prefs.setValue("aimcc.im.standard.permissions.buddies", AccPermissions.AcceptAll);
prefs.setValue("aimcc.im.standard.permissions.nonBuddies", AccPermissions.AcceptAll);
session.signOn(password);
}
private void msgPump() {
//msg pump
while( running )
{
try {
AccSession.pump(50);
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(50);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public void sendIM() throws AccException {
AccBuddyList bl = session.getBuddyList();
AccImSession imSession = session.createImSession(buddyname-from-buddylist, AccImSessionType.Im);
AccIm im = session.createIm("yt?", "text/plain");
if(running) imSession.sendIm(im);
imSession = session.createImSession(buddyname-not-on-buddylist, AccImSessionType.Im);
im = session.createIm("yt?", "text/plain");
if(running) imSession.sendIm(im);
}
public void OnImReceived(AccSession session, AccImSession imSession, AccParticipant participant, AccIm im) {
}
public void OnStateChange(AccSession arg0, AccSessionState arg1, AccResult arg2) {
if(arg1 == AccSessionState.Online){
try {
sendIM();
} catch (AccException e) {
e.printStackTrace();
}
}
if(arg1 == AccSessionState.Offline)
{
running = false;
}
}
/** Unimplemented stubs **/
public void OnSessionChange(AccSession arg0, AccSessionProp arg1) {
// TODO Auto-generated method stub
}
public void OnIdleStateChange(AccSession arg0, int arg1) {
// TODO Auto-generated method stub
}
public void OnInstanceChange(AccSession arg0, AccInstance arg1, AccInstance arg2, AccInstanceProp arg3) {
// TODO Auto-generated method stub
}
public void OnLookupUsersResult(AccSession arg0, String[] arg1, int arg2, AccResult arg3, AccUser[] arg4) {
// TODO Auto-generated method stub
}
public void OnSearchDirectoryResult(AccSession arg0, int arg1, AccResult arg2, AccDirEntry arg3) {
// TODO Auto-generated method stub
}
public void OnSendInviteMailResult(AccSession arg0, int arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnRequestServiceResult(AccSession arg0, int arg1, AccResult arg2, String arg3, int arg4, AccVariant arg5) {
// TODO Auto-generated method stub
}
public void OnConfirmAccountResult(AccSession arg0, int arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnReportUserResult(AccSession arg0, AccUser arg1, int arg2, AccResult arg3, int arg4, int arg5) {
// TODO Auto-generated method stub
}
public void OnAlertReceived(AccSession arg0, AccAlert arg1) {
// TODO Auto-generated method stub
}
public void OnPreferenceResult(AccSession arg0, String arg1, int arg2, String arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnPreferenceChange(AccSession arg0, String arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnPreferenceInvalid(AccSession arg0, String arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnPluginChange(AccSession arg0, AccPluginInfo arg1, AccPluginInfoProp arg2) {
// TODO Auto-generated method stub
}
public void OnBartItemRequestPropertyResult(AccSession arg0, AccBartItem arg1, AccBartItemProp arg2, int arg3, AccResult arg4, AccVariant arg5) {
// TODO Auto-generated method stub
}
public void OnUserRequestPropertyResult(AccSession arg0, AccUser arg1, AccUserProp arg2, int arg3, AccResult arg4, AccVariant arg5) {
// TODO Auto-generated method stub
}
public void OnGroupAdded(AccSession arg0, AccGroup arg1, int arg2, AccResult arg3) {
// TODO Auto-generated method stub
}
public void OnGroupRemoved(AccSession arg0, AccGroup arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnGroupMoved(AccSession arg0, AccGroup arg1, int arg2, int arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnBuddyAdded(AccSession arg0, AccGroup arg1, AccUser arg2, int arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnBuddyRemoved(AccSession arg0, AccGroup arg1, AccUser arg2, AccResult arg3) {
// TODO Auto-generated method stub
}
public void OnBuddyMoved(AccSession arg0, AccUser arg1, AccGroup arg2, int arg3, AccGroup arg4, int arg5, AccResult arg6) {
// TODO Auto-generated method stub
}
public void OnBuddyListChange(AccSession arg0, AccBuddyList arg1, AccBuddyListProp arg2) {
// TODO Auto-generated method stub
}
public void OnGroupChange(AccSession arg0, AccGroup arg1, AccGroupProp arg2) {
// TODO Auto-generated method stub
}
public void OnUserChange(AccSession arg0, AccUser arg1, AccUser arg2, AccUserProp arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnChangesBegin(AccSession arg0) {
// TODO Auto-generated method stub
}
public void OnChangesEnd(AccSession arg0) {
// TODO Auto-generated method stub
}
public void OnNewSecondarySession(AccSession arg0, AccSecondarySession arg1, int arg2) {
// TODO Auto-generated method stub
}
public void OnSecondarySessionStateChange(AccSession arg0, AccSecondarySession arg1, AccSecondarySessionState arg2, AccResult arg3) {
// TODO Auto-generated method stub
}
public void OnSecondarySessionChange(AccSession arg0, AccSecondarySession arg1, int arg2) {
// TODO Auto-generated method stub
}
public void OnParticipantJoined(AccSession arg0, AccSecondarySession arg1, AccParticipant arg2) {
// TODO Auto-generated method stub
}
public void OnParticipantChange(AccSession arg0, AccSecondarySession arg1, AccParticipant arg2, AccParticipant arg3, AccParticipantProp arg4) {
// TODO Auto-generated method stub
}
public void OnParticipantLeft(AccSession arg0, AccSecondarySession arg1, AccParticipant arg2, AccResult arg3, String arg4, String arg5) {
// TODO Auto-generated method stub
}
public void OnInviteResult(AccSession arg0, AccSecondarySession arg1, String arg2, int arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnEjectResult(AccSession arg0, AccSecondarySession arg1, String arg2, int arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void BeforeImSend(AccSession arg0, AccImSession arg1, AccParticipant arg2, AccIm arg3) {
}
public void OnImSent(AccSession arg0, AccImSession arg1, AccParticipant arg2, AccIm arg3) {
}
public void OnImSendResult(AccSession accSession, AccImSession arg1, AccParticipant arg2, AccIm im, AccResult result) {
if("ACC_E_USER_NOT_LOGGED_ON".equals(result.name())){
LOG.log(Level.SEVERE, "Failed to send IM as user not logged on");
}
if("ACC_S_OK".equals(result.name())){
try {
LOG.log(Level.INFO, "Sent instant message of type: "+arg1.getSessionType().name()+" to: "
+arg2.getName()+" msg: "+im.getText());
} catch (AccException e) {
e.printStackTrace();
}
}
if("ACC_E_CANNOT_INITIATE_SESSION".equals(result.name())) {
try {
LOG.log(Level.SEVERE, "Failed to send IM as user not on buddy list "+arg2.getName());
} catch (AccException e) {
e.printStackTrace();
}
}
}
public void BeforeImReceived(AccSession arg0, AccImSession arg1, AccParticipant arg2, AccIm arg3) {
// TODO Auto-generated method stub
}
public void OnInputStateChange(AccSession arg0, AccImSession arg1, String arg2, AccImInputState arg3) {
// TODO Auto-generated method stub
}
public void OnEmbedDownloadComplete(AccSession arg0, AccImSession arg1, AccIm arg2) {
// TODO Auto-generated method stub
}
public void OnEmbedUploadComplete(AccSession arg0, AccImSession arg1, AccIm arg2) {
// TODO Auto-generated method stub
}
public void OnRateLimitStateChange(AccSession arg0, AccImSession arg1, AccRateState arg2) {
// TODO Auto-generated method stub
}
public void OnNewFileXfer(AccSession arg0, AccFileXferSession arg1, AccFileXfer arg2) {
// TODO Auto-generated method stub
}
public void OnFileXferProgress(AccSession arg0, AccFileXferSession arg1, AccFileXfer arg2) {
// TODO Auto-generated method stub
}
public void OnFileXferCollision(AccSession arg0, AccFileXferSession arg1, AccFileXfer arg2) {
// TODO Auto-generated method stub
}
public void OnFileXferComplete(AccSession arg0, AccFileXferSession arg1, AccFileXfer arg2, AccResult arg3) {
// TODO Auto-generated method stub
}
public void OnFileXferSessionComplete(AccSession arg0, AccFileXferSession arg1, AccResult arg2) {
// TODO Auto-generated method stub
}
public void OnFileSharingRequestListingResult(AccSession arg0, AccFileSharingSession arg1, AccFileSharingItem arg2, int arg3, AccResult arg4) {
// TODO Auto-generated method stub
}
public void OnFileSharingRequestXferResult(AccSession arg0, AccFileSharingSession arg1, AccFileXferSession arg2, int arg3, AccFileXfer arg4) {
// TODO Auto-generated method stub
}
public void OnAvStreamStateChange(AccSession arg0, AccAvSession arg1, String arg2, AccAvStreamType arg3, AccSecondarySessionState arg4, AccResult arg5) {
// TODO Auto-generated method stub
}
public void OnAudioLevelChange(AccSession arg0, AccAvSession arg1, String arg2, int arg3) {
// TODO Auto-generated method stub
}
public void OnSoundEffectReceived(AccSession arg0, AccAvSession arg1, String arg2, String arg3) {
// TODO Auto-generated method stub
}
public void OnCustomDataReceived(AccSession arg0, AccCustomSession arg1, AccParticipant arg2, AccIm arg3)
{
// TODO Auto-generated method stub
}
public void OnCustomSendResult(AccSession arg0, AccCustomSession arg1, AccParticipant arg2, AccIm arg3, AccResult arg4)
{
// TODO Auto-generated method stub
}
public void OnEmbedUploadProgress(AccSession arg0, AccImSession arg1, AccIm arg2, String arg3, AccStream arg4)
{
// TODO Auto-generated method stub
}
public void OnEmbedDownloadProgress(AccSession arg0, AccImSession arg1, AccIm arg2, String arg3, AccStream arg4)
{
// TODO Auto-generated method stub
}
public void OnDeleteStoredImsResult(AccSession arg0, int arg1, AccResult arg2)
{
// TODO Auto-generated method stub
}
public void OnDeliverStoredImsResult(AccSession arg0,int arg1,AccResult arg2)
{
// TODO Auto-generated method stub
}
public void OnRequestSummariesResult(AccSession arg0,int arg1, AccResult arg2,AccVariant arg3)
{
// TODO Auto-generated method stub
}
public void OnAvManagerChange(AccSession arg0, AccAvManager arg1, AccAvManagerProp arg2, AccResult arg3)
{
// TODO Auto-generated method stub
}
public void OnLocalImReceived(AccSession arg0, AccImSession arg1, AccIm arg2)
{
// TODO Auto-generated method stub
}
public void OnPluginUninstall(AccSession s, AccPluginInfo p)
{
// TODO Auto-generated method stub
}
public void OnPushBuddyFeedResult(AccSession s, int t, AccResult r, String arg1)
{
// TODO Auto-generated method stub
}
}
Thanks. |
| 06 Aug 2009 - 09:05 | 4759 |
| openaimsupport | Sending message to users not on buddylist What are buddyname-from-buddylist and buddyname-not-on-buddylist? I suspect
you are getting into a loop sending IMs to buddies not on your buddy list... how do you get those two variables? |
| 06 Aug 2009 - 09:26 | 4760 |
| akshayukey | Those variables are hardcoded for the purpose of this dev test program. |
| 06 Aug 2009 - 12:31 | 4761 |
| openaimsupport | Sending message to users not on buddylist I tried this out in my copy of accjbot and am seeing everything work fine.
Please send me the corewitness log (corewitness plugin is available from www.gusverdun.com) so I can see whats going wrong for you. ConnectingACC_S_OK ValidatingACC_S_OK TransferringACC_S_OK NegotiatingACC_S_OK StartingACC_S_OK OnlineACC_S_OK sent instant message of type: Im to: mysntst1 msg: <HTML><BODY>yt?</BODY></HTML> sent instant message of type: Im to: mysnttst2 msg: <HTML><BODY>yt?</BODY></HTML> |
| 12 Aug 2009 - 12:33 | 4789 |
| openaimsupport | Sending message to users not on buddylist I did repro this, the problem is that we do not support initiating IMs from
a consumer BOT, only enterprise BOTs. |
| Login to post | Page: « < 1 of 1 > » |
